Wie fügt man ein unmittelbares Byte zu einem langen Register mit AT & T-Syntax auf X86 hinzu?

StackOverflow https://stackoverflow.com/questions/8409707

Frage

Soweit ich weiß, sollte es beim Lesen der Intel-Handbücher möglich sein, eine Anweisung wie add $0x7f, %ebx zu schreiben, und sie sollte als 83 /0 ib für insgesamt drei Bytes codiert sein.

Wenn ich dies jedoch tue (unabhängig davon, ob ich add, addb oder addl verwende), wird der unmittelbare Wert immer auf einen 32-Bit-Wert "hochgestuft" und als 81 /0 id codiert und es werden sechs Bytes belegt.Das gleiche Problem besteht mit adc, sub usw. Beachten Sie, dass ich die AT & T-Syntax mit GNU as verwende.

Ich habe über einen Tag nach einer Lösung gesucht und sie nicht gefunden.Kann jemand bitte beraten?

War es hilfreich?

Lösung

Überraschenderweise habe ich kein solches Problem.

Ich habe diesen Assembly-Code angenommen, der von gcc (DJGPP) erstellt wurde: generasacodicetagpre.

und erstellt es mit as und das ist das, was ich in a.out sehe: generasacodicetagpre.

und das C-Programm war: generasacodicetagpre.

Bist du sicher, dass dein unmittelbarer Operand als 8-Bit-Signe-Integer dargestellt werden kann?Wenn es außerhalb des Sortiments -128 bis +127 ist, muss der Assembler eine längere Kodierung verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top