WangShuangアセンブリ言語実験10-数値表示

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

おすすめ

転載: blog.csdn.net/weixin_44223946/article/details/108910759