extern printf
%macro prt1 1
section .data
.str db %1, 0
section .text
mov rdi, fmt1
mov rsi, .str
mov rdx, rax
mov rax, 0
call printf
%endmacro
%macro prt2 1
section .data
.str db %1, 0
section .text
mov rdi, fmt2
mov rsi, .str
mov rcx, rdx
mov rdx, rax
mov rax, 0
call printf
%endmacro
section .bss
raxs: resq 1
rdxs: resq 1
section .data
b64: dq 0x1234567890ABCDEF
fmt1: db "%s, old rax = 0x1234567890ABCDEF, new rax = 0x%16lX, ",10,0
fmt2: db "%s, old rdx:rax=0,0x1234567890ABCDEF, ",10," new rax=0x%16lX rdx=0x%16lX, ",10,0
section .text
global main
main:
push rbp
shl1:
mov rax, [b64]
shl rax, 4
prt1 "shl rax, 4 = "
shl4:
mov rax, [b64]
shl rax, 8
prt1 "shl rax, 8 = "
shr4:
mov rax, [b64]
shr rax, 8
prt1 "shr rax, 8 = "
sal4:
mov rax, [b64]
sal rax, 8
prt1 "sal rax, 8 = "
sar4:
mov rax, [b64]
sar rax, 8
prt1 "sar rax, 8 = "
rol4:
mov rax, [b64]
rol rax, 8
prt1 "rol rax, 8 = "
ror4:
mov rax, [b64]
ror rax, 8
prt1 "ror rax, 8 = "
shld4:
mov rax, [b64]
mov rdx, 0
shld rdx, rax, 8
mov [rdxs], rdx
mov [raxs], rax
prt2 "shld rdx, rax, 8 = "
shla:
mov rdx, [rdxs]
mov rax, [raxs]
shl rax, 8
prt2 "shl rax, 8 = "
shrd4:
mov rax, [b64]
mov rdx, 0
shrd rdx, rax, 8
mov [rdxs], rdx
mov [raxs], rax
prt2 "shrd rdx, rax, 8 = "
shra:
mov rdx, [rdxs]
mov rax, [raxs]
shr rax, 8
prt2 "shr rax, 8 = "
pop rbp
mov rax, 0
ret
shl rax, 4 = , old rax = 0x1234567890ABCDEF, new rax = 0x234567890ABCDEF0,
shl rax, 8 = , old rax = 0x1234567890ABCDEF, new rax = 0x34567890ABCDEF00,
shr rax, 8 = , old rax = 0x1234567890ABCDEF, new rax = 0x 1234567890ABCD,
sal rax, 8 = , old rax = 0x1234567890ABCDEF, new rax = 0x34567890ABCDEF00,
sar rax, 8 = , old rax = 0x1234567890ABCDEF, new rax = 0x 1234567890ABCD,
rol rax, 8 = , old rax = 0x1234567890ABCDEF, new rax = 0x34567890ABCDEF12,
ror rax, 8 = , old rax = 0x1234567890ABCDEF, new rax = 0xEF1234567890ABCD,
shld rdx, rax, 8 = , old rdx:rax=0,0x1234567890ABCDEF,
new rax=0x1234567890ABCDEF rdx=0x 12,
shl rax, 8 = , old rdx:rax=0,0x1234567890ABCDEF,
new rax=0x34567890ABCDEF00 rdx=0x 12,
shrd rdx, rax, 8 = , old rdx:rax=0,0x1234567890ABCDEF,
new rax=0x1234567890ABCDEF rdx=0xEF00000000000000,
shr rax, 8 = , old rdx:rax=0,0x1234567890ABCDEF,
new rax=0x 1234567890ABCD rdx=0xEF00000000000000,