几种基本汇编指令详解
几种基本汇编指令详解
常见寄存器
寄存器 | 16位 | 32位 | 64位 |
---|---|---|---|
累加寄存器 | AX | EAX | RAX |
基址寄存器 | BX | EBX | RBX |
计数寄存器 | CX | ECX | RCX |
数据寄存器 | DX | EDX | RDX |
堆栈基指针 | BP | EBP | RBP |
变址寄存器 | SI | ESI | RSI |
堆栈顶指针 | SP | ESP | RSP |
指令寄存器 | IP | EIP | RIP |
汇编指令
mov
movb(8位)、movw(16位)、movl(32位)、movq(64位)
寄存器寻址:
movl %eax, %edx
eax -> edx
立即数寻址:
movl $0x123, %edx
数字->寄存器
直接寻址:
movl 0x123, %edx
直接访问内存地址数据,edx = *(int32_t *)0x123;
间接寻址:
movl (%ebx), %edx
%ebx 是个内存地址,(%ebx)指的是该地址中的数据,edx = *(int32_t*)ebx;
变址寻址:
movl 4(%ebx), %edx
edx = *(int32_t*)(ebx+4);
push & pull
堆栈数据结构简介
作用:
- 程序调用框架
- 传递参数
- 保存返回地址
- 提供局部变量
- ……
结构:
相关寄存器: esp, ebp
相关操作: pop, push
//建立被调用者函数的堆栈框架 pushl %ebp movl %esp, %ebp//拆除框架 movl %ebp, %esp popl %ebp ret
push:压栈
push %eax
相当于:
subl $4, %esp //栈顶指针减4 movl %eax, (%esp) //%eax -> esp 地址
pop:出栈
pop %eax
相当于:
movl (%esp), %eax addl %4, %esp //栈顶指针加4
call&ret
call
call 0x12345
相当于:
pushl %eip movl $0x12345, %eip //当前地址压栈,存入新地址
ret
相当于:
popl %eip //栈 -> eip
enter&leave
enter
push %ebpmovl %esp, %ebp//将堆栈置空(栈上重堆)
leave
movl %ebp, %esppopl %ebp//将堆栈置空(撤销堆栈)
例子:分析一段汇编代码
pushl $8 ①movl %esp, %ebp ②subl $4, %esp ③movl $8, (%esp) ④
ARM中LR存储的是PC的值,IR存储的是下一条将要执行的指令,有什么区别?
先看定义:
(1)PC是程序计数器,存储将要执行的指令地址
(2)LR是链接寄存器,是ARM处理器中一个有特殊用途的寄存器,当调用函数时,返回地址即PC的值被保存到LR中(mov lr,pc)。
(3)IR是指令寄存器,用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到数据寄存器(DR)中(有的书上叫做缓冲寄存器,BR),然后再传送至IR。
说白了,LR存的是指令地址,IR存的是指令内容。
几种基本汇编指令详解相关推荐
- c语言将两个16位变为一个32位,16位汇编第六讲汇编指令详解第第三讲(示例代码)...
16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时 ...
- 80x86汇编指令详解
80x86指令系统,指令按功能可分为以下七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处理器控制指令. (7 ...
- RV32I ISA 汇编指令详解
add rd, rs1, rs2 示例: add x5,x6,x7 x5=x6+x7 rd: 0b00101 rs1:0b00110 rs2:0b00111 对应32位指令格式如下: 0000000 ...
- RDTSC汇编指令详解
RDTSC - 读取时间标签计数器 操作码 指令 说明 0F 31 RDTSC 将时间标签计数器读入 EDX:EAX 说明 将处理器的时间标签计数器的当前值加载到 EDX:EAX 寄存器.时间标签计数 ...
- PIC中档单片机汇编指令详解(6)
2019独角兽企业重金招聘Python工程师标准>>> 立即数与控制操作指令 SLEEP 单片机进入低功耗休眠模式 语法形式:SLEEP 操作数:无 执行时间:一个指令周期 执行过程 ...
- PIC中档单片机汇编指令详解(4)
INCFSZ f数据寄存器内容递增1,并作判0标志 语法形式:INCFSZ f,d 操作数:f为数据寄存器的低7位地址(0x00~0x7F) d为目的寄存器的低7位地址(0x00~0x7F) 当d=f ...
- arm-linux-ld中的参数,arm-linux-ld指令详解
arm-linux-ld指令详解 我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来:其次,这些.o文件存在相互调用的关系 ...
- 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解
寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解 1. 什么是寄存器 1.1 概念 1. 什么是寄存器: 2. 寄存器作用: 1.2 通俗易懂理解寄存器 2. x86寄存器种类说明及汇编代码 ...
- pragma comment的使用 pragma预处理指令详解
pragma comment的使用 pragma预处理指令详解 #pragma comment( comment-type [,"commentstring"] ) 该宏放置一个注 ...
- PUSHA/PUSHAD POPA/POPAD 指令详解
PUSHA/PUSHAD POPA/POPAD 指令详解 官方文档的解释 在<Intel Architecture Software Developer's Manual Volume 2:In ...
最新文章
- 题目 1471:【蓝桥杯】【入门题】【基础练习VIP】矩形面积交
- 找出两个字符串中最长的相同子字符串
- python template open_python and Template.
- B - Parentheses Balance (UVA - 673)
- 基于IPV6的数据包分析
- php读取文本写入数据库,php读取txt文本文档数据库转入mysql数据库
- sqlalchemy 外键
- html编译圣诞情缘,H5+JS+CSS3 实现圣诞情缘
- DAY13 Matlab实现图像镜像
- Volcano 监控设计解读,一看就懂
- 最新 Python 爬虫利器!
- Docker数据持久化与容器迁移
- C语言字符串和数字转换函数大全
- EXCEL 导入MSSqlserver数据库报错
- 电脑如何恢复已删除文件 如何恢复被删除的数据
- 【论文阅读】Masked Autoencoders Are Scalable Vision Learners(MAE)
- Python网络爬虫中图片下载简单实现
- 腾讯云 linux pptpd 搭建 和遇到的部分问题解决
- C1083: 无法打开包括文件: plugin.moc: No such file or directory
- jquery给id加css,JQuery为元素添加样式