在8行3列将12666以十进制以零结尾的字符串用绿色显示出来
无报错,显示失败
assume cs:code
data segment
db 10 dup(0)
data ends
code segment
start:
mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dx,0803h
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:
;将word型数据转变为表示十进制数的以零结尾字符串,
;ax=word型数据,ds:si指向字符串的首地址
push di
push ax
push ds
push si
push cx
push dx
mov di,0
now:
inc di
mov dx,0
mov cx,10
div cx
mov cx,ax
add dl,30h
mov [si],dl
inc si
jcxz return
loop now
return:
mov byte ptr [si],0
pop dx
pop cx
pop si
pop ds
pop ax
call daoxu
pop di
ret
daoxu:
push cx
push si
push dx
push ax
mov cx,di
mov ah,0
da:mov al,[si]
push ax
inc si
loop da
mov si,dx
mov cx,di
daaa:pop ax
mov [si],al
inc si
loop daaa
pop ax
pop dx
pop si
pop cx
ret
show_str: ;(确认无误)
;制定位置 制定颜色 显示用零结尾的字符串
;dh=行号(0-24)dl=列号(0-79) cl=颜色 ds:si指向字符串首地址
;7 6 5 4 3 2 1 0
;BL R G B I R G B
;闪烁 背景 高亮 前景
;R红色 G绿色 B蓝色
push ax
push bx
push dx
push cx
push es
mov ax,0b800h
mov es,ax
mov al,dh
mov ah,0
mov dh,80*2
mul dh ;al*dh,fang ax
mov dh,0
shl dl,1 ;dl*2,luoji zuoyi 1wei
add ax,dx
mov di,ax
mov ah,cl
mov ch,0
cld ;清除方向标志
@b:
lodsb ;al=ds:[si],si+1
or al,al
mov cl,al
jcxz @f
stosw ;es:[di]=ax,di+2
jmp short @b
@f:
pop es
pop cx
pop dx
pop bx
pop ax
ret
code ends
end start
无报错,显示失败
assume cs:code
data segment
db 10 dup(0)
data ends
code segment
start:
mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dx,0803h
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:
;将word型数据转变为表示十进制数的以零结尾字符串,
;ax=word型数据,ds:si指向字符串的首地址
push di
push ax
push ds
push si
push cx
push dx
mov di,0
now:
inc di
mov dx,0
mov cx,10
div cx
mov cx,ax
add dl,30h
mov [si],dl
inc si
jcxz return
loop now
return:
mov byte ptr [si],0
pop dx
pop cx
pop si
pop ds
pop ax
call daoxu
pop di
ret
daoxu:
push cx
push si
push dx
push ax
mov cx,di
mov ah,0
da:mov al,[si]
push ax
inc si
loop da
mov si,dx
mov cx,di
daaa:pop ax
mov [si],al
inc si
loop daaa
pop ax
pop dx
pop si
pop cx
ret
show_str: ;(确认无误)
;制定位置 制定颜色 显示用零结尾的字符串
;dh=行号(0-24)dl=列号(0-79) cl=颜色 ds:si指向字符串首地址
;7 6 5 4 3 2 1 0
;BL R G B I R G B
;闪烁 背景 高亮 前景
;R红色 G绿色 B蓝色
push ax
push bx
push dx
push cx
push es
mov ax,0b800h
mov es,ax
mov al,dh
mov ah,0
mov dh,80*2
mul dh ;al*dh,fang ax
mov dh,0
shl dl,1 ;dl*2,luoji zuoyi 1wei
add ax,dx
mov di,ax
mov ah,cl
mov ch,0
cld ;清除方向标志
@b:
lodsb ;al=ds:[si],si+1
or al,al
mov cl,al
jcxz @f
stosw ;es:[di]=ax,di+2
jmp short @b
@f:
pop es
pop cx
pop dx
pop bx
pop ax
ret
code ends
end start