Выводит число задом наперед - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д