Программа ввода двоичного числа принимает с клавиатуры последовательность нулей и единиц, которая завершается нажатием клавиши "ввод". Все остальные клавиши программа игнорирует.
Для получения двоичного числа после нажатия очередной клавиши выполняются следующие действия:
- если нажата клавиша "ввод", алгоритм завершается выводом на экран
- если введены цифры 0 или 1, то
- текущее значение числа сдвигается на 1 бит влево, освобождая место под очередную (последнюю) цифру
- прибавляется значение этой введенной с клавиатуры цифры
- иначе происходит переход к повторению ввода.
Полученный программой результат выводится на экран в двоичном, шестнадцатеричном и десятичном виде.
Вот решение:
| адрес | код | мнемоника | комментарии |
| 01 | 830 | dw -48 |
код символа "0" со знаком минус (const nul) |
| 02 | 831 | dw -49 |
код символа "1" со знаком минус (const edin) |
| 03 | 80D | dw -13 |
код клавиши "ввод" со знаком минус (const wk) |
| 04 | 000 | dw 0 |
место под переменную cod |
| 05 | 000 | dw 0 |
место под переменную cif |
| 06 | 000 | dw 0 |
место под переменную rez |
| input: | ввод символа |
| 07 | C05 | in |
чтение кода клавиши |
| 08 | 104 | sta (cod) |
сохранить значение в переменной cod |
| 09 | A03 | add (wk) |
вычитание wk для сравнения с кодом клавиши "ввод" |
| 0A | E18 | jz print |
выход при совпадении |
| 0B | 004 | lda (cod) |
извлечь значение переменной cod |
| 0C | A01 | add (nol) |
вычитание nol для сравнения с кодом клавиши "0" |
| 0D | 105 | sta (cif) |
запомнить разность в переменную cif |
| 0E | E13 | jz cifra |
переход при совпадении с цифрой 0 |
| 0F | 004 | lda (cod) |
извлечь значение переменной cod |
| 10 | A02 | add (edin) |
вычитание edin для сравнения с кодом клавиши "1" |
| 11 | E13 | jz cifra |
переход при совпадении с цифрой 1 |
| 12 | 407 | jmp input |
к повторению ввода в остальных случаях |
| cifra: | добавление очередной цифры |
| 13 | 006 | lda (rez) |
извлечь значение переменной rez |
| 14 | 311 | sal |
сдвинуть СМ на 1 бит влево |
| 15 | A05 | add (cif) |
прибавить очередную двоичную цифру |
| 16 | 106 | sta (rez) |
запомнить результат в переменную rez |
| 17 | 407 | jmp input |
ко вводу следующего символа |
| print: | вывод на экран |
| 18 | 006 | lda (rez) |
извлечь значение переменной rez |
| 19 | C10 | bprt |
вывести результат в двоичном виде |
| 1A | C02 | hprt |
вывести результат в шестнадцатеричном виде |
| 1B | C00 | iprt |
вывести результат в десятичном виде |
| 1C | F00 | hlt |
останов (стоп) |