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,
%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,
相关文章推荐
- 【OpenCV入门指南】第四篇 图像的二值化
- Apache禁止目录列表
- 【OpenCV入门指南】第三篇Canny边缘检测
- 3D开发的视觉基础openGL ES
- linux总线驱动之DMA传输
- CentOS 6安装Zabbix 2.4
- Apache+tomcat7负载均衡集成错误集合
- PageAdmin企业网站系统——政府及大中型企业网站建设的利器
- 【OpenCV入门指南】第二篇 缩放图像
- 【OpenCV第一篇】安装OpenCV
- Linux crontab相关
- nginx 【logformat】日志格式
- linux下打包文件夹(不保留路径)
- openssl搭建私有CA
- Nginx配置文件详细说明
- 虚拟机下安装centos提醒增强功能
- 如何查看linux中的MBR记录
- 10018---Nginx 配置
- 在opencv3中的机器学习算法练习:对OCR进行分类
- 4412开发板最小linux系统的存储空间修改