Я должен принять 16 бит в качестве входа как 1234 и попытался отобразить его. Но он выдает 4660. Я пытался сохранить цифру за цифрой, потому что когда я беру ввод, он будет сохранен в al
как в форме ASCII. После этого я попытался сдвинуть весь бит в al
влево, используя операцию сдвига влево (SHL
), которая даст мне 10 в al
, если я вставил 1. После этого я вставил вторую цифру и выполнил сдвиг и поворот Я попытался сделать это в форме 02, если вторая сохраненная цифра равна 2. Далее я выполнил OR
операцию с 10 и 02, которые хранятся в регистре. Я повторил тот же процесс для хранения младшего 8-битного числа. Но вывод другой.
.model small
.stack 100h
.data
.code
main proc
mov ax,@data
mov ds,ax
;taking 16 bit number input
mov ah,01h
int 21h
mov bh,al
mov cl,4
shl bh,cl
mov ah,01h
int 21h
mov cl,4
shl al,cl
mov cl,4
ror al,cl
or bh,al
mov ah,01h
int 21h
mov bl,al
mov cl,4
shl bl,cl
mov ah,01h
int 21h
mov cl,4
shl al,cl
mov cl,4
ror al,cl
or bl,al
;taking 16 bit number input
;displaying number in dos
mov ax,bx
mov bx,10
xor cx,cx
.a:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz .a
.b:
pop dx
add dl,"0"
mov ah,02h
int 21h
loop .b
exit:
mov ah,4ch
int 21h
main endp
end main