ist in der Dokumentation der Suche in der Frage enthält, gibt es mehrere Hinweise, die vorgeschlagen werden. Die Maschine hat vier 8-Bit-Register, die mit R0, R1, R2 und R3 nummeriert sind, die unter Verwendung von zwei Bits adressiert werden.
Die Op-Codes für die Anweisungen sind in der Dokumentation als zwei Hexadezimalziffern angegeben. In der tatsächlichen Implementierung ist der Operationscodebereich der Befehle jedoch nicht zwei Hexadezimalstellen groß, so dass Sie den Hexadezimalwert nehmen und den Wert um 2 Bits nach links verschieben müssen. So wird ein Op-Code für eine Ladung von 0x30 (00110000) nach links verschoben, was zu 0xC0 (11000000 in binär) führt, oder der Op-Code für einen Speicher von 0x32 (00111010) wird nach links verschoben, was zu 0xC8 (1100-1000) führt Eine Registernummer von Null bis Drei wird in die unteren zwei Bits der zwei Hexadezimalziffern eingefügt.
Der Befehl zum Laden von Adressen lautet ld Ri,xxxx
, wobei xx eine 16-Bit-Adresse des Speicherorts ist, der den 8-Bit-Wert enthält, der in das Register geladen werden soll. Dieser Ladebefehl setzt das spezifizierte 8-Bit-Register (R0, R1, R2 oder R3) mit dem 8-Bit-Wert an der spezifizierten Adresse.
Die tatsächlichen Bitformate für den Ladebefehl sind: (1) Opcode (0x30) in den höchstwertigen 6 Bits, gefolgt von (2) der Registernummer (0-3) in den nächsten zwei Bits, gefolgt von (3) ein 16-Bit-Wert, der eine Adresse zu dem zu ladenden Wert ist. Die sollte dann wie 1100 0001 0000 0001 0000 1010 im Binärformat aussehen, die sich als 1100 00 als Op-Code 0x30, 01 als Registernummer R1 und 0000 0001 0000 1010 als 0x010A ausscheiden.
Die Last sofort ld R3,$-12
wie 1100 0111 1111 0400 -12 aussehen sollte, ist 0xFFF4
Die add R1,R3
wie 0100 0001 1100 0000 aussehen sollten die nicht verwendeten Bits werden auf Null gesetzt angenommen wird. Dies wäre 010000 als der 0x10-Operationscode für Add, 01 für das Register R1 und 11 für das Register R3. Die verbleibenden 6 Bits in dem zweiten 8-Bit-Teil des Addierbefehls werden nicht verwendet und ignoriert.
Die sto R1,0x10B
sollte wie 1100 1001 0000 0001 0000 1011 aussehen, das ist der Op-Code von 0x32, Register 1, der unter der 16-Bit-Adresse von 0x010B gespeichert wird.
Danke nochmal Jester, es ist klar, dass ich direkte und direkte Adressmodi aus dem Bild verwechselt habe –