当前位置: 首页 > 文档资料 > 汇编语言教程 >

11.3 协处理器的指令系统

优质
小牛编辑
139浏览
2023-12-01

11.3 协处理器的指令系统

协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助忆时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码。

在协处理器指令在执行过程中,需要访问内存单元时,CPU会为其形成内存地址。协处理器在协处理器指令期间内利用数据总线来传递数据。80287协处理器利用I/O地址00FAH~00FFH来实现其与CPU之间的数据交换,而80387~Pentium系列芯片,则是利用I/O地址800000FAH~800000FFH来实现这两者之间的数据交换。

11.3.1 指令操作符的命名规则

协处理器指令的操作符(或助忆符)在命名设计时,遵循了下列规则:

1、在操作符后面加上字母P:表示该指令执行完后,还进行一次堆栈弹出操作。如:FADD和FADDP等;

2、在操作符后面加上字母R:表示该操作是反模式,它仅限于减法、除法指令。如:FSUB和FSUBR等;

正模式 —— 栈顶数据=栈顶数据 op指令操作数,或OPN1=OPN1 – OPN2
反模式 —— 栈顶数据=指令操作数 op 栈顶数据,或OPN1=OPN2– OPN1

假设:栈顶数据为10,内存变量data的值为1,分别执行下列指令将有不同的结果。

FSUBdata;指令执行后,栈顶数据为9
FSUBRdata;指令执行后,栈顶数据为-9
FSUBST, ST(1);指令执行后,ST=ST-ST(1)
FSUBRST, ST(1);指令执行后,ST=ST(1)-ST

3、操作符的第2个字母是I:表示内存中数据是整数。它对加、减、乘除指令都有效。

例如:FADD data——浮点数加法;

FIADD data——整数加法,它表示内存单元data是一个整数,把该整数加到栈顶的浮点数上。

4、操作符的第2个字母是N:表示在指令执行之前检查非屏蔽数值性错误。如:FSAVE和FNSAVE等,前者称为等待形式(waitversion),后者称为非等待形式(no-wait version)。

在使用.8087伪指令情况下,汇编程序会在等待形式的指令前面加上指令WAIT,而在非等待形式的指令前面加上空操作指令NOP。

理解了上述操作符命名规则,就能很容易地区分同类指令之间的差异。