Assembly 试图在ASM中完成元音计数程序,但始终存在“非法指令”错误
未初始化的数据进入MASM中的BSS部分,由data?表示?。这就是为什么会出现非法指令错误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
.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: