.model small
.stack 100h
.data
MsgInput db "Input number: $"
MsgResult db 10, 13, "Result: $"
.code
start:
mov ax, @data
mov ds, ax
mov dx, offset MsgInput
mov ah, 09h
int 21h
input: mov ah, 00h ; Ввод числа до нажатия 'Enter'
int 16h
cmp al, 0Dh ; Если нажат Enter
je a0 ; Переходим к a0
cmp al, '0' ; Если введены не 0 или 1
jl input ; Получаем следующий символ
cmp al, '9'
jg input
mov dl, al ; Вывод введенного символа
mov ah, 02h
int 21h
sub al, 30h ; Превращаем ASCII символ в число
xor ah, ah
xchg ax, bx ; Обнуляем ah и меняем ax и bx местами
mov dx, 5 ; Умножаем ax на 2
mul dx
add bx, ax ; Складываем ax и bx
jmp input
a0: mov dx, offset MsgResult
mov ah, 09h
int 21h
mov ax, bx ; Перевод числа в семеричную сс
mov dx, 4 ; В dx - сс, в которую переводить
xor cx, cx
a1: xor bx, bx
a2: cmp ax, dx ; Сравниваем ax и dx
jb a3 ; Если ax меньше, то пер. к a3
sub ax, dx ; Если больше, то отнимаем dx от ax
inc bx ; bx - количество "отниманий"
jmp a2 ; Проверяем снова
a3: add ax, '0' ; Превращаем ax в ASCII символ
push ax ; Засоввываем его в стек
inc cx ; cx - количество символов для вывода в a4
xchg ax, bx ; Меняем ax и bx местами
cmp ax, 0 ; Если ax не равен нулю, то переходим к a1
jne a1
a4: pop dx ; Вывод результата из стека посимвольно
mov ah, 02h
int 21h
loop a4
exit: mov ah, 00h
int 16h
mov ah, 4ch
int 21h
end start