0

我试图将用户输入的数字移动 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

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

4

1 回答 1

1

在移位之前,您需要从 的值中减去'0'/ 48d/以获取 ASCII 值的字符的数值。移位 ASCII 值对乘法没有意义。然后在打印前添加。0x30dl'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
于 2012-09-16T14:15:06.697 回答