学 Win32 汇编[16]: 常用寄存器的常规功能


通用寄存器
EAX累加(Accumulator)寄存器AX(AH、AL)常用于乘、除法和函数返回值
EBX基址(Base)寄存器BX(BH、BL)常做内存数据的指针, 或者说常以它为基址来访问内存.
ECX计数器(Counter)寄存器CX(CH、CL)常做字符串和循环操作中的计数器
EDX数据(Data)寄存器DX(DH、DL)常用于乘、除法和 I/O 指针
ESI来源索引(Source Index)寄存器SI常做内存数据指针和源字符串指针
EDI目的索引(Destination Index)寄存器DI常做内存数据指针和目的字符串指针
ESP堆栈指针(Stack Point)寄存器SP只做堆栈的栈顶指针; 不能用于算术运算与数据传送
EBP基址指针(Base Point)寄存器BP只做堆栈指针, 可以访问堆栈内任意地址, 经常用于中转 ESP 中的数据, 也常以它为基址来访问堆栈; 不能用于算术运算与数据传送
指令指针寄存器
EIP指令指针(Instruction Pointer)寄存器总是指向下一条指令的地址; 所有已执行的指令都被它指向过.
标志寄存器
EFLAGS

标志(Flag)寄存器:
EFLAGS 中的 32 位被分成 0-31 个二进制位分别使用;
第 0、2、4、6、7、11 位是状态标志位;
第 10 位是字符串操作控制标志位;
其他标志位一般不用或无权使用
 

0CF进位(Carry)标志目标无法容纳无符号算术运算的结果, 需要进位或借位时被设置; 可用 STC 指令设置, CLC 指令取消.
1
2PF奇偶(Parity)标志低 8 位中有偶数个 1 时被设置
3
4AF辅助(Auxiliary)标志使用 BCD 码运算导致 3 位到 4 位产生进位时被设置
5
6ZF零(Zero)标志运算结果为 0 时被设置
7SF符号(Sign)标志运算结果为负数时被设置
8
9
10DF方向(Direction)标志字符串操作是从高位到低位时被设置; 可用 STD 指令设置, CLD 指令取消.
11OF溢出(Overflow)标志因有符号运算的结果太宽而导致数据丢失时被设置
...
31
...


其中的 EAX、ECX、EDX 三个寄存器相对自由些, 所以练习时用它们较多.

没理会段寄存器: CS、DS、SS、ES、FS、GS, 是因在 Win32 保护模式下编程它们不再重要了.

还有 FPU、MMX 系列寄存器, 等用到再说吧.

posted on 2010-04-09 13:53 万一 阅读(3977) 评论(1) 编辑 收藏©著作权归作者所有:来自51CTO博客作者JLee79的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 学 Win32 汇编[20]: 洞察标志寄存器
  2. 冷月手撕408之数据结构(4)-链表
  3. c语言指针自学
  4. c语言指针学习
  5. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(2) - 识别当前i.MXRT型
  6. 痞子衡嵌入式:揭秘i.MXRT600的ISP模式下用J-Link连接后PC总是停在
  7. 苹果A10及以后版本芯片KTRR原理及脆弱性分析
  8. 第10部分- Linux ARM汇编 寻址方式
  9. 第9部分- Linux ARM汇编 语法

随机推荐

  1. 修改android升级系统后启动系统,提示andro
  2. Android TextView 设置行间距字间距
  3. Android 入门前言之 --布局
  4. android selector 背景选择器的使用, butt
  5. Android Studio系列(四)Version Control II
  6. 8大你不得不知的Android调试工具
  7. android 去掉顶部状态栏
  8. Android相对布局属性全集
  9. android:screenOrientation属性
  10. 文字跑马灯