Чтение регистров пара по битам - сборка i8080

У меня есть шестнадцатеричное значение, хранящееся в паре регистров B. И я хочу прочитать его по символам. Например, в B 322 (шестнадцатеричное), я хочу, чтобы в аккумуляторе 3, затем 2, а затем 2 (в ASCII). Это как-то возможно? Или возможно сохранить эту пару регистров в "строку". Под строкой я подразумеваю эту строку-> my_string: ds 30 Я действительно новичок в сборке.

1 ответ

Решение

Насколько я помню, "регистровая пара B" состоит из регистров B и C. C - это младшие 8 бит, а B содержит старшие 8 бит. Так что, если у вас есть значение в BC и вы хотите получить шестнадцатеричные цифры (4 цифры), процедура выглядит примерно так:

  1. MOV A, B
  2. Shift A вправо на 4 места (см. Ниже). Это помещает старшие 4 бита числа в младшие 4 бита A и очищает старшие 4 бита A. Таким образом, у вас есть число от 0 до 15.
  3. Преобразуйте это значение в шестнадцатеричное число (0-9, AF). Кажется, я помню, что был какой-то неочевидный способ сделать это, но я не помню, что это было.
  4. Выведите это значение (или сохраните его в памяти для последующего вывода).
  5. MOV A, B
  6. ANI 0x0F - Это обнуляет старшие 4 бита, давая вам младшие четыре бита старшего байта.
  7. Выполните шаги 3 и 4.
  8. MOV A, C
  9. Выполните шаги 2, 3 и 4
  10. MOV A, C
  11. Выполните шаги 3 и 4

Прошло много времени с тех пор, как я написал код 8080, поэтому я не собираюсь смешивать вас с неисправным кодом здесь. Шаги, изложенные выше, сделают то, что вам нужно.

Обратите внимание, что мое использование 0x0F может быть неправильным синтаксисом для вашего ассемблера. Я пытаюсь сразу и с десятичным значением 15 или шестнадцатеричным значением F. Я не знаю, как ваш ассемблер выражает шестнадцатеричные константы.

Я не думаю, что 8080 имел сменную инструкцию. Это, однако, имело инструкции поворота. Таким образом, вместо сдвига вправо на 4 позиции вы поворачиваете вправо на четыре позиции и затем маскируете младшие 4 бита. То есть:

RAR
RAR
RAR
RAR
ANI 0x0F
Другие вопросы по тегам