Konflikt bei Operandengröße in x86 Assembly?

7

Ich bin ein Anfänger-Programmierer, der zum ersten Mal die Montage versucht. Sorry im Voraus, wenn dies eine unglaublich lahme Frage ist.

Ich habe ein Zeichen im EAX-Register gespeichert, aber ich muss es in mein DL-Register verschieben. Wenn ich versuche: mov dl, eax bekomme ich einen Fehler C2443: operand size conflict. Ich weiß, dass das EAX-Register 32 Bit ist, während das DL 8 Bit ist ... bin ich auf etwas? Wie gehe ich vor, um das zu lösen?

    
Mark V. 13.04.2010, 00:45
quelle

3 Antworten

11

Was Sie wollen, ist wahrscheinlich:

%Vor%

Dies wird al nach dl kopieren und Null den Rest von edx füllen. Diese einzelne Anweisung entspricht diesen beiden Anweisungen:

%Vor%     
SoapBox 13.04.2010 01:06
quelle
6

Versuchen Sie

%Vor%

vielleicht? Die erste Anweisung, die 'nicht notwendigen' Bits hoher Ordnung von edx (optional) auf Null zu setzen, dann verschiebe einfach die niedrige 8 von eax nach edx.

Wie andere bereits erwähnt haben, macht movzx dies in einem Schritt. Erwähnenswert ist auch, dass Sie, wenn Sie einen signierten -Wert in al hatten, "movsx edx, al" verwenden könnten, um die höherwertigen Bits von edx mit einer Kopie des msb von al zu füllen , wodurch eine 32-Bit-Darstellung von al mit Vorzeichen in edx eingefügt wird.

    
JustJeff 13.04.2010 00:52
quelle
3

Wenn Sie nur auf die unteren 8 Bits von eax zugreifen möchten, verwenden Sie al:

%Vor%

Sie können auf die unteren 8 Bits, 16 Bits oder 32 Bits jedes Mehrzweckregisters zugreifen, indem Sie die Buchstaben am Anfang oder Ende ändern. Für das Register eax bedeutet die Verwendung von eax alle 32 Bits, ax die unteren 16 Bits und al die unteren 8 Bits. Das Äquivalent für ebx ist ebx, bx und bl, und so weiter.

Beachten Sie, dass die oberen Bits unverändert bleiben, wenn Sie die unteren 16 oder 8 Bits eines Registers ändern. Zum Beispiel, wenn Sie alle Einsen in eax laden, dann laden Sie Null in al, dann sind die unteren 8 Bits von eax Nullen, und die höheren 24 Bits sind Einsen.

%Vor%     
Michael Williamson 13.04.2010 00:55
quelle

Tags und Links