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

シフトする前に、ASCII 値に挿入された文字の数値を取得するには、値から'0'/ 48d/を減算する必要があります。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 に答える