Считывание со стандартного ввода и вывод в унарной системе счисления - Assembler

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

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

Всем привет. Получил несколько заданий - написать программу/программы на ассемблере NASM. Ранее никогда с этим не сталкивался, с помощью литературы не могу начать, не хватает знаний . Помогите пожалуйста, покажите как будет выглядеть данное задание в выполненном, в конечном виде? С остальными думаю разберусь сам. Спасибо!
Задание Написать программу на ассемблере NASM, которая посимвольно считывает со стандартного ввода целое число и печатает его на стандартный вывод в унарной системе счисления с использованием символа ‘*’. При появлении на стандартном вводе символа отличного от цифры вывести результат и завершить работу программы. Если число не было введено, то считать, что ввели нуль

Решение задачи: «Считывание со стандартного ввода и вывод в унарной системе счисления»

textual
Листинг программы
ORG 100h
JMP start
 
mess0  DB  13,10,'ENTER DIGIT: $'
mess1  DB  13,10,'UNAR RESULT..',13,10,10,'$'
 
start:
   MOV   AH,9            ;
   MOV   DX,mess0        ;
   INT   21h             ;
 
   XOR   CX,CX           ; сбрасываем счётчик унарных единиц
   MOV   BX,10           ; система счисления для ввода
NextDigit:               ;
   MOV   AH,1            ; ввод с эхо средствами DOS
   INT   21h             ;
   CMP   AL,13           ; это ENTER?
   JE    Stop            ; да - выходим!
   CMP   AL,'0'          ; меньше нуля?
   JB    Stop            ;
   CMP   AL,'9'          ; больше девяти?
   JA    Stop            ;
   AND   AX,0Fh          ; переводим символ в цифру
   XCHG  AX,CX           ; меняем последнее и ранее/введёное число
   XOR   DX,DX           ; взводим флаги нуля и чётности
   MUL   BX              ; умножаем AX на BX. Результат в АХ
   ADD   CX,AX           ; прибавляем его к CX. Теперь в CX введёное число
   JMP   NextDigit       ; следующий символ..
Stop:
 
   MOV   AH,9            ;
   MOV   DX,mess1        ;
   INT   21h             ;
   MOV   AL,'|'          ; символ унарной единицы (замени на '*')
print:                   ; в СХ у нас кол-во повторов для цикла
   INT   29h             ; выводим СХ-раз символ на экран
   LOOP  print           ;
 
exit:
   XOR   AX,AX           ; выход!
   INT   16h
   INT   20h

Объяснение кода листинга программы

  1. Задача программы — считывание введённого пользователем числа в унарной системе счисления и вывод его в унарной системе счисления.
  2. Используется язык Assembler.
  3. Код написан для процессора 8080.
  4. Код начинается с ORG 100h — указание на то, что сегмент данных должен быть равен 100h.
  5. JMP start — переход к метке start.
  6. Переменная mess0 содержит строку 'ENTER DIGIT: $'.
  7. Переменная mess1 содержит строку 'UNAR RESULT..',13,10,10,'$'.
  8. При запуске программы выводится приглашение для ввода числа.
  9. Далее выполняется цикл, который считывает каждую цифру введённого числа и умножает её на BX.
  10. Результат прибавляется к CX.
  11. После ввода всех цифр выводится в унарной системе счисления.
  12. Выводится символ унарной единицы.
  13. Выполняется цикл, который выводит символ унарной единицы столько раз, сколько указано в СХ.
  14. Выход из программы осуществляется через инструкцию XOR AX,AX,INT 16h,INT 20h.
  15. Вместо символа '|' необходимо использовать символ '*'.
  16. В данной программе не используется обработка ошибок.
  17. В данной программе не используются стековые переменные.
  18. В данной программе не используются массивы.
  19. В данной программе не используются другие сегменты, кроме сегмента данных.
  20. Для ввода и вывода используется служба INT 21h.

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


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

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

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