CMP [ax], [bx]
-
Hi Leute,
vorweg erst mal: bin n absoluter Noob in Asm. Benutz btw n TASM.szText1 db "ABC$" szText2 db "CBA$" ... mov ax, OFFSET szText1 mov bx, OFFSET szText2 ... cmp [BYTE PTR ax], [BYTE PTR bx]
ich möchte 'A' von szText1 mit 'C' von szText2 vergleichen, also jeweils das erste Byte von szText1 und szText2.
Thx im Voraus,
AssemblerNoop
-
vllt. sollte ich noch den Fehler präzisieren:
*WARNING* Argument needs type override
**ERROR** Illegal memory reference
Warnung und Fehler beziehen sich auf die "cmp"-zeile.
Thx
-
Hi.
Ich gehe davon aus, dass du von uns nun erwartest, dass wir dein Codestueck kommentieren.
In der letzten Zeile stecken 2 Fehler:
1. Du kannst das AX-Register nicht zum Adressieren verwenden.
Du kannst IMHO lediglich mit folgenden 16Bit-Registern adressieren:
bx; si; di; bp
Du kannst dagegen mit allen 32Bit-Registern adressieren.2. Du kannst nicht 2 Speichervariablen direkt miteinander vergleichen.
Folgende Operandenkombinationen sind bei cmp zulaessig:
cmp r, r => zB. cmp ax, bx
cmp r, imm => zB. cmp ax, 1234h
cmp r, m => zB. cmp ax, [word ptr 1234h]
cmp m, imm => zB. cmp [word ptr 1234h], 1234hm=memory; r=register; imm=immediate (also direkt angegebene Fixzahl)
BTW:
Wir haben hier sogar extra schoene [ asm]-Tags.
-
thx
-
muss das "byte ptr" nicht außerhalb der Klammern stehen?
-
Beim TASM nicht.
-
Es würde aber trotzdem nicht schaden, dann verstehen's auch andere Assembler. Und so schaut's etwas komisch aus.