王爽汇编语言 实验10-数值显示
程序员文章站
2024-02-02 15:50:04
...
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 dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
;功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符。
;参数:(ax)=word型数据,ds:si 指向字符串的首地址。
;返回:无。
;应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。在显示时我们调用本次实验中的第一个子程序 show_str。
dtoc: push dx
push si
push cx
push bx
push di ;保存主程序中的寄存器数据
mov bx,10 ;因为商1266>256,所以用32位被除数的除法
dtoc_s: sub dx,dx ;将word型数据转变为表示十进制数的字符串,求余出来是倒置的,所以用栈转正。
div bx
mov cl,dl
add cl,30h
push cx ;压栈只能用16位
inc di ;用来记录压入栈的数量,也就是数值的位数,比如12666有五位,di就等于5
mov cx,ax
inc cx
loop dtoc_s
mov cx,di
dtoc_s1:pop ax
mov [si],al
inc si
loop dtoc_s1
pop di
pop bx
pop cx
pop si
pop dx
ret
;子程序show_str具体过程看实验10显示字符串代码
show_str: push dx
push ax
push es
push bx
push si
push cx
mov cl,dh
mov ch,0
mov ax,0
jcxz a
s: add ax,0a0h
loop s
a: mov cl,dl
jcxz a1
s0: add ax,2
loop s0
a1: mov bx,ax
mov ax,0b800h
mov es,ax
pop ax
show: mov cl,[si]
jcxz ok
mov es:[bx+1],al
mov es:[bx],cl
inc si
add bx,2
jmp short show
ok: push ax
pop cx
pop si
pop bx
pop es
pop ax
pop dx
ret
code ends
end start
上一篇: 汇编语言寻址练习
下一篇: 浅谈:提升App用户留存率的几大方法