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