Assembly emu8086-如何从ASCII代码中获取字符
我想打印字符串“Hello World”的长度,我得到的是值(0Bh是11,但中断打印的是ascii字符,它是♂ 而不是11) 长度以Assembly emu8086-如何从ASCII代码中获取字符,assembly,emu8086,Assembly,Emu8086,我想打印字符串“Hello World”的长度,我得到的是值(0Bh是11,但中断打印的是ascii字符,它是♂ 而不是11) 长度以AL表示,很容易用十进制表示。 AAM指令将首先将AL寄存器除以10,然后将商保留在AH中,剩余部分保留在AL中 请注意,此解决方案适用于从0到99的所有长度 aam add ax, "00" ;Turn into text characters push ax mov al, ah mov ah, 0Eh ;Display tenths int 10h
AL
表示,很容易用十进制表示。AAM
指令将首先将AL
寄存器除以10,然后将商保留在AH
中,剩余部分保留在AL
中请注意,此解决方案适用于从0到99的所有长度
aam
add ax, "00" ;Turn into text characters
push ax
mov al, ah
mov ah, 0Eh ;Display tenths
int 10h
pop ax
mov ah, 0Eh ;Display units
int 10h
在涉及的数字小于10的情况下,在一位数前实际显示一个零是很难看的。然后只需在代码中添加下一个:
aam
add ax, "00" ;Turn into text characters
cmp ah, "0"
je Skip
push ax
mov al, ah
mov ah, 0Eh ;Display tenths
int 10h
pop ax
Skip:
mov ah, 0Eh ;Display units
int 10h
所以你的问题是如何将整数
11
转换成字符串“11”
?@Someprogrammerdude问题是我得到的不是整数11而是ASCII 0Bh。它正在打印♂' 符号是ASCII表格中的第11个符号。您必须小心区分数字和数字。你在一个寄存器中有一个数字,一个数字没有基-它不是二进制的,十六进制的或十进制的-这些就是你对它的看法。数字是数字的表示形式,一旦选择了数字的格式(十六进制、二进制、罗马、希伯来语等),只需进行一次转换。在文档中应该还有一些例子可以学习。不,寄存器中的值是以二进制形式存储的。但它们是用十六进制表示法表示的。在二进制计算机上,所有内容都存储在二进制中,只是呈现方式不同。您需要一个函数将CL的内容转换为ascii表示形式。谷歌搜索“x86将int转换为ascii”肯定会找到很多匹配项很好地使用了BCD指令(aa*
),我从来没有真正费心学习过:)
aam
add ax, "00" ;Turn into text characters
push ax
mov al, ah
mov ah, 0Eh ;Display tenths
int 10h
pop ax
mov ah, 0Eh ;Display units
int 10h
aam
add ax, "00" ;Turn into text characters
cmp ah, "0"
je Skip
push ax
mov al, ah
mov ah, 0Eh ;Display tenths
int 10h
pop ax
Skip:
mov ah, 0Eh ;Display units
int 10h