2015-08-27 3 views
-2

У меня возникли трудности с пониманием того, что происходит в этом коде:Каково представление значений в инструкции LD в 8-битном процессоре Z80?

LD A, -1; 
LD B, 130; 
ADD A, B; 

И какие флаги устанавливаются в 1 после ADD инструкции.

В принципе, я не знаю, какое значение хранится внутри регистра B.

я не могу найти какую-либо информацию в LD B, 130 означает ли «1000 0010» или «0 1000 0010» (так впоследствии мы должны избавиться от MSB/LSB - я не знаете, какой).

В результате я не уверен, какое окончательное значение хранится в A.

+2

_ «Я не могу найти любую информацию, будь то 130 в LD B, 130 означает„1000 0010“или„0 1000 0010“» _ В машинный код он будет представлен в восьми битах '10000010'. Однако добавление ведущих нулей не влияет на значение, поэтому это не имеет большого значения. – Michael

+3

Что касается конечного значения 'A', то это' 130 + -1' == '130 - 1' ==' 129' (или, если хотите, '(130 + 255) & 255' = = '129'. – Michael

ответ

4

Z80 - это 8-разрядный процессор, поэтому ваш 9-разрядный номер 0 1000 0010 не имеет значения. Код размещен

LD A, -1; 
LD B, 130; 
ADD A, B; 

эквивалентно

LD A, 0hFF 
LD B, 0h82 
ADD A, B 

и после добавления регистра А будет содержать 0h81

дополнения будет вызывать флаг переноса должны быть установлено, так как она генерирует " заимствовать". Carry является результатом неподписанных дополнение.

Это приведет к тому, что флаг переполнения будет чистым, поскольку нет «внутреннего переноса» от бит 6 до бит 7. Оба значения были отрицательными для запуска, а A остается отрицательным. Флаг переполнения устанавливается, когда подписанная сумма не может быть представлена ​​в регистре правильно.

Флаг Zero будет чистым, так как A не равен нулю.

Знак флаг будет установлен, так как А является отрицательным в соответствии с битом 7.

+0

У меня есть последний вопрос. Что делать, если я вызываю такую ​​инструкцию:' LD A, -300'. Что будет храниться в 'A'? Будет ли это просто' -300 mod 256'? ? –

+2

Да, конечно, он будет загружен как '0hD4', я предполагаю усечение, а не' mod'. –

+2

Если вы можете справиться с шестнадцатеричной нотацией, чтобы вы могли работать так же свободно, как в десятичной, тем лучше. Нам будет намного легче понять, что происходит, чем при использовании десятичной дроби. –