Байты / слова / адреса подписаны или не подписаны в ассемблере / машинном коде Z80?
Я делаю эмулятор для двоичных файлов Z80, но я не могу узнать, все ли целочисленные типы данных подписаны или не подписаны из руководства или из Google. Как и числа из регистров A
,B
...HL
,BC
тп подписано или нет?
Кроме того, в машинном коде есть байты / слова / адреса, которые идут после инструкций в качестве аргументов со знаком или без знака?
Как в этих примерах (из набора инструкций 8080/Z80):
8080 Mnemonic Z80 Mnemonic Machine Code Operation
------------- ------------ ------------ ---------
MVI A,byte LD A,byte 3Ebyte A <- byte
LXI B,word LD BC,word 01word BC <- word
JMP address JP address C3address PC <- address
Заранее спасибо.
3 ответа
Регистры могут содержать любой из них, и большинство операндов вычисляют оба ответа одновременно из-за дополнения Two. Однако некоторые инструкции нуждаются в информации, независимо от того, является ли содержащее значение подписанным или неподписанным. Они существуют в двух формах: одна для подписи и одна для неподписания. Не могу вспомнить, есть ли у Z80 что-нибудь из этого.
См. (1.) Абсолютные адреса не подписаны, а относительные адреса (ветви) подписаны, чтобы можно было перейти назад.
На многих машинах единственные различия между знаковыми и беззнаковыми числами заключаются в способе сравнения величин и в способе преобразования более коротких значений в более длинные (обратите внимание, что операции многократного умножения многих процессоров эффективно преобразуют более короткие типы в более длинные, и деление по своей сути выполняет сравнение величин). При выполнении операций любого типа, отличных от указанных выше, операнды со знаком и без знака обрабатываются точно (по битам) одинаково, поэтому нет необходимости различать их.
AKAIK, данные на языке ассемблера и инструкции по переводу не содержат информации о знаках. И данные, и операции передачи определяют только размер данных. Информация о знаках является частью некоторых инструкций, таких как инструкции умножения со знаком / без знака. Таким образом, один и тот же регистр может быть обработан командой imul как целое число со знаком, а командой mul - как целое число без знака.