Assembly 汇编语言计数全部';a';字符输入

Assembly 汇编语言计数全部';a';字符输入,assembly,tasm,Assembly,Tasm,我的代码应该计算每个用户输入中的所有字符“a”,如果相等,我使用cmp,然后我的程序跳转到“incre:”以增加bl的值。输出总是这个>^ title sample.prog cstack segment para stack 'stack' dw 200h cstack ends cdata segment para 'data' msg1 db 'ENTER 9 CHARACTER: $',10,13 msg2 db 10,13,'NUMBER OF a: $' cdata ends c

我的代码应该计算每个用户输入中的所有字符“a”,如果相等,我使用cmp,然后我的程序跳转到“incre:”以增加bl的值。输出总是这个>^

title sample.prog
cstack segment para stack 'stack'
dw 200h
cstack ends

cdata segment para 'data'
msg1 db 'ENTER 9 CHARACTER: $',10,13
msg2 db 10,13,'NUMBER OF a: $'
cdata ends

ccode segment para 'code'
assume cs:ccode,ds:cdata,ss:cstack
main:
 mov ax,cdata
 mov ds,ax

 mov ah,09h
 lea dx,msg1
 int 21h

 mov cl,0
 mov bl,30h

input:
 mov ah,01
 int 21h
 inc cl

 cmp al,61h
 je incre


 cmp cl,9
 je incre
 jmp input

incre:
 inc bl

 cmp cl,9
 jne input

 mov ah,09h
 lea dx,msg2
 int 21h

 mov ah,02h
 mov dh,bl
 int 21h

 mov ah, 4ch
 int 21h

ccode ends
end main
输入9个字符:aaadfasfg
a:

输入9个字符:fffffffff
a:

输入9个字符:dasdawdaf

a的数量:¨

您的代码中有一个输入错误:

 mov ah,02h
 mov dh,bl    <-- HERE
 int 21h
这应该改为:

 cmp al,61h
 je incre

 cmp cl,9
 je done  ; We're done. Jump past the end of the loop without incrementing bl
 jmp input

incre:
 inc bl

 cmp cl,9
 jne input
done:
或者更简单:

cmp al,61h
jne no_inc
inc bl
no_inc:
cmp cl,9
jne input

mov-dh,bl
RONG-你想要
dl
cmp al,61h
jne no_inc
inc bl
no_inc:
cmp cl,9
jne input