Wenn Sie diesen Code mit nasm
Montage:Kann "mov eax, 0x1" immer anstelle von "mov rax, 0x1" verwendet werden?
BITS 64
mov eax, 0x1
mov rax, 0x1
ich diese Ausgabe:
b8 01 00 00 00 b8 01 00 00 00
, die der Opcode für mov eax, 0x1
zweimal wiederholt wird.
Bedeutet dies, dass mov rax, 0x1
kann immer durch mov eax, 0x1
ersetzt werden oder ist es nur in diesem Fall?
Wenn dies richtig ist, wäre es nicht besser, als zu verwenden:
xor rax, rax
inc rax
wie das wird 6 Bytes zusammengesetzt, während mov eax, 0x1
nur 5 Bytes?
Relevant: http://stackoverflow.com/questions/8502839/loading-small-numbers-into-64-bit-x86-register –
Eigentlich, weil das erste Snippet korrekt ist, würde das zweite Snippet nur 4 Bytes dauern (keine REX-Präfixe erforderlich). – harold
'xor eax, eax' /' inc eax' ist 4B, etwas kleiner als 'mov eax, 1'. Verwenden Sie das jedoch nur, wenn Sie die Code-Größe stark optimieren. Die Ausgabe von 1 Byte zum Speichern einer Anweisung (und eines Fused-Domain-Uops) lohnt sich für moderne CPUs. –