Ich bin derzeit mit DCPU-16 Assembler herum fummeln (siehe http://0x10c.com/doc/dcpu-16.txt und http://jazzychad.net/dcpu.html).Warum gibt es eine führende 1 in der binären Darstellung von DCPU-16 Anweisungen
Es gibt eine Sache, die ich nicht verstehe in der Art, wie die Assembler-Anweisungen in Hex/Binär umgewandelt werden.
Als Beispiel nehmen einen Befehl wie
SET B, 0x0002
, die den Wert des Registers B setzen soll, 2 (oder hex 0x0002 oder binär 0b000010) -Format
Instruction zur DCPU-16 in Dezimalzahlen
istbbbbbbaaaaaaoooo
also 4 Bits für den Opcode am unteren Ende, 6 Bits für den ersten Wert, 6 Bits für den zweiten Wert ist.
Wenn die Anweisung von Hand verwandeln, das ist, wie ich es tun würde:
SET == 0x1 == 0b0001
B == 0x01 == 0b000001
0x0002 == 0b000010
mit der kompletten Anweisung
0b0000100000010001 == 0x811
aber der richtigen Wert für DCPU-16 ist sein enden
0b1000100000010001 == 0x8811
das ist, eine führende 1 hinzugefügt wird - warum ist das?
Ich bin völlig neu zu Assembler und jede andere Art von hardcore Low-Level-Maschinenunterricht Sachen, also bitte bitte mit mir, wenn dies eine sehr dumme Frage ist.
Oh, natürlich, ich verstehe es. Die CPU hätte keine Möglichkeit zu unterscheiden, ob das Register oder der Wert gemeint ist. Danke vielmals! –
Mal sehen, ob ich es vollständig klasse - mit diesem Offset kann ich die literalen Dezimalwerte 0 bis 31 in den bbbbbb-Bitblock einer Anweisung schreiben - aber wenn ich z. B. Dezimal 40 in Register a setzen möchte, ist das ' SET B, 0x0028', dann wäre der Befehl 'bbbbbbaaaaaaooo'' oooo = '00001' für' SET', aaaaaa = '000001' für' B', bbbbbb = '011111' für" nächstes Wort (literal) "und dann '0000000000101000' (= 40) auf das nächste Wort? –
@ManuelKiessling: Hört sich gut an. –