【发布时间】:2014-03-26 17:12:27
【问题描述】:
我正在为 8088 制作一个简约的汇编程序。我想知道最长的字节指令组合是什么?
目前我找到的最长指令是6个字节。:
add word [0134], 0032
翻译成
81 06 34 01 32 00
是否有超过 6 个字节的内容?
另外一个问题,我完全理解除了第 4 个字节之外的整个 6 个字节。
例如:
第一个字节表示:与16位立即数相加
第2个字节表示:基址指针+位移指令
第3个字节表示:位移
5-6字节表示:16bit数据
但我不知道第 4 个字节是什么意思,特别是“1”值。
这是什么意思?
【问题讨论】:
-
34 01不只是一个 16 位地址吗? -
它不应该是,除非我解释错了,8088 手册说:(第 2 个字节)mod 0 0 0 r/m 因为 06 转换为 00000110 r/m = 110。它表示如果 r/m = 110。那么 EA = (BP) + 位移。所以我假设 100 是基本指针,34 是位移。第 4 个字节对我来说仍然是个谜
-
8088上有无限条指令,执行时不可中断。只需用段前缀(例如 CS:)填充 64Kbytes。处理器永远不会停止执行这个非常长的指令,因为地址会在 64K 边界处换行 :)
-
chepner 已经在指令中回答 34 01 来自 0134 而 32 00 来自 0032。
-
> 超过 6 个字节? - 使用将生成前缀字节的备用段寄存器(如 es:)。