Ввести с клавиатуры трехразрядное восьмеричное число - Assembler

Узнай цену своей работы

Формулировка задачи:

Ввести с клавиатуры трехразрядное восьмеричное число, преобразовать его в десятичное. Результат вывести на экран с соответствующим текстовым сообщением. Предусмотреть приглашение к вводу

Решение задачи: «Ввести с клавиатуры трехразрядное восьмеричное число»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         msgGetNum       db      'Enter octal number: ', '$'
  9.         msgNum10        db      'In decimal = ', '$'
  10.         CrLf            db      0Dh, 0Ah, '$'
  11.         N               dw      ?
  12. .code
  13.  
  14. main    proc
  15.         mov     ax,     @data
  16.         mov     ds,     ax
  17.  
  18.  
  19.         mov     ah,     09h
  20.         lea     dx,     msgGetNum
  21.         int     21h
  22.  
  23.         mov     bx,     0       ;введённое число
  24.         mov     cx,     03h     ;три цифры
  25. @@GetChar:
  26.         mov     ah,     08h
  27.         int     21h
  28.  
  29.         cmp     al,     '0'
  30.         jb      @@GetChar
  31.         cmp     al,     '9'
  32.         ja      @@GetChar
  33.  
  34.         int     29h
  35.  
  36.         sub     al,     '0'
  37.         shl     bx,     1
  38.         shl     bx,     1
  39.         shl     bx,     1
  40.         add     bl,     al
  41.  
  42.         loop    @@GetChar
  43.         mov     N,      bx
  44.         ;перевод строки
  45.         mov     ah,     09h
  46.         lea     dx,     CrLf
  47.         int     21h
  48.         ;вывод числа в десятичной системе
  49.         mov     ah,     09h
  50.         lea     dx,     msgNum10
  51.         int     21h
  52.  
  53.         mov     ax,     N
  54.         mov     cx,     10
  55.         xor     di,     di      ; di - кол. цифр в числе
  56. @@Conv:
  57.         xor     dx,     dx
  58.         div     cx              ; dl = num mod 10
  59.         add     dl,     '0'     ; перевод в символьный формат
  60.         inc     di
  61.         push    dx              ; складываем в стек
  62.         or      ax,     ax
  63.         jnz     @@Conv
  64.         ; выводим из стека на экран
  65. @@Show:
  66.         pop     dx              ; dl = очередной символ
  67.         mov     ah,     02h     ; ah - функция вывода символа на экран
  68.         int     21h
  69.         dec     di              ; повторяем пока di<>0
  70.         jnz     @@Show
  71.  
  72.         mov     ax,     4C00h
  73.         int     21h
  74. main    endp
  75.  
  76. end     main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы