欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

王爽汇编语言 实验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

相关标签: 汇编