用汇编语言实现从键盘输入一个字符,输出其对应的ASCII码

Hello,大家好呀!这是本人的第一篇博客,这学期正好在学汇编语言,上周老师布置了一个作业,用汇编语言实现从键盘输入一个字符,输出其对应的ASCII码。说实话,这个问题最开始的时候令我不知从何下手,明明用c语言只需要几行代码,用汇编来实现却显得十分困难。于是我便打开了CSDN,可搜索了半天却没找到想要的结果,于是只能靠自己解决了问题。现在将我的代码放到下面供大家参考。

这里还得提一下,我们教学使用的是Intel 8086体系的指令集。 

这是题目的要求:

这是代码:

data segment
	string db 6 dup(?) ;定义一个字符串用来保存每一位字符
data ends
code segment
	assume cs:code,ds:data
start:
	mov ax,data ;初始化段寄存器
	mov ds,ax
	mov ah,1 ;从键盘输入一个字符
	int 21H
	mov ah,0 ;这一步必须要写
	mov bh,10
	div bh
	add ah,30H 
	mov string+4,ah ;将余数先保存到高位
	cbw
	div bh
	add ah,30H
	mov string+3,ah 
	cbw
	div bh
	add ah,30H
	mov string+2,ah
	mov string+5,'$' ;字符串结束标志
	mov dl,0AH ;输出一个换行字符
	mov ah,2 
	int 21H
	mov dx,offset string ;输出字符串
	mov ah,9
	int 21H
	mov ah,4cH
	mov al,0
	int 21H
code ends
	end start

这是运行的效果:

将上面的代码保存为ascii.asm然后编译为可执行文件ascii.exe

再在dosbox里执行ascii这个命令,就可以看到相应的结果了

 

现在,我来讲解一下代码的逻辑:

任何一个程序都需要输入和输出,这是最基本的要求。因此,第一步需要搞明白在汇编语言里如何进行输入和输出。

详情见以下链接:

汇编常用的INT 21H系统调用 - 简书 (jianshu.com)

在搞明白如何进行输入与输出后,就进入一个程序的核心步骤,如何通过运算将输入转换为对应的输出:

 

当我们从键盘输入一个字符后,字符的ASCII码就被存储到AL(al)寄存器里,比如,如果我们从键盘打一个A,那么此时AL寄存器里的数就是65,现在要解决的问题就是如何将数65转换为字符串'065',我们知道字符'0'的ASCII码值是48,而'1'的ASCII码值是49,按照这个规律,我们就可以得到解决思路了。我们可以先用65除以10,得到余数5,再把5加上48就得到了'5'的ASCII码值,将这个ASCII码值存入一个字符串的高位,然后将商继续除以10......

将上面的步骤总共进行三次就可以得到一个三位长度的字符串了。

然后进行输出即可。

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值