程序集x86 - 尝试切换用户输入时,向左移动不起作用

时间:2012-09-16 12:54:50

标签: assembly x86 int user-input x86-16

我试图将用户输入的数字移1,因为SHL相当于2的倍数,这就是我将输入移动2以打印2的倍数的原因。

这是我的代码,

MOV AH,01H
INT 21H

MOV DL,AL

MOV AH, 02H
INT 21H 

MOV CX,10

L1:
    SHL DL,1
    MOV AH, 02H
    INT 21H 
LOOP L1


MOV AX, 4CH ; RETURN TO MS-DOS
INT 21H

01的服务INT 21H接受用户输入的字符。在这种情况下是一个数字,在每次迭代时,循环移位1到左边。不幸的是,这不会发生。

1 个答案:

答案 0 :(得分:1)

在转移之前,您需要从'0'的值中减去48d / 0x30 / dl以获取ASCII值字符的数字值。移位ASCII值对于乘法没有意义。然后在打印前将'0'添加到dl

mov cx,10

sub dl,'0' ; convert ASCII value to numeric value: '0' -> 0, '1' -> 1 ... 

L1:
    shl dl,1
    mov ah,02h
    add dl,'0' ; convert numeric value to ASCII value: 0 -> '0', 1 -> '1' ...
    int 21h
    sub dl,'0' ; convert ASCII value back to numeric value: '0' -> 0, '1'
loop L1