汇编指令“Intel 组”类别源自何处?

ecm*_*ecm 3 x86 assembly intel machine-code x86-16

在开发 86-DOS 应用程序lDebug的分支期间,我遇到了称为“Intel 组”的指令类别。具体来说,组是指与使用相同 1 或 2 个操作码字节的一组指令相关的东西,通过/rModR/M 字节的字段来区分。

“Intel 组”类别可以一直追溯到 1997 年发布的 FreeDOS Debug 0.95,并且可以在我的 fddebug 存储库的修订版中看到:

/*
 *  Here are the tables for the main processor groups.
 */

struct {
    int seq;    /* sequence number of the group */
    int info;   /* which group number it is */
}
    grouptab[]  = {
        {0x80, GROUP(1)},   /* Intel group 1 */
        {0x81, GROUP(1)},
        {0x83, GROUP(2)},
        {0xd0, GROUP(3)},   /* Intel group 2 */
        {0xd1, GROUP(3)},
        {0xd2, GROUP(4)},
        {0xd3, GROUP(4)},
        {0xc0, GROUP(5)},   /* Intel group 2a */
        {0xc1, GROUP(5)},
        {0xf6, GROUP(6)},   /* Intel group 3 */
        {0xf7, GROUP(6)},
        {0xff, GROUP(7)},   /* Intel group 5 */
        {SPARSE_BASE + 0x00, GROUP(8)},     /* Intel group 6 */
        {SPARSE_BASE + 0x01, GROUP(9)}};    /* Intel group 7 */

/* #define  NGROUPS 9 (this was done above) */

struct {    /* sparse groups */
    int seq;    /* sequence number of the group */
    int info;   /* which group number it is */
}
    sp_grouptab[]   = {
        {0xfe, SGROUP(1)},      /* Intel group 4 */
        {SPARSE_BASE+0xba, SGROUP(2)},  /* Intel group 8 */
        {SPARSE_BASE+0xc7, SGROUP(3)},  /* Intel group 9 */
        {0x8f, SGROUP(4)},      /* Not an Intel group */
        {0xc6, SGROUP(5)},      /* Not an Intel group */
        {0xc7, SGROUP(5)}};

/* #define  NSGROUPS    5 (this was done above) */
Run Code Online (Sandbox Code Playgroud)

我找不到任何有关“英特尔集团”分类的信息。像“intel group 2a”这样的精确网络搜索只会出现同一应用程序的存储库。更广泛的搜索不会发现任何与这些评论中的用途相匹配的内容。

我也从未在我读过的英特尔手册中找到任何“组”类别。例如,这本 486 手册似乎没有在其指令集参考中列出组。

Sep*_*and 5

我 1980 年出版的《基于 8086 的开发系统的 8086/8087/8088 宏汇编语言参考手册》已经引入了“组”概念,尽管仍然有些不完整。

操作码 80h-83h 和 D0h-D3h 可以链接到命名组“immed”和“Shift”,因为属于该组的指令具有明显的共同特征。
对于操作码 F6h-F7h 和 FEh-FFh 来说情况并非如此,因此他们选择了一种更通用的方法,并为这些组指定了通用名称“Grp”,并带有数字后缀。

大约 6 年后,386 手册再次尝试命名这些现有组,并决定将旧的“Grp 1”重命名为“Unary Grp3”,将旧的“Grp 2”重命名为“间接 Grp5”。添加了几个新组,这些组的异构性质再次使工程师不得不求助于通用命名。

8086

操作码 团体 000 001 010 011 100 101 110 111
80小时-83小时 立即 添加 或者 模数转换器 瑞士巴塞尔银行 子系统 异或 化学机械抛光
D0h-D3h 转移 罗尔 相对回报率 RCL RCR SHL萨尔 SHR - SAR
F6h-F7h 组1 测试 - 不是 NEG 多线程 IMUL DIV 免疫缺陷病毒
FEh-FFh 组2 有限公司 十二月 称呼 称呼 联合管理计划 联合管理计划 -

80386

操作码 团体 000 001 010 011 100 101 110 111
80小时-83小时 立即组 添加 或者 模数转换器 瑞士巴塞尔银行 子系统 异或 化学机械抛光
C0h-C1h、D0h-D3h 移位组2 罗尔 相对回报率 RCL RCR SHL SHR SAR
F6h-F7h 一元组3 测试 不是 NEG 多线程 IMUL DIV 免疫缺陷病毒
FEh INC/DEC Grp4 有限公司 十二月
FFh 间接组5 有限公司 十二月 称呼 称呼 联合管理计划 联合管理计划
0Fh,00h 组6 SLDT STR LLDT LTR 维尔罗 维沃
0Fh,01h 组7 SGDT SIDT LGDT LIDT 短程短波 低分子短波
0Fh,BAh 组蛋白-8 BT 基站 贝特瑞 比特币