汇编语言 王爽 实验十 数值显示

assume cs:code,ds:data
data segment
	db 20 dup(0)
data ends
code segment 
main:	mov ax,12666
		mov bx,data
		mov ds,bx
		mov si,0
		call dtoc
		mov dh,11
		mov dl,32
		mov cl,24h
		call show_str
		
		mov ax,4c00h
		int 21h
		
dtoc:	push ax    ;以十进制形式显示data段中的数据
		push bx
		push cx
		push si
		push dx

		
		mov bx,0
		mov dx,0
chg:	mov cx,10
		call divdw
		jcxz j   ;各个数字已全部取出
		push cx
		add bx,1
		jmp short chg
		
	j:	mov cx,bx
	s0:	pop ax   ;将各个数字依次出栈,并存放到内存中
		add al,30h
		mov [si],al
		inc si
		loop s0
		
		pop dx
		pop si
		pop cx
		pop bx
		pop ax
		ret

divdw:			; 参数  (ax)=dword型数据的低16位
				;		(dx)=dword型数据的高16位
				;		(cx)=除数
				; 返回	(dx)=结果的高16位,(ax)=结果的低16位
				;		(cx)=余数
		push bx
		
		mov bx,ax
		mov ax,dx
		mov dx,0
		div cx
		push ax   ;将高位产生的商入栈保存
		mov ax,bx
		div cx
		mov cx,dx ;结果
		pop dx
		
		pop bx
		ret		

show_str:    ;参数:(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79)
				;(cl)=颜色,ds:si 指向字符串的首地址
		push ax
		push bx
		push cx
		push dx
		push si
		push es
		push di  ; 保存寄存器原始信息,防止被子程序破坏

		mov ax,0  ;注意,使用前,清零。否则很有可能会影响结果
		mov bx,0
		mov ah,dh
		mov bl,160
		mul bl
		add dl,dl
		add al,dl
		add ax,0b800h
		mov es,ax 	;显示字符串的屏幕起始位置
		mov di,0
		mov al,cl
	s:	mov cl,[si]
		mov ch,0
		jcxz ok
		mov es:[di],cl
		mov es:1[di],al
		inc si
		add di,2
		jmp short s
		
	ok:	pop di	;恢复寄存器信息,并返回主程序
		pop es
		pop si
		pop dx
		pop cx
		pop bx
		pop ax	
		ret

code ends
end main

自己写的,就是调用了一下前面写的两个子程序,不过,感觉麻烦了,有待优化!


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值