2013-03-06 47 views
0
ideal 
model small 
stack 1024 
dataseg 
    array1 db 11 dup(?) 
codeseg 
org 100h 
PROC MAIN 
    CALL GETINPUT 
    CALL PRINTARRAY 
EXIT: 
    mov ah, 4ch 
    int 21h 
ENDP 

PROC PRINTARRAY 
    lea dx, [array1] 
    mov ah, 9 
    int 21h 
    ret 
ENDP 

PROC GETINPUT 
    mov bx, offset array1 
    GET: 
     CALL GETCHAR 
     cmp al, '.' 
     je ENDGET 
     mov [array1+bx], al 
     inc bx 
     cmp bx, 10 
     jge ENDGET 
     CALL PRINTSPACE 
     jmp GET 
    ENDGET: 
    mov [array1+bx], '$' 
    ret 
ENDP 

PROC GETCHAR 
    mov ah, 1 
    int 21h 
    ret 
ENDP 

PROC PRINTSPACE 
    mov dl, ' ' 
    mov ah, 2 
    int 21h 
    ret 
ENDP 

PROC PRINTCHAR 
    mov ah, 2 
    int 21h 
    ret 
ENDP 

END MAIN 

當添加'$'時,獲取NTVDM錯誤cs:0423 ip:0125。沒有哨兵,我不能打印沒有垃圾和其他字符的數組。 :( 我不知道它,因爲我的操作系統,Windows 7的32位,或彙編請幫我:(

+1

你的循環似乎允許多達10個字符存儲在'array1'中(你的退出條件是'al =='。所以你最終可能會把'$'寫到'[array1 + 10]'(即第11個字節),因爲你已經聲明array1是一個10字節的數組,所以這是超出限制的。 – Michael 2013-03-06 14:38:15

+0

你說得對。將其更改爲20.仍然是相同的錯誤。 – 2013-03-06 15:23:48

回答

1

看看這兩個指令:。

mov bx, offset array1 
GET: 
    ... 
    mov [array1+bx], al 

不看起來奇怪你認爲你的地址是array1,然後把它加到array1+bx

+0

是的。我明白你的觀點。試圖將其更改爲0,但仍然存在的錯誤仍然存​​在,每當我添加'$' – 2013-03-06 14:11:31

+0

debug.exe救援? – 2013-03-06 14:14:49

+0

這是問題之一。它適用於調試,但不適用於終端。 – 2013-03-06 14:32:10