李超

cc编程笔记本。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  218 随笔 :: 5 文章 :: 51 评论 :: 36万 阅读
< 2025年7月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

使用汇编编程时要直接操作硬件资源,如CPU内部资源,存储器和I/O端口,所以一定要学习并记住CPU内部寄存器的命名,功能以及常见的用途,感谢老天,寄存器并不是太多。还有要明白存储器的分段管理模式,存储单元的地址的表示法和物理地址的形成方式,当然也不难理解。


一 寄存器组

寄存器是CPU的内部数据存储资源,是汇编程序能用到的硬件资源之一,由于存取速度比内存快很多,所以在汇编写程序时,要尽可能充分利用寄存器的存储功能。
寄存器一般存储运算过程的中间结果,为随后的指令快速读取,避免压入堆栈再弹出带来的开销。
另外,由于寄存器的数量和容量都有限制,不可能把所有的中间结果都存入寄存器,所以要对寄存器进行适当的调整,根据指令的顺序,如何安排适当的寄存器,避免操作数过多的传送操作是一项很缜密的工作,有一些专门的寄存器的分配策略的文章,在《编译原理》一书中详细阐述。

16/32位CPU在PC中很常用,所以介绍这两种CPU的内部寄存器的名称和具体作用。

1. 16位CPU寄存器组
4个数据寄存器(AX,BX,CX,DX)    2个变址和指针寄存器(SI,DI)    2个指针寄存器(SP,BP)
4个段寄存器(ES,CS,SS,DS)        1个指令指针寄存器(IP)            1个标志寄存器(Flags:16个二进制位只用了9个二进制位作为标志位,下章会讲)

数据寄存器,变址和指针寄存器,指针寄存器都属于通用寄存器,因为具有良好的通用性,数据寄存器既能被当作一个16位寄存器使用,又能拆分成俩8位寄存器使用。
在某些CPU指令中,通用寄存器可能被当作隐含的操作数,比如我在第六章介绍的LOOP指令,就把ECX当作了隐含操作数,使它成为循环计数器。

2. 32位CPU寄存器组
包含16位CPU的所有寄存器,把通用寄存器,指令指针和标志寄存器都扩充到32位,另外增加了2个段寄存器FS,GS。
4个数据寄存器(EAX,EBX,ECX,EDX)    2个变址和指针寄存器(ESI,EDI)    2个指针寄存器(ESP,EBP)
6个段寄存器(ES,CS,SS,DS,FS,GS)    1个指令指针寄存器(EIP)            1个标志寄存器(EFlags:32位只使用了13位作为标志位)

posted on   coderlee  阅读(1107)  评论(0)    收藏  举报
编辑推荐:
· 复杂业务系统线上问题排查过程
· 通过抓包,深入揭秘MCP协议底层通信
· 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历
· 糊涂啊!这个需求居然没想到用时间轮来解决
· 浅谈为什么我讨厌分布式事务
阅读排行:
· 那些年我们一起追过的Java技术,现在真的别再追了!
· 还在手写JSON调教大模型?.NET 9有新玩法
· 为大模型 MCP Code Interpreter 而生:C# Runner 开源发布
· 面试时该如何做好自我介绍呢?附带介绍样板示例!!!
· JavaScript 编年史:探索前端界巨变的幕后推手
点击右上角即可分享
微信分享提示