16 - Bit Register

Gast #2959
Lesenswert?

Es gibt ja 3 16- Bit Register,  (X=R27:R26, Y=R29:R28, Z=R31:R30) ich 
möchte nun ein solches Register mit einer 16- Bit Zahl laden und danach 
bearbeiten, d.h. ich muss vom 16- Bit Register verschiedene 
Subtraktionen durchführen!!!

Wie kann ich dieses 16- Bit Register laden, und bearbeiten??? Muss ich 
da immer das L_Byte und H_Byte einzeln laden???

IZOARD
Gast #2960
Lesenswert?

Das sind keine richtigen 16Bit-Register sondern wie von dir schon 
geschrieben zwei 8Bit-Register. Entweder du lädst die Werte in Xhigh, 
Xlow ein oder über R27,R28. Kommt das gleiche heraus. X,Y und Z sind 
mehr als Adresspointer zu verstehen.
Gast #2961
Lesenswert?

Ah Ok, aber wenn ich z.B. 1'000 von meiner zusammengestellten 16- Bit 
Zahl abziehen will, wie muss ich das denn machen??? muss ich die 1'000 
mit dem z.B. Z- Register darstellen und abziehen, oder muss ich das in 
mehreren Schritten tun, so dass ich z.B. 10 * 100 in einer Schlaufe 
abziehe????

thanks

izoard
Gast #2962
Lesenswert?

das geht wie folgt:

die zahl sollte im hex format vorliegen:

1000 = 0xE38.

deine register seien XH und XL.

du ziehst nun einfach (mit sub oder subi) 0x38 (der LOW teil von 1000) 
von XL ab. Hierbei wird das Carry flag gesetzt, sollte Xl unterlaufen 
(d.h. XL<0x38).

nun ziehst du von XH 0x0E ab. Hierfür verwendest du SBC oder SBCI. Diese 
funktion zieht dann zusätzlich das carry-flag von XH ab (also XH = XH-1, 
wenn das C-Flag gesetzt ist).

schon biste fertig.
Gast #2963
Lesenswert?

Vielen Dank.
Jetzt habe ich noch eine Frage, ich muss eine Abfrage realisieren, bei 
der ich springe, wenn das X- Register grösser oder gleich 1000 ist, kann 
man das mit cpi Befehlen realisieren??? Ich habe es schon versucht, doch 
es wird ziemlich unübersichtlich, gibt es da einen besseren Weg???

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren