Ввести с клавиатуры трехразрядное восьмеричное число - Assembler
Формулировка задачи:
Ввести с клавиатуры трехразрядное восьмеричное число, преобразовать его в десятичное. Результат вывести на экран с соответствующим текстовым сообщением. Предусмотреть приглашение к вводу
Решение задачи: «Ввести с клавиатуры трехразрядное восьмеричное число»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- msgGetNum db 'Enter octal number: ', '$'
- msgNum10 db 'In decimal = ', '$'
- CrLf db 0Dh, 0Ah, '$'
- N dw ?
- .code
- main proc
- mov ax, @data
- mov ds, ax
- mov ah, 09h
- lea dx, msgGetNum
- int 21h
- mov bx, 0 ;введённое число
- mov cx, 03h ;три цифры
- @@GetChar:
- mov ah, 08h
- int 21h
- cmp al, '0'
- jb @@GetChar
- cmp al, '9'
- ja @@GetChar
- int 29h
- sub al, '0'
- shl bx, 1
- shl bx, 1
- shl bx, 1
- add bl, al
- loop @@GetChar
- mov N, bx
- ;перевод строки
- mov ah, 09h
- lea dx, CrLf
- int 21h
- ;вывод числа в десятичной системе
- mov ah, 09h
- lea dx, msgNum10
- int 21h
- mov ax, N
- mov cx, 10
- xor di, di ; di - кол. цифр в числе
- @@Conv:
- xor dx, dx
- div cx ; dl = num mod 10
- add dl, '0' ; перевод в символьный формат
- inc di
- push dx ; складываем в стек
- or ax, ax
- jnz @@Conv
- ; выводим из стека на экран
- @@Show:
- pop dx ; dl = очередной символ
- mov ah, 02h ; ah - функция вывода символа на экран
- int 21h
- dec di ; повторяем пока di<>0
- jnz @@Show
- mov ax, 4C00h
- int 21h
- main endp
- end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д