我试图将用户输入的数字移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到左边。不幸的是,这不会发生。
答案 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