001
21.10.2004, 13:18 Uhr
virtual
Sexiest Bit alive (Operator)
|
Daß jeder Befehl eine Hexzahl ist, ist eine sehr eingeschränkte Sichtweise....
Assembler ist die letzte Stufe vor dem maschinencode, welcher aus einer Folge von 0en und 1en besteht. Diese werden oft, der übersichlichkeithalber, in Hexadezimaler Schreibweise geschrieben.
Eine Assembleranweisung besteht in der Regel aus einem OpCode, der angibt, was getan werden soll (zB etwas in ein Register zu schieben [mov]) und den Operanden (in welches Register soll etwas geschrieben werden, was soll dahin geschrieben werden).
Typischerweise nimmt sowohl die Codierung des OpCodes alsauch die der Operanden nicht jeweils genau ein Byte (= 8 Bit) in Anspruch, so kann der OpCode zB nur 4 Bits ausmachen und die Codierung der Operanden dann noch weitere Bits... Das hängt sowohl vom Prozessor alsauch seinem Betriebsmodus ab (so er denn der Prozessor verschiedene hat).
Nun können die Operanden sehr unterschiedlich sein, was aber dann wiederum bedeutet, daß Du selbst zu einem Befehl, der beim Intel x86 was in das Register ax moved noch tauschende verschiedene Kombinationen für den gesamten Befehl hast, eben in abhängig davon, woher etwas gemoved wird.
Aus diesem Grund beschränkt sich die Literatur in der Regel auf folgendes: 1. Allgemeine Angaben, wie Operanden in der Maschinensprache kodiert werden (dies kann je nach Operandentyp sehr unterschiedlich ausfallen). 2. Die Angabe des Opcodes (meistens die ersten paar Bits des gesamten Assemblerbefehls) sowei den erlaubten Operandentypen.
Du wirst vermutlich nicht finden sowas wie eine Auflistung mov eax, edx => Die und die Hexzahl mov eax, [edi+1000] => Die und die Hexzahl
weil eine solche Auflistung schätzungsweise 10000000000000 Einträge haben würde.
Ansonsten http://courses.ece.uiuc.edu/ece390/resources/opcodes.html Da ist halt binär, nicht hex. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |