在TASM中向数组添加'$'时出现NTVDM错误

时间:2013-03-06 14:01:10

标签: assembly tasm sentinel ntvdm

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 个答案:

答案 0 :(得分:1)

请看这两条说明:

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

使用array1的地址然后在array1+bx中将其添加到自身中,您觉得奇怪吗?