2014-07-12 85 views
0

我試圖打印此數組。以下是我的代碼。但它打印了一些怪異的字符9次(如:εεεεεεεεε)...請告訴我什麼是錯的?打印包含8086程序集中的數組

.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 
+0

這些數字不應該是ASCII字符嗎?如果是這樣,你需要50,51,52,...,48. – EOF

+0

你是對的,但我怎樣才能使用實際的數字(2,3,4,5),而不是使用ASCII字符(50,51,52 ...)?還有另一個問題,'si'沒有增加。它打印相同的索引9次... – user3520573

+0

@ user3520573只需將'0x30h'添加到ASCII等效的數字'0 - 9'中的任何一個,這相反,從任何ASCII數字'0'減去'0x30h' - '9''返回值。 – James

回答

0

你需要要顯示爲dlASCII字符。如何將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