Чтение регистров пара по битам - сборка i8080
У меня есть шестнадцатеричное значение, хранящееся в паре регистров B. И я хочу прочитать его по символам. Например, в B 322 (шестнадцатеричное), я хочу, чтобы в аккумуляторе 3, затем 2, а затем 2 (в ASCII). Это как-то возможно? Или возможно сохранить эту пару регистров в "строку". Под строкой я подразумеваю эту строку-> my_string: ds 30
Я действительно новичок в сборке.
1 ответ
Насколько я помню, "регистровая пара B" состоит из регистров B и C. C - это младшие 8 бит, а B содержит старшие 8 бит. Так что, если у вас есть значение в BC и вы хотите получить шестнадцатеричные цифры (4 цифры), процедура выглядит примерно так:
- MOV A, B
- Shift A вправо на 4 места (см. Ниже). Это помещает старшие 4 бита числа в младшие 4 бита A и очищает старшие 4 бита A. Таким образом, у вас есть число от 0 до 15.
- Преобразуйте это значение в шестнадцатеричное число (0-9, AF). Кажется, я помню, что был какой-то неочевидный способ сделать это, но я не помню, что это было.
- Выведите это значение (или сохраните его в памяти для последующего вывода).
- MOV A, B
- ANI 0x0F - Это обнуляет старшие 4 бита, давая вам младшие четыре бита старшего байта.
- Выполните шаги 3 и 4.
- MOV A, C
- Выполните шаги 2, 3 и 4
- MOV A, C
- Выполните шаги 3 и 4
Прошло много времени с тех пор, как я написал код 8080, поэтому я не собираюсь смешивать вас с неисправным кодом здесь. Шаги, изложенные выше, сделают то, что вам нужно.
Обратите внимание, что мое использование 0x0F может быть неправильным синтаксисом для вашего ассемблера. Я пытаюсь сразу и с десятичным значением 15 или шестнадцатеричным значением F. Я не знаю, как ваш ассемблер выражает шестнадцатеричные константы.
Я не думаю, что 8080 имел сменную инструкцию. Это, однако, имело инструкции поворота. Таким образом, вместо сдвига вправо на 4 позиции вы поворачиваете вправо на четыре позиции и затем маскируете младшие 4 бита. То есть:
RAR
RAR
RAR
RAR
ANI 0x0F