gpt4 book ai didi

assembly - 什么是 8086 ESC 指令操作码

转载 作者:行者123 更新时间:2023-12-04 23:39:24 25 4
gpt4 key购买 nike

主要是历史兴趣,如果我要为汇编程序实现 8086 兼容性,哪些操作数被认为对 ESC 有效操作说明?
ESC opcode, source
从 8086 程序员手册我知道,opcode是 0 到 63 范围内的立即数和 source是寄存器或存储器。但是哪些寄存器可以被编码?两者 reg8reg16或仅 reg16 ?如 source是内存,操作数大小( mem8mem16 )重要吗?

基本上,从指令编码的角度来看,上述两者都无关紧要(例如,esc 0x01, chesc 0x01, bp 都会产生相同的结果),但也许汇编程序有强制限制

最后,但并非最不重要的是,我在哪里可以找到 ESC 的描述?操作码?

最佳答案

8086 有一个操作码空间,统称为 ESC (转义到协处理器)。它占用的范围是 d8df .该指令空间中的每条指令后跟一个 modr/m 字节,并且取决于 mod 字段,零到两个位移字节。当8086遇到ESC具有两个寄存器操作数(即 mod = 11)的指令,它执行 nop。当处理器遇到 ESC带有内存操作数的指令,从内存操作数指示的地址开始执行一个读周期,结果被丢弃。
使用两条特殊的信号线,协处理器可以区分数据提取和指令提取,允许它与 8086 并行解码指令流。
8087 使用这种机制来 Hook 指令流:操作码字节中的三个可用位与 modr/m 字节中 reg 字段的三个位一起形成一个六位操作码。 modr/m 字节的 r/m 字段用于指定 FPU 寄存器堆栈上的位置(如果 mod = 11,表示两个寄存器操作数)或内存操作数。一些操作码根据 r/m 字段的内容对各种指令进行编码。在所有这些情况下,一条指令针对内存操作数进行编码,而其他八条指令针对每个可能的寄存器操作数进行编码。
8087在8086在取指令后立即执行伪取指令时进行寄存,并记住地址。对于从内存加载的指令,它会加载内存操作数的附加字并执行其功能。在存储的情况下,它忽略获取的结果并将其值存储到 8086 指示的地址。
8087 与 8086 异步执行操作。但是,不存在隐式同步。如果尝试发出 ESC当协处理器忙时,该指令将被静默忽略。为了解决这个问题,8087断言它的BUSY引脚(连接到 8086 的 TEST 引脚),同时执行操作。程序员可以发出wait指令( 9b ,等待协处理器准备好)等待 8087 完成操作并因此释放 WAIT线。这通常在每条 8087 指令之前完成,当时许多汇编程序会自动插入 WAIT前缀。对于高性能代码,手动计算 8087 执行某条指令所需的时间并省略 wait 也很常见。当前一个浮点指令被保证完成时。

关于assembly - 什么是 8086 ESC 指令操作码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42543905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com