SAR-Befehl in X86-assembly mit einem parameter
Im zerlegten Programm, das ich zu analysieren, ich fand den Befehl
sar %eax
Was macht das? Ich weiß, dass sar
mit zwei Argumenten führt eine shift-rechts, aber ich kann nicht herausfinden, was es bedeutet, mit nur einem parameter.
Dieses Programm wurde zusammengestellt für einen Intel x86-Prozessor.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie der dissembler verwendet kurzer hand für
SAR EAX,1
was ist ein opcode der0xD1F8
. wenn die unmittelbare ist nicht 1, auch bekannt alsSAR EAX,xx
, der opcode ist0xC1F8 xx
finden Sie in der Intel-Instruction-Referenz, Vol. 2B, 4-353.Wenn es nur einen Operanden und die implizite Verschiebung 1.
So....
SAR %EAX
impliziert unterzeichnet%EAX >> 1
dafür,
Habe ich erfolgreich bewiesen, dass diese Analyse einige code in GDB.
used short-hand for SAR EAX,1
. Die andere Antwort vertreten, die Ausgabe als Intel-syntax anstatt von AT&T, aber die Antwort scheint okay zu sein. Der x86 hat eine spezielle kurze Codierung für die 4-shift-Anweisungen, die verwendet werden können keine 2. operand oder Kodieren Sie den Wert 1 als 2. operand ist eine längere Anweisung, die nicht die gleiche Sache.gas
optimierensar $1, %eax
in der impliziten durch einen opcode, so dass Sie nicht bekommen, ineffizienten code, wenn du schreibst das es so ist. Und BTW, es gibt auch-eine kurze Formen derror
,rol
,rcl
, undrcr
sowieshl
(akasal
),shr
, undsar
. Aber nichtshrd
, Hinzugefügt wurde, später nur mit imm8/cl-Versionen.