Ввести с клавиатуры трехразрядное восьмеричное число - 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

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы