2015-01-27 1 views
0

мой код должен считать все символы 'a' в каждом пользовательском вводе i использовать cmp, если он равен, то моя программа переходит к 'incre:', которые увеличивают значение выхода bl.the всегда это> ¶ < й не знает, где проблемаязык ассемблера все 'a' в символьном вводе

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 

ENTER 9 СИМВОЛОВ: aaadfasfg
номер: ¶

ENTER 9 СИМВОЛОВ: fffffffff
КОЛИЧЕСТВА: с ¶

ENTER 9 СИМВОЛОВ: dasdawdaf
номеру: ¶

+0

'mov dh, bl' RONG - вы хотите' dl'! –

ответ

2

У вас есть опечатка в коде:

mov ah,02h 
mov dh,bl <-- HERE 
int 21h 

Персонаж должен быть помещен в dl, а не в dh.

Другая проблема заключается в том, что вы приращением bl один раз слишком много:

cmp al,61h 
je incre 

cmp cl,9 
je incre <-- Wrong. al didn't equal 'a', so we shouldn't jump to incre. 
jmp input 

Это должно быть изменено на что-то вроде:

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