- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
协处理器指令系统的
协处理器指令系统
协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码。
协处理器指令在执行过程中,需要访问内存单元时,CPU会为其形成内存地址。协处理器在指令期间内利用数据总线来传递数据。80287协处理器利用I/O地址00FAH~00FFH来实现其与CPU之间的数据交换,而80387~Pentium系列芯片,则是利用I/O地址800000FAH~800000FFH来实现这两者之间的数据交换。指令操作符的命名规则协处理器指令的操作符(或助忆符)在命名设计时,遵循了下列规则:
1、在操作符后面加上字母P:表示该指令执行完后,还进行一次堆栈弹出操作。如:FADDFSUBP/FSUBRP /FMULP/FDIVP /FDIVRP等;
2、在操作符后面加上字母R:表示,它仅限于减法、除法指令。如:FSUB和FR等;
—— 目的操作数=目的操作数 op 源操作数加R模式 —— 目的操作数=源操作数 op 目的操作数
假设:栈顶数据为10,内存变量data的值为1,分别执行下列指令将有不同的结果。
FSUB data ; FSUBR data ;ST(0)=data-ST(0)
FSUB ST(3), ST(0) ;指令执行后,ST=ST(3)-ST(0)
FSUBR ST(3), ST(0) ;指令执行后,ST=ST(0)-ST(3)
3、操作符的第2个字母是I:表示内存数是整数。它对加、减、乘除指令都有效。
FIADD data —— 整数加法,它表示内存单元data是一个整数,把该整数加到栈顶的浮点数上。
、操作符的第2个字母是N:表示在指令执行之前检查非屏蔽数值性错误。如:FSAVE和FNSAVE等,前者称为等待形式(wait version),后者称为非等待形式(no-wait version)。
在使用.8087伪指令情况下,汇编程序会在等待形式的指令前面加上指令WAIT,而在非等待形式的指令前面加上空操作指令NOP。理解了上述操作符命名规则,就能很容易地区分同类指令之间的差异。数据传送指令
为了满足协处理器和CPU之间进行数据交流的需求,就需要实现内存单元和协处理器之间进行数据传送的指令。协处理器的指令系统中有三大类数据传送指令:BCD传送指令、数传送指令浮点数传送。一、BCD传送指令
1、FBLD
指令格式:FBLD MemBCD指令功能:将中的BCD数据压入协处理器的堆栈中;。
2、FBSTP
指令格式:FBSTP MemBCD指令功能:将协处理器中的BCD数据存入内存,并进行堆栈的弹出操作。
例如:
.387 data1 DT 123, -543
data2 DT 2.5
……
FBLD data1 FBSTP data
;把压进栈 ;把当前堆顶数据弹出,并传送给、整数传送指令
1、FILD
指令格式:FILD MemInt其中:MemInt是定义为整型数据类型的内存单元,但不能是用定义的存储单元。下同,不再叙述。
2、FIST/FISTP
指令格式:
其中:
指令功能: FIST MemIntFISTP MemInt
Mem是定义整型数据类型的内存单元,。
将协处理器堆栈栈顶的数据传送到目标存储单元中。在进行数据传送时,系统自动根据控制寄存器中舍入控制位的设置把栈顶浮点数舍入成整型数据。 、浮点数传送指令
1、FLD指令格式:
FLD STReg/MemReal指令功能:
将浮点数据压入协处理器的堆栈中。当进行内存单元内容压栈时,系统会自动决定传送数据的精度。比如:用DD或REAL4定义的内存单元数值是单精度数等。
STReg处理器堆栈寄存器ST(0)~ST(7)。
例如:
.387
data1DWORD 123, -543
data2REAL8 -321.5
data3REAL10 2.5
……
FLDdata1 ;压一个单精度数据进栈
FLDdata2 ;压一个双精度数据进栈
FLDST(0) ;把堆栈寄存器ST(0)的值再压进栈
FLDdata3 ;压一个扩展精度数据进栈 2、FST
指令格式:
指令功能: FST? STReg/MemReal
将协处理器堆栈栈顶的数据传送到目标操作数中。在进行数据传送时,系统自动根据控制寄存器中舍入控制位的设置把栈顶浮点数舍入成相应精度的数据。 3、FSTP
指令格式: FSTP? STReg/MemReal 指令功能: 与FST相类似,所不同的是:指令FST执行完后,不进行堆栈的弹出操作,即:堆栈不发生变化,而指令FSTP执行完后,则需要进行堆栈的弹出操作,堆栈将发生变化。4、FXCH
指令格式:
指令功能: FXCH [STReg]
将
文档评论(0)