Ich möchte verstehen, wie Adresse mit [] in Nasm X86 Assembler zu manipulieren.Was bedeutet diese Syntax (MOV [EBX], 110) in Nasm x86 Assembler?
MY_TABLE TIMES 10 DW 0 ; Allocates 10 words (2 bytes) each initialized to 0
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX
MOV [EBX], 110 ; MY_TABLE[0] = 110
ADD EBX, 2 ; EBX = EBX +2
MOV [EBX], 123 ; MY_TABLE[1] = 123
MOV EBX, [MY_TABLE] - hier der Wert des my_table in EBX-Register oder die Adresse my_table in ebx kopiert kopiert registrieren? Ich frage das, weil [] den Wert an der angegebenen Adresse gibt es innerhalb
MOV [EBX], 110 - was hier der Fall ist, kann ich nicht die Syntax verstehen!
Verschieben Sie 110 an die Adresse, auf die EBX zeigt. Die Größe ist jedoch unklar und es sei denn, NASM hat einige Standardeinstellungen (konnte keine finden), dass dieser Code kein gültiger NASM-Code ist: NASM benötigt in diesem Fall eine explizite Operandengröße (wie jeder gute Assembler). –
die Größe könnte bekannt sein (MY_TABLE ist "definiert" als Wortgröße), trotzdem sollte zumindest eine Warnung ausgegeben werden. 'MOV [EBX], 110' ist mehrdeutig. Was macht der Assembler in diesem Fall? – Tommylee2k
der Kommentar in Zeile 2 ist falsch. Um die effektive Adresse zu laden, wäre LEA (load effective address) korrekt. (oder mit 'MOV EBX, Offset My_table'). Dadurch wird der Inhalt der Adresse my_table auf EBX verschoben (die ersten beiden Werte, da ebx 32 Bit und my_table 16 Bisswerte hat). – Tommylee2k