几种基本汇编指令详解

常见寄存器

寄存器 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)        ④

8、mov pc,lr 函数返回

ARM中LR存储的是PC的值,IR存储的是下一条将要执行的指令,有什么区别?

先看定义:

(1)PC是程序计数器,存储将要执行的指令地址

(2)LR是链接寄存器,是ARM处理器中一个有特殊用途的寄存器,当调用函数时,返回地址即PC的值被保存到LR中(mov lr,pc)。

(3)IR是指令寄存器,用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到数据寄存器(DR)中(有的书上叫做缓冲寄存器,BR),然后再传送至IR。

说白了,LR存的是指令地址,IR存的是指令内容。

几种基本汇编指令详解相关推荐

  1. c语言将两个16位变为一个32位,16位汇编第六讲汇编指令详解第第三讲(示例代码)...

    16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时 ...

  2. 80x86汇编指令详解

    80x86指令系统,指令按功能可分为以下七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处理器控制指令. (7 ...

  3. RV32I ISA 汇编指令详解

    add rd, rs1, rs2 示例: add x5,x6,x7 x5=x6+x7 rd: 0b00101 rs1:0b00110 rs2:0b00111 对应32位指令格式如下: 0000000 ...

  4. RDTSC汇编指令详解

    RDTSC - 读取时间标签计数器 操作码 指令 说明 0F 31 RDTSC 将时间标签计数器读入 EDX:EAX 说明 将处理器的时间标签计数器的当前值加载到 EDX:EAX 寄存器.时间标签计数 ...

  5. PIC中档单片机汇编指令详解(6)

    2019独角兽企业重金招聘Python工程师标准>>> 立即数与控制操作指令 SLEEP 单片机进入低功耗休眠模式 语法形式:SLEEP 操作数:无 执行时间:一个指令周期 执行过程 ...

  6. PIC中档单片机汇编指令详解(4)

    INCFSZ f数据寄存器内容递增1,并作判0标志 语法形式:INCFSZ f,d 操作数:f为数据寄存器的低7位地址(0x00~0x7F) d为目的寄存器的低7位地址(0x00~0x7F) 当d=f ...

  7. arm-linux-ld中的参数,arm-linux-ld指令详解

    arm-linux-ld指令详解 我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来:其次,这些.o文件存在相互调用的关系 ...

  8. 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解

    寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解 1. 什么是寄存器 1.1 概念 1. 什么是寄存器: 2. 寄存器作用: 1.2 通俗易懂理解寄存器 2. x86寄存器种类说明及汇编代码 ...

  9. pragma comment的使用 pragma预处理指令详解

    pragma comment的使用 pragma预处理指令详解 #pragma comment( comment-type [,"commentstring"] ) 该宏放置一个注 ...

  10. PUSHA/PUSHAD POPA/POPAD 指令详解

    PUSHA/PUSHAD POPA/POPAD 指令详解 官方文档的解释 在<Intel Architecture Software Developer's Manual Volume 2:In ...

最新文章

  1. 题目 1471:【蓝桥杯】【入门题】【基础练习VIP】矩形面积交
  2. 找出两个字符串中最长的相同子字符串
  3. python template open_python and Template.
  4. B - Parentheses Balance (UVA - 673)
  5. 基于IPV6的数据包分析
  6. php读取文本写入数据库,php读取txt文本文档数据库转入mysql数据库
  7. sqlalchemy 外键
  8. html编译圣诞情缘,H5+JS+CSS3 实现圣诞情缘
  9. DAY13 Matlab实现图像镜像
  10. Volcano 监控设计解读,一看就懂
  11. 最新 Python 爬虫利器!
  12. Docker数据持久化与容器迁移
  13. C语言字符串和数字转换函数大全
  14. EXCEL 导入MSSqlserver数据库报错
  15. 电脑如何恢复已删除文件 如何恢复被删除的数据
  16. 【论文阅读】Masked Autoencoders Are Scalable Vision Learners(MAE)
  17. Python网络爬虫中图片下载简单实现
  18. 腾讯云 linux pptpd 搭建 和遇到的部分问题解决
  19. C1083: 无法打开包括文件: plugin.moc: No such file or directory
  20. jquery给id加css,JQuery为元素添加样式

热门文章

  1. php redis 实时聊天,php+redis聊天室
  2. LTE无线接入网的架构
  3. python绘制emoji_在Python中将emoji转换为文本
  4. mdx 医学词典_有没有专门医学英语词典app?
  5. 问题解决:wireshark之npcap无法安装、winpcap无法安装问题解决
  6. Marlin关于如何接收Gcode指令的详解
  7. Ubuntu 突然不然联网解决方法
  8. MySQL查询数据库日志的查询
  9. TLE82453-3SA-芯片手册
  10. Pygame教程系列四:播放音频篇