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

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

这是题目的要求:

怎么输出字符串python 怎么输出字符串的ascii码_其他

这是代码:

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这个命令,就可以看到相应的结果了

怎么输出字符串python 怎么输出字符串的ascii码_字符串_02

 

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

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

详情见以下链接:

汇编常用的INT 21H系统调用

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

怎么输出字符串python 怎么输出字符串的ascii码_怎么输出字符串python_03

 

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

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

然后进行输出即可。