Assembly 8086汇编中数组的打印
我正在打印这个数组。下面是我的代码。但它会打印9次一些奇怪的字符(比如:ϵϵϵϵϵϵϵ)。。。请告诉我怎么了Assembly 8086汇编中数组的打印,assembly,x86-16,Assembly,X86 16,我正在打印这个数组。下面是我的代码。但它会打印9次一些奇怪的字符(比如:ϵϵϵϵϵϵϵ)。。。请告诉我怎么了 .data arr db 2,3,4,5,6,7,8,9,0 .code Main Proc mov cx, 9 l1: lea si, arr mov bl, arr[si] mov dl, bl mov ah, 2 int 21h inc si loop l1 您需要将要显示的ASCII字符放入d
.data
arr db 2,3,4,5,6,7,8,9,0
.code
Main Proc
mov cx, 9
l1:
lea si, arr
mov bl, arr[si]
mov dl, bl
mov ah, 2
int 21h
inc si
loop l1
您需要将要显示的ASCII字符放入
dl
。如何将ASCII字符放入程序取决于您的汇编程序,只需自己计算数值可能是最简单的。至于实际代码,您的循环标签
l1
位于错误的位置,并且它周围的一些代码是冗余的。您可以这样编写程序:
.data
arr db 50,51,52,53,54,55,56,57,48
.code
Main Proc
mov cx, 9
#wrong position l1:
lea si, arr
#redundant mov bl, arr[si]
l1:
mov dl, [si]
mov ah, 2 #not sure if this could be moved in front of the loop, check if syscall clobbers ah
int 21h
inc si
loop l1
这些数字不应该是ASCII字符吗?如果是的话,你需要50,51,52,…,48。你是对的,但是我如何使用实际的数字(2,3,4,5)而不是使用ASCII字符(50,51,52?还有一个问题,“si”不是递增的。它将同一个索引打印9次…@user3520573只需将
0x30h
添加到任何一个数字0-9
中,对于ASCII等效数字,这是相反的,从任何ASCII数字'0'-'9'
中减去0x30h
即可返回值。MS-DOS不使用ASCII。它使用的代码页类似于。CP437的下半部分(数字字符所在的位置)与ASCII匹配。