Язык ассемблера, не понимаю коды инструкций и места в памяти
Я готовлюсь к тесту в своем классе цифрового дизайна и не понимаю некоторых вещей. Вот лист с ответами,
- Я понимаю адрес ПК для каждой инструкции. Чего я не понимаю, так это на b, где говорится, куда переходит ветка, какая инструкция 68hc12 выбирает и выполняет после ветки. Я вижу 080B 20 F8, но что это значит точно, например, 080B - это слот в памяти, где хранится инструкция, но что означает 20 F8 после? также я не совсем понимаю А в части C, любая помощь будет потрясающей.
1 ответ
А) объясняет, что 20 F8
это необработанный машинный код для bra loop
и что это не показано для других инструкций.
Очевидно, вы должны знать достаточно о формате машинного кода, чтобы выяснить, где это ветвится.
Я не знаю 68HC12, но из опыта работы с другими ISA (например, x86) я предполагаю, что 0x20 - это код операции, а 0xF8 - относительное смещение дополнения со знаком 2, вероятно, относительно конца инструкции перехода.
О, да, решение, написанное для части C, подтверждает это. Но 0x080D + 0xF8
работает только если нет переноса из младшего байта в старший. Если смещения 68hc12 не являются странными или есть сегментация, вы должны подписать расширение, прежде чем добавлять, так что это 0x080D + 0xFFF8
,