您的位置:首页 > 运维架构

Assembly x64 Intro - Shift Operate

2015-12-09 15:20 330 查看
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,


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: