C/C++ 您当前所在位置:首页 > C/C++ > 常用8个32位通用寄存器

常用8个32位通用寄存器

陈成 陈成 2020-06-29 20:45:54 C/C++ 180人已围观

简介 在CPU在底层是如何计算加法的一文中说了CPU计算后会将中间结果放在容器里,计算机里面有很多的这种容器,这个容器可能是内存提供,也可能是CUP提供,总之就会存在某个地方。CPU提供的容器很少,内存则多。它们在底层是没有什么区别的,都是存0和1,也都有宽度。为什么CPU提供的容器少,因为CPU贵啊,而内存则相对便宜很多。CPU中的容器速度非常快,缺点是少,而内存缺点则是慢,这个慢也是相对CPU来说,优点是内存提供的更多。下面说一下CPU中常用到的8个32位的通用寄存器。

在CPU在底层是如何计算加法的一文中说了CPU计算后会将中间结果放在容器里,计算机里面有很多的这种容器,这个容器可能是内存提供,也可能是CUP提供,总之就会存在某个地方。CPU提供的容器很少,内存则多。它们在底层是没有什么区别的,都是存0和1,也都有宽度。为什么CPU提供的容器少,因为CPU贵啊,而内存则相对便宜很多。CPU中的容器速度非常快,缺点是少,而内存缺点则是慢,这个慢也是相对CPU来说,优点是内存提供的更多。下面说一下CPU中常用到的8个32位的通用寄存器。

1、EAX

编号:0

存储数据范围:0x00000000 - 0xFFFFFFFF

用途:累加器

2、ECX

编号:1

存储数据范围:0x00000000 - 0xFFFFFFFF

用途:计数

3、EDX

编号:2

存储数据范围:0x00000000 - 0xFFFFFFFF

用途:I/O指针

4、EBX

编号:3

存储数据范围:0x00000000 - 0xFFFFFFFF

用途:DS段的数据指针

5、ESP

编号:4

存储数据范围:0x00000000 - 0xFFFFFFFF

用途:堆栈指针

6、EBP

编号:5

存储数据范围:0x00000000 - 0xFFFFFFFF

用途:SS段的数据指针

7、ESI

编号:6

存储数据范围:0x00000000 - 0xFFFFFFFF

用途:字符串操作的源指针,SS段的数据指针

8、EDI

编号:7

存储数据范围:0x00000000 - 0xFFFFFFFF

用途:字符串操作的目标指针,ES段的数据指针

注意上面的用途是CPU在设计的时候建议用途,并不一定要这样使用。

最好将这8个32位通用寄存器背熟EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI以及它们对应的编号。

再简单介绍一下16位和8位寄存器

寄存器编号(二进制)编号(十进制)
32位16位
8位
EAXAXAL0000
ECXCXCL0011
EDXDXDL0102
EBXBXBL011
3
ESPSPAH1004
EBPBPCH1015
ESIDIDH1106
EDISI
BH1117

上面的表格看出什么来了吗?这几个32位寄存器就是由16位扩展而来,去掉前面的E就是16位。16位就是从32位中间切一刀,而8位就是从16位中间再切一刀。8位中有高8位和低8位,以EAX为例,高8位就是AH,低8位就是AL,ECX、EDX和这一样。如果我们在汇编中使用mov ax,0x1指令,则会改变后4位的值(注意是16进制),汇编中使用move ah,0x1指令,则会改变第三和第四位的值(从右往左数)。最后再说一次这些名字和顺序最好记住它。

文章评论

发送

站点信息

  • 上线时间:2020年05月30日
  • 网站程序:自建框架
  • 博客模板:今夕何夕
  • 文章统计43篇文章
  • 评论统计0条评论
  • 留言统计0条留言
  • 统计数据:百度统计