2016-11-20 6 views
0

У меня проблема, когда я вычитаю два 16-битных числа в ассемблере для процессора i8080.Ассемблер вычитает 16-разрядные номера

Пример: 0f70 - 00f0 и первый номер будет находиться в регистрах В и С, второй в D и E.

Двоичный:

В = 0000 1111 C = 0111 0000

D = 0000 0000 E = 1111 0000

Поэтому, когда я вычитаю CE, ему нужно «заимствовать». Хорошо, поэтому я уменьшу B, но как насчет C? Я знаю, что в этом случае C будет 1000 0000, но в других случаях?

Код:

ORG 800H 
RST 5 
MOV B,D 
MOV C,E //after this in B and C I have 16bit minuend 
RST 5  //after this in D and E I have 16bit subtrahend 
MOV A,C  //Move C to Accumulator 
SUB E  //subtract E 
JC SUBTRACTINGB //if it don't need borrow jump 
DCR B  //else decrement B 
MVI C,? // and what should be in C??? 
+0

насчет 'C'? Вам не нужно это исправлять или что-то в этом роде, заимствовать только по более высоким разрядам – harold

+1

Ваш вопрос «а как же C?» только имеет смысл для себя. Как насчет c? Как насчет погоды? 1. Покажите свой код. 2. Покажите вход и выход. 3. Покажите ожидаемый результат. –

+0

Хорошо, у вас есть часть моего кода с комментариями. Вопрос «как насчет C» означает, что мне делать с номером из регистра C. Должен ли я вычитать sth, следует ли добавить sth? Я знаю, как вычитать двоичные числа, но здесь это немного отличается. –

ответ

1

Никаких изменений C необходимо. В младший байт нет заимствований, а наименьшее байтовое заимствование не имеет последствий для его собственной стоимости, это означает, что еще один должен быть вычтен из следующего байта.

Вы можете сделать условную декремент автоматически с помощью SBB:

; subtract low byte 
mov a,c 
sub e 
mov c,a 
; subtract high byte with borrow 
mov a,b 
sbb d 
mov b,a 
Смежные вопросы