Programmieren Sie die folgenden kleinen Funktionen in x86-64-Assembler auf einem Blatt Papier oder in einem digitalen Notizbuch. Ziehen Sie auch das Intel SDM heran.
Der Wert des Registers ax soll verdoppelt werden.
imul ax, ax, 2 — oder — add ax, ax — oder — shl ax, 1. Die letzen zwei Möglichkeiten sind effizienter als die Multiplikation.
rax soll den Konstanten Wert 0x56 erhalten.
mov rax, 0x56
Alle Bits von eax sollen invertiert werden.
xor eax, 0xffffffff — oder — not eax
rcx = (eax > edx ? 1 : 0)
xor ecx, ecx
cmp eax, edx
jle .Lless
mov ecx, 1
.Lless:
Man beachte: Das Beschreiben von ecx setzt die oberen 32 Bits von rcx auf 0, sodass xor ecx, ecx das gesamte Register rcx auf 0 setzt. (xor ecx, ecx ist in der Codierung ein Byte kürzer als xor rcx, rcx und wird daher auch von Compilern bevorzugt.)
Alternativlösung ohne Sprung
xor ecx, ecx
cmp eax, edx
setg cl
Man beachte: Das xor kann nicht entfernt werden, weil cl nur die untersten 8 Bits beschreibt und den Rest unverändert lässt.