Assembly 8086汇编中数组的打印

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

我正在打印这个数组。下面是我的代码。但它会打印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字符放入
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匹配。