汇编语言学习笔记 第一节:寄存器
来源:互联网 发布:51单片机助手 编辑:程序博客网 时间:2024/06/05 11:10
寄存器(英文register)是CPU内部用来暂存指令、数据、地址的元件。理解寄存器是理解计算机运行原理和掌握汇编语言的基础环节。
从寄存器的用途来看,可分为数据寄存器(eax、ebx、ecx、edx)、指针寄存器(esi、edi、ebp、esp、eip)、段寄存器(cs、ss、ds、es、fs、gs)和标志寄存器(eflags)等4类。
一、数据寄存器
数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的数据寄存器:eax、ebx、ecx和edx。
eax通常称为累加寄存器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;
ebx称为基地址寄存器(Base Register)。常作为存储器指针来使用;
ecx称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;
edx称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
相比16位寄存器,32位寄存器中的eax、ebx、ecx和edx不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,因而更具有通用性。
二、指针寄存器
寄存器esi(s为source)、edi(d为destination)称为变址寄存器(Index Register),主要用于存放存储单元在段内的偏移量。
寄存器ebp、esp称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量。
ebp为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;
esp为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。
用变址寄存器和指针寄存器可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
eip(Instruction Pointer)同cs一同指向CPU即将执行的下一条指令的地址。不能够直接修改这个寄存器的值,修改它的唯一方法是跳转或分支指令。
三、段寄存器
cs (Code Segment):代码段寄存器;
ds (Data Segment):数据段寄存器;
ss (Stack Segment):栈段寄存器;
es (Extra Segment):附加段寄存器;
另外x86还有fs、gs两个附加段寄存器,与es相同。
段寄存器存放某个段的基址,配合指针寄存器便能获取当前操作的位置。
四、标志寄存器
CF(Carry FLag) - 进位标志(第0位):进位标志是用来反映计算时是否产生了由低位向高位的进位,或者产生了从高位到低位的借位 。
if(运算过程中产生了进位或者借位){ CF = 1;}else{ CF = 0;}
PF(Parity FLag) - 奇偶标志(第2位):奇偶标志是用来记录相关指令执行后,其结果的所有的Bit位中1的个数是否为偶数 。
if(运算结果中 1 的个数为偶数){ PF = 1;}else{ PF = 0;}
AF(Auxiliary Carry FLag) - 辅助进位标志(第4位):用来辅助进位标志 。
if(字节操作中发生低半个字节向高半个字节借位或者进位 || 字操作中发生低字节向高字节借位或者进位){ AF = 1;}else{ AF = 0;}
ZF(Zero FLag) – 零标志(第6位):记录的是相关的指令执行完毕后,其执行的结果是否为0。
if( 执行的结果== 0 ){ ZF = 1;}else{ ZF = 0;}
SF(Sign FLag) - 符号标志(第7位):符号标志,其记录相关指令执行完以后,其结果是否为负数 。
if( 运算结果为负数 ){ SF = 1; }else{ SF = 0;}
TF(Trap FLag) - 追踪标志(第8位):追踪标志,主要是用于调试时使用 。
if(TF == 1){ CPU 进入单步方式;}
IF(Interrupt-Enable FLag) - 中断允许标志(第9位):中断允许标志,其决定 CPU 是否能够响应外部可屏蔽中断请求(以后会做详细介绍) 。
if(IF == 1){ CPU 能够响应外部的可屏蔽中断请求;}else{ CPU 不能够响应外部的可屏蔽中断请求;}
DF(Direction FLag) - 方向标志(第10位):方向标志,其用于在串处理指令中,用来控制每次操作后SI和DI是自增还是自减 。
if(DF == 0){ SI++;DI++;}else{SI--;DI--;}
OF(OverFlow FLag) - 溢出标志(第11位):溢出标志,其通常记录了有符号数运算的结果是否发生了溢出 。
if(运算发生溢出){ OF = 1;}else{ OF = 0;}
- 汇编语言学习笔记 第一节:寄存器
- 汇编语言学习笔记:寄存器(1)
- <学习笔记>王爽汇编语言__寄存器
- 《汇编语言》学习笔记 第二章之寄存器
- 汇编语言学习笔记(十一)标志寄存器
- 【学习笔记之汇编语言】【二】寄存器
- 《汇编语言》学习笔记 第二章 寄存器
- 汇编语言学习笔记之通用寄存器
- [汇编语言学习笔记][第二章寄存器]
- 汇编语言学习笔记第二章 寄存器
- 汇编语言学习笔记第二章 寄存器
- 汇编语言学习笔记1.0-(基础知识、寄存器)
- 【汇编语言笔记】 基本知识、寄存器
- <学习笔记>王爽汇编语言__再论寄存器
- <学习笔记>王爽汇编语言__标志寄存器
- 汇编语言学习笔记(二):寄存器(cpu工作原理)
- 汇编语言学习笔记(三)寄存器(内存访问)
- 王爽汇编语言学习笔记(二)--寄存器
- Ubuntu下deb包的安装方法
- xmpp学习笔记1
- android selector 中的选中、点击、获得焦点的区别
- 从Eclipse转移到IntelliJ IDEA一点心得
- 自己测试apache绑定域名
- 汇编语言学习笔记 第一节:寄存器
- iOS 解决无法使用Quartz2D绘制1像素直线的问题
- 令病菌的力减弱长期吃药反而会产生抗药性
- 逆波兰表达式(后缀表达式)
- 面试
- 漫游Kafka入门篇之简单介绍
- activeMQ--Failover Transport
- Jfinal---备忘(1)
- 准备动手写一个博客网站了