Выводит число задом наперед - Assembler
Формулировка задачи:
Помогите найти ошибку. Есть код перевода числа в различные системы счисления в графическом режиме. При выводе выводит число задом наперед, например, ввел 543, на выходе получается 345. Хотя вроде делал через стек и все должно быть нормально.
.model tiny
.code
org 100h
start:
mov ax,4F02h ; videoregim 640*480
mov bx,12h
int 10h
;ввод числа
mov si,10 ;работаем с десятичной нотацией
mov di,0
@aa:
; вводим число до нажатия клавиши "ВВОД"
mov ah,01h
int 21h
cmp al,13 ; проверяем нажатие клавиши "ВВОД"
jz a1 ; если клавиша нажата, то переходим на конец
; обработки ввода числа
; иначе выполняем следующие 8 пунктов
sub al,'0' ; из кода ASCII получаем цифру
xor ah,ah ; теперь значение ах равно значению al
mov cx,ax ; копируем ах в сх
mov ax,di ;записываем в ах введенное до текущей цифры число
mul si ;умножаем его на 10, переходя тем самым в текущий
;разряд
add ax,cx ;добавляем к числу текущую цифру
mov di,ax ;сохраняем текущее число в di
jmp @aa ; переходим на обработку следующего разряда
a1:
mov num,di ; сохраняем окончательное значение введенного числа
; в переменной "num"
mov ah,02
mov bh,0
mov dh,1
mov dl,0
int 10h
mov ax,num
xor cx, cx
mov bx, 10 ; основание сс.
oi2:
xor dx,dx
div bx
push dx
inc cx
test ax, ax
jnz oi2
; Теперь приступим к выводу.
mov ah, 09h
mov bh,0
oi3:
pop dx
mov al,dl
add al, '0'
int 10h
; Повторим ровно столько раз, сколько цифр насчитали.
loop oi3
mov ah,01h ожидание нажатия на клавишу
int 21h
mov ax,3
int 10h
ret
num dw 0
end startРешение задачи: «Выводит число задом наперед»
textual
Листинг программы
A db 0,0,0,1,1,0,0,0 0,0,1,1,1,1,0,0 0,1,1,0,0,1,1,0 1,1,0,0,0,0,1,1 1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1 1,1,0,0,0,0,1,1 1,1,0,0,0,0,1,1