Считывание со стандартного ввода и вывод в унарной системе счисления - 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
Объяснение кода листинга программы
- Задача программы — считывание введённого пользователем числа в унарной системе счисления и вывод его в унарной системе счисления.
- Используется язык Assembler.
- Код написан для процессора 8080.
- Код начинается с ORG 100h — указание на то, что сегмент данных должен быть равен 100h.
- JMP start — переход к метке start.
- Переменная mess0 содержит строку 'ENTER DIGIT: $'.
- Переменная mess1 содержит строку 'UNAR RESULT..',13,10,10,'$'.
- При запуске программы выводится приглашение для ввода числа.
- Далее выполняется цикл, который считывает каждую цифру введённого числа и умножает её на BX.
- Результат прибавляется к CX.
- После ввода всех цифр выводится в унарной системе счисления.
- Выводится символ унарной единицы.
- Выполняется цикл, который выводит символ унарной единицы столько раз, сколько указано в СХ.
- Выход из программы осуществляется через инструкцию XOR AX,AX,INT 16h,INT 20h.
- Вместо символа '|' необходимо использовать символ '*'.
- В данной программе не используется обработка ошибок.
- В данной программе не используются стековые переменные.
- В данной программе не используются массивы.
- В данной программе не используются другие сегменты, кроме сегмента данных.
- Для ввода и вывода используется служба INT 21h.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д