在x86中读取多个输入

时间:2015-04-01 22:34:09

标签: assembly x86

我需要读取输入并存储它,但输入需要超过1位数,如45或55.

我已经让它成功了,但我认为可以让它变得更好。我是这样做的:

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 个答案:

答案 0 :(得分: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