2015-04-01 3 views
-2

мне нужно прочитать вход и сохранить его, но вход должен иметь более 1 цифры, как 45 или 55.Читайте больше, чем один вход в x86

Я уже сделал это работает, но я думаю, что это возможно чтобы сделать его лучше. Я сделал это так:

mov  ah, 1 
int  21h   
mov  ah, 0 
mov  cl, 0Ah 
sub  al, 30h ; 
mul  cl 
mov  bx, ax 
mov  ah, 1 
int  21h  
sub  al, 30h ; '0' 
add  bx, ax 
mov  temp_val, bl 
retn 

Возможно ли это? Я не могу сделать это по-другому.

+1

DOS function 0Ah –

ответ

2

Есть некоторые проблемы в вашем коде

mov  ah, 1 
int  21h   
mov  ah, 0 ; <-- Here MOV AH,0 is useless because ... 
mov  cl, 0Ah 
sub  al, 30h 
mul  cl  ; <-- ... MUL changes AH anyway 
mov  bx, ax 
mov  ah, 1 
int  21h  
sub  al, 30h 
       ; <-- Here you forgot MOV AH,0 so you can ... 
add  bx, ax ; <-- ... correctly add AX to BX 

Но если все, что вам нужно ввести 2 символов по рассмотреть следующие

mov  ah, 1 
int  21h   
mov  cl, 0Ah 
sub  al, 30h 
mul  cl 
mov  bl, al 
mov  ah, 1 
int  21h  
sub  al, 30h 
add  bl, al ; Largest number is 99 so it fits in BL 

Или даже без использования инструкции MUL и короткий

mov  ah, 1 
int  21h   
mov  bl, al 
mov  ah, 1 
int  21h  
mov  ah,bl 
sub  ax, 3030h 
aad 
mov  bl, al ; Largest number is 99 so it fits in BL 
+0

Fifoernik, большое вам спасибо! Решила мою проблему с хорошим объяснением – niarb

Смежные вопросы