Assembly emu8086-如何从ASCII代码中获取字符

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

我想打印字符串“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
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