Android开发

汇编第2课(下),Android开发者跳槽指南

本文主要是介绍汇编第2课(下),Android开发者跳槽指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

**作用:**主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

二、指针寄存器(Pointer Register)

80386架构中的指针寄存器有基址寄存器EBP、堆栈指针寄存器ESP和指令指针寄存器EIP。我们只需要了解基址寄存器EBP和堆栈指针寄存器ESP即可,指令指针寄存器EIP总是指向下一条要执行的指令的地址,一般情况下无需修改EIP。

EBP称为基址寄存器,可作为通用寄存器用于存放操作数,常用来代替堆栈指针访问堆栈中的数据。

ESP称为堆栈指针寄存器,不可作为通用寄存器使用,ESP存放当前堆栈栈顶的地址,一般情况下,ESP和EBP联合使用来访问函数中的参数和局部变量。

**作用:**主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操
作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

三、变址寄存器(Index Register)

顾名思义,变址的含义是内存地址会变动的,也就是说变址寄存器中的数据存放在变动的内存地址里。80386架构中有两个变址寄存器,分别是ESI和EDI。

SI称为源变址寄存器 (Source Index),通常存放要处理的数据的内存地址。

DI称为目的变址寄存器(Destination Index),通常存放处理后的数据的内存地址。

**作用:**变址寄存器主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 ESI和EDI常用来配合使用完成数据的赋值操作!

四、**标志寄存器(**EFLAGS)

标志寄存器又称程序状态字(外语缩写:PSW、外语全称:Program Status Word),存放条件标志、控制标志,主要用于反映处理器的状态和ALU运算结果的某些特征及控制指令的执行。一共有三种作用

  1. 用来存储相关指令的某些执行结果;

  2. 用来为CPU执行相关指令提供行为依据;

  3. 用来控制CPU的相关工作方式。

**在汇编中的用途:**标志寄存器是实现条件判断和逻辑判断的一种机制,在汇编语言中一般不直接访问标志寄存器,而是通过指令的操作隐含访问标志寄存器 。

80386架构的标志寄存器有32位,其中存储的信息通常被称为程序状态字(PSW)。简称flag。flag和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。而flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。在这32位中大部分是保留和给编写操作系统的人用的,一般情况下只需知道32位的低16位中的8位即可,下图列出了80386架构的标志寄存器中需要了解的8个位的位置:

运算结果标志位


1、CF(Carry Flag):进位标志

进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。

2、PF(Parity Flag):奇偶标志

奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。

利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。

3、AF(Auxiliary Carry Flag):辅助进位标志

在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:

  • 在字操作时,发生低字节向高字节进位或借位时;

  • 在字节操作时,发生低4位向高4位进位或借位时。

对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。

发生低字节向高字节进位或借位时;

  • 在字节操作时,发生低4位向高4位进位或借位时。

对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。

这篇关于汇编第2课(下),Android开发者跳槽指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!