0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍8个32位通用寄存器

冬至子 来源:半同桌 作者:lanlan 2023-09-20 14:58 次阅读

一般我们分析的程序大多都是32位的,所以这里就先介绍x86汇编,也就是32位下的汇编,64位下的汇编后续会介绍。

x86汇编一共有8个32位通用寄存器,名称分别为:EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI。

这些寄存器用来在程序运行过程中的算术运算和数据传输。其中EAX,EBX,ECX,EDX这四个寄存器又可以分为低16位,高8位和低8位,这样分的目的是为了传输不同字节大小的数据。

比如说一个字节的数据,也就是8位,那么就可以放到寄存器的低8位中;一个四字节 32位的数据,刚好就可以放到一个寄存器中。

下面是EAX,EBX,ECX,EDX这四个寄存器的低16位,高8位,低8位的表示方法

1.jpg

剩下的4个通用寄存器只能用32位和16位名称来访问

1.jpg

这些寄存器不需要死记硬背,在以后的分析过程中就会慢慢熟悉。

虽然这8个通用寄存器都是用来存储数据,但是还是有一些区别的:

EAX:乘除指令默认使用EAX寄存器保存结果数据;计算加法的时候结果也是保存在EAX中;函数调用完成后返回值也是默认保存在EAX中

imul:乘法指令

imul 操作数1,操作数2 ,表示操作数1*操作数2,并把结果放到操作数1中

可以看到下面的乘法操作都是用EAX保存结果

图片

图片

图片

图片

加法操作也是把结果放到EAX中

图片

图片

ECX:默认作为循环计数器,用来记录循环次数

EBP/ESP:这两个寄存器一般是用来记录栈的栈顶和栈底,EBP的值是指向栈底的指针,ESP的值是指向栈顶的指针

ESI/EDI:这两个寄存器大多是用在串操作指令中,比如字符串拷贝等操作

ESI就是扩展源变址寄存器(extended source index),EDI是扩展目的寄存器(extended destination index)

下面是一个字符串拷贝的汇编伪代码:

MOV ECX,EAX     ;把字符串长度放到ECX中,用来计数
INC ECX         ;因为有零字节,计数器+1
MOV ESI,SOURCE  ;SOURCE 是源字符串的地址
MOV EDI,TARGET  ;TARGET 是用来保存复制后字符串的地址,也就是目的字符串
CLD             ;方向标志清零,ESI和EDI沿着正向(地址增大的方向)递增
                ;也就是字符串的处理是由前往后
REP MOVSB       ;复制字符串,按字节传送数据

除了这8个通用寄存器外,还有一个寄存器使用的很多,这就是EIP(指令指针寄存器),这个寄存器的作用就是保存了下一条将要执行指令的地址,更改EIP的值可以改变程序的执行流程

8个通用寄存器加上一个指令指针寄存器EIP,这9个寄存器就是今后逆向过程中接触最多的寄存器了,在以后的使用过程中会慢慢对这些寄存器有更多了解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5037

    浏览量

    117765
  • 计数器
    +关注

    关注

    32

    文章

    2126

    浏览量

    93009
  • ESP
    ESP
    +关注

    关注

    0

    文章

    171

    浏览量

    33396
收藏 人收藏

    评论

    相关推荐

    ARM寄存器的总结

    ARM处理共有37寄存器: 1) 31通用寄存器,包括程序计数
    发表于 07-19 21:20

    寄存器

    位置,即寻址;   3.可以用来读写数据到电脑的周边设备。 编辑本段数据寄存器   8086 有1416寄存器,这14
    发表于 08-27 11:17

    寄存器用厂家distributed ram描述是否比"HDL通用寄存器描述...

    个人觉得如果“HDL通用寄存器描述”一32寄存器,则综合需要32
    发表于 10-04 22:44

    ARM寄存器的总结

    ARM处理共有37寄存器:1) 31通用寄存器,包括程序计数
    发表于 04-26 14:33

    ARM寄存器的总结

    32的2)6状态寄存器。这些寄存器也是32的,但是只使用了其中的12ARM
    发表于 05-13 11:46

    ARM处理寄存器介绍

    ARM处理共有37寄存器: 1) 31通用寄存器,包括程序计数
    发表于 07-06 07:59

    ATtiny2313通用寄存器详解

    8 结果·输出两 8 操作数,输入一 1
    发表于 11-04 07:21

    请问STM8 16通用定时有哪些?

    本章介绍了STM8通用定时TIM2,TIM3和TIM5,其中TIM2有3通道,TIM3有2
    发表于 11-20 06:43

    介绍几个寄存器

    首先介绍几个寄存器,这几个寄存器只能在汇编或内联汇编时才能访问,C语言是访问不到的R0-R12,都可作为临时变量存储,跟C语言的变量差不多,不过汇编中的存储变量是
    发表于 08-24 08:27

    CPU内部的四16bit的通用寄存器介绍

    可以分为高八和第八,如AH,AL。这种灵活的使用方法给编程带来极大的方便,既可以处理16数据,也能处理8数据。这四
    发表于 12-10 06:35

    寄存器组CM3拥有通用寄存器组和一些特殊寄存器

    程序状态的完整性。2)有MSP 和PSP(两者只需一,不能同时使用,默认MSP)。MSP :主堆栈指针,系统。PSP : 进程堆栈指针,个人堆栈指针。R14:LR连接寄存器功能:保...
    发表于 12-16 06:44

    谈一谈STM32通用IO寄存器

    STM32通用IO 寄存器一、端口配置寄存器 CRH、CRL1、MODE2、CNF二、数据寄存器 ODR、IDR1、ODR2、IDR三、置
    发表于 01-18 09:15

    SysTick寄存器介绍

    设置系统时钟SYSCLK 等于72M。当重装载数值寄存器的值递减到0 的时候,系统定时就产生一次中断,以此循环往复。SysTick 寄存器介绍SysTick—系统定时
    发表于 01-21 11:37

    AArch64寄存器介绍

    作为 RISC 架构,AArch64 提供了大量的通用寄存器。除通用寄存器之外,本节还会介绍特殊寄存器
    的头像 发表于 08-24 09:57 4922次阅读

    ARM通用寄存器及状态寄存器详解

    笔者来聊聊ARM通用寄存器以及状态寄存器的认识与理解。
    的头像 发表于 01-06 14:58 4918次阅读