Assembly 试图在ASM中完成元音计数程序,但始终存在“非法指令”错误

Assembly 试图在ASM中完成元音计数程序,但始终存在“非法指令”错误,assembly,dos,x86-16,tasm,Assembly,Dos,X86 16,Tasm,未初始化的数据进入MASM中的BSS部分,由data?表示?。这就是为什么会出现非法指令错误 .model small .stack 100h .code main proc mov ax,@data ;initialize ds register mov ds,AX mov si,offset String ;initialize p mov cx,len ;length in CX register mov bl,00

未初始化的数据进入MASM中的BSS部分,由data?表示?。这就是为什么会出现非法指令错误

.model small
.stack 100h
.code
main proc
    mov ax,@data        ;initialize ds register
    mov ds,AX
    mov si,offset String    ;initialize p
    mov cx,len      ;length in CX register
    mov bl,00       ;vowel count=0
BACK:   mov al,[si]
    cmp al,'a'
    jb VOWEL
    cmp al,'z'      ;Convert the character to upper case
    ja VOWEL
    sub al,20H
VOWEL:  cmp al,'A'
    jnz a3
    inc bl
    jmp a2
a3: cmp al,'E'
    jnz a4
    inc bl
    jmp a2
a4: cmp al,'I'
    jnz a5
    inc BL
    jmp a2
a5: cmp al,'O'
    jnz a6
    inc bl
    jmp a2
a6: cmp al,'U'
    jmp a2
    inc bl
a2: inc si
    loop BACK
    mov si, ax
    mov ax, 4C00H
    int 21h
main endp
.data
    string db "Kono taisetsu na omoi wa wasurenai","$"
    len dw string
    **VOWEL db?** <- considers this as an illegal instruction
end main

数据库和数据库之间需要的空间?也许吧?我试过了,但是它会把元音看成一个不同的符号。你的代码中也有一个叫做元音的标签,在你的数据中有一个元音标签。它们必须有不同的名称。我应该编辑哪一个,代码中的元音还是元音标签?没关系,其中一个必须更改。不管是哪一个。
        .data?

Vowel:  db  ?, ?, ?             ; Reserves 3 bytes
        dw  ?, ?                ; Reserves 4 bytes 2 word
 Buff:  db  100 dup<?>          ; Reserves 100 bytes
    L0: lodsb                   ; Reads byte from DS:SI and increments SI
        cmp     al, '?'         ; Test if at end of string
        jz      Finished        ; You need a label called

        and     al, 5FH         ; Convert letter to uppercase
        cmp     al,'A'
        jz      Bump
        cmp     al,'E'
        jz      Bump

        ......

        cmp     al,'U'
        jnz     L0

 Bump:  inc     bl
        jmp     L0

Finished: