Программа ввода двоичного числа принимает с клавиатуры последовательность нулей и единиц, которая завершается нажатием клавиши "ввод". Все остальные клавиши программа игнорирует.
Для получения двоичного числа после нажатия очередной клавиши выполняются следующие действия:
- если нажата клавиша "ввод", алгоритм завершается выводом на экран
- если введены цифры 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 |
останов (стоп) |