111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:7848回复:0

经典汇编语言教程:11.3 协处理器的指令系统

楼主#
更多 发布于:2013-01-29 11:49

协处理器共有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。
理解了上述操作符命名规则,就能很容易地区分同类指令之间的差异。

喜欢0 评分0
游客

返回顶部