2016-11-20 19 views
0

Ich habe Probleme, wenn ich zwei 16 Bits Zahlen in Assembler für i8080 Prozessor subtrahiere.Assembler subtrahieren 16bit Zahlen

Beispiel: 0f70 - 00F0 und erste Zahl wird in Register B und C, D und an zweiter Stelle in E.

Binary:

B = 0000 1111 0111 0000 C =

D = 0000 0000 E = 1111 0000

Also wenn ich CE subtrahieren muss es "leihen". Ok, ich werde B dekrementieren, aber was ist mit C? Ich weiß in diesem Fall C wäre 1000 0000 aber andere Fälle?

Code:

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

Was ist 'C'? Du musst es nicht reparieren oder so etwas, borgen geht nur zu höheren Bits – harold

+1

Ihre Frage "Was ist mit C?" macht nur Sinn für dich selbst. Was ist mit c? Was ist mit dem Wetter? 1. Zeigen Sie Ihren Code. 2. Zeigen Sie die Eingabe und die Ausgabe an. 3. Zeigen Sie die erwartete Ausgabe an. –

+0

Ok, du hast einen Teil meines Codes mit Kommentaren. Frage "Was ist mit C" bedeutet, was soll ich mit der Nummer aus Register C tun. Soll ich etw abziehen, sollte ich etw hinzufügen? Ich weiß, wie man Binärzahlen subtrahiert, aber das ist hier wenig anders. –

Antwort

1

Keine Änderung C notwendig. Es gibt kein Borgen in das niedrigste Byte, und das niedrigste Byte-Borgen hat keine Konsequenzen für seinen eigenen Wert, es bedeutet nur, dass 1 mehr vom nächsten Byte subtrahiert werden sollte.

Sie können die bedingte Abnahme tun automatisch SBB unter Verwendung:

; subtract low byte 
mov a,c 
sub e 
mov c,a 
; subtract high byte with borrow 
mov a,b 
sbb d 
mov b,a