实验10.3|dtoc

dtoc

在这里插入图片描述

针对dtoc的简单说明:

取下十进制数的每一位转换为ASCII码入栈,然后以DS:[SI]为首地址依次出栈即可。

(取下十进制数中每一位的方法——重复除十取余数直到商为零,同时因为8位寄存器保存数值范围为0~127所以应进行除数为16位的除法,才能避免除法溢出

针对show_str的简单说明:

是显示字符串的子程序

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
	
	dtoc:
		push si
		mov di,0
		s:
		mov dx,0
		mov bx,10;一定要16位除数,不然除法溢出
		div bx
		add di,1
		mov cx,ax
		add dx,30h
		push dx
		jcxz s1
		jmp short s
		
		s1:
		mov cx,di
		s2:
		pop [si]
		add si,1
		loop s2
		pop si
		ret
		
	show_str:
		push dx
		push cx
		push si
		push es;指向显存段地址0b800h
		push bx;指向列
		push di;指向行
		
		mov si,0
		mov ax,0b800h
		mov es,ax
		;得到起始行列,di表示行,bx表示列
		mov al,160
		mul dh
		mov di,ax
		
		mov bh,0
		add dl,dl; 偶数位对应ASCII码
		mov bl,dl
		mov dl,cl
		s3:		
		
		mov ch,0
		mov cl,[si]
		jcxz ok
		mov es:[di][bx],cl
		mov es:[di][bx+1],dl
		add si,1
		add bx,2
		jmp short s3
		
		ok:		
		pop si
		pop cx
		pop dx
		pop es
		pop bx
		pop ax
		ret

	
code ends

end start
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值