print numbers on the screen.(show_str and dtoc function)

本文介绍了一个使用16位汇编语言编写的程序,该程序能够将数据段中的整数转换为字符并显示出来。通过除以10的方法逐位取出整数的每一位,并将其转化为ASCII码,最终实现屏幕上的数字显示。

assume cs:code data segment dw 123, 12666, 1, 8, 3, 38 db 10 dup (0) ; 预留空间用于存放转换后的字符串 data ends code segment start: mov ax, data mov ds, ax mov si, 0 ; 指向数据 mov di, 0 ; 指向存放字符串的起始位置 next: mov ax, [si] call dtoc call show_str ; 显示转换后的字符串 add si, 2 ; 指向下一个数据 add di, 10 ; 指向下一个存放字符串的位置 cmp si, 12 ; 判断是否处理完所有数据 jne next mov ax, 4c00h int 21h dtoc: push ax push bx push cx push dx push si mov bp, sp mov bx, 10 mov dx, 0 dtoc_s: div bx mov cx, dx add cx, '0' push cx mov cx, ax jcxz dtoc_ok mov dx, 0 jmp dtoc_s dtoc_ok: pop ax mov [si], al mov cx, bp sub cx, sp jcxz dtoc_out inc si loop dtoc_ok dtoc_out: mov al, 0 mov [si+1], al pop si pop dx pop cx pop bx pop ax ret show_str: mov ax, 0b800h mov es, ax show: mov al, [si] cmp al, 0 je exit mov es:[di], al mov byte ptr es:[di+1], 7 ; 字符属性,白色 add si, 1 add di, 2 jmp short show exit: ret code ends end start 这个输出结果并不满足(2)数值显示 问题: 编程,将 data 段中的数据以十进制形式显示出来 data dw 123, 12666, 1, 8, 3, 38 data ends 这些数据在内存中都是二进制信息,标记了数值的大小。要把它们显示到屏幕上,成为我们 能够读懂的信息,需要进行信息的转化。比如:数值 12666,在机器中存储为二进制信息: 0011000101111010B(317AH),计算机可以理解它。而要在显示器上读到可以理解的数值 12666,我们看到的应该是一串字符串“12666”。由于显卡遵循的是 ASCII 编码,为了让我们 能在显示器上看到这串字符,它在机器中应以 ASCII 码的形式存储为:31H、32H、36H、 36H、36H(字符“0”~“9”对应的 ASCII 码为 30H~39H) 因此,要将数据用十进制形式显示到屏幕上,要进行两步工作:  将用二进制信息存储的数据转变为十进制形式的字符串  显示十进制形式的字符串 第二步在前一个实验中已经实现,只需调用 show_str 即可。因此重点需要编写一个将二进 制信息转变为十进制形式的通用子程序。 子程序描述: 名称:dtoc 功能:将 word 型数据转变为表示十进制数的字符串,字符串以 0 为结尾符 参数:(ax)=word 型数据,ds:si 指向字符串的首地址 返回:无
最新发布
11-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值