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

2023-12-22

在开发 86-DOS 应用程序的分支期间,lDebug https://pushbx.org/ecm/web/#projects-ldebug,我遇到了称为“英特尔组”的指令类别。具体来说,组是指与使用相同 1 或 2 个操作码字节的一组指令相关的东西,通过/rModR/M 字节的字段。

“Intel 组”类别可以追溯到 1997 年发布的 FreeDOS Debug 0.95,可以看到在我的 fddebug 存储库的修订版中 https://hg.pushbx.org/ecm/fddebug/file/b237abb3a356/MKTABLES.C#l338:

/*
 *  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) */

我找不到任何有关“英特尔集团”分类的信息。精确的网络搜索,例如“英特尔2a组” https://www.google.com/search?q=%22intel+group+2a%22只显示同一应用程序的存储库。更广泛的搜索不会发现任何与这些评论中的用途相匹配的内容。

我也从未在我读过的英特尔手册中找到任何“组”类别。例如,这本 486 手册 http://bitsavers.trailing-edge.com/components/intel/80486/i486_Processor_Programmers_Reference_Manual_1990.pdf似乎没有在其指令集参考中列出组。


我 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

opcode group 000 001 010 011 100 101 110 111
80h-83h immed ADD OR ADC SBB AND SUB XOR CMP
D0h-D3h Shift ROL ROR RCL RCR SHL SAL SHR - SAR
F6h-F7h Grp 1 TEST - NOT NEG MUL IMUL DIV IDIV
FEh-FFh Grp 2 INC DEC CALL CALL JMP JMP PUSH -

80386

opcode group 000 001 010 011 100 101 110 111
80h-83h Immediate Grpl ADD OR ADC SBB AND SUB XOR CMP
C0h-C1h, D0h-D3h Shift Grp2 ROL ROR RCL RCR SHL SHR SAR
F6h-F7h Unary Grp3 TEST NOT NEG MUL IMUL DIV IDIV
FEh INC/DEC Grp4 INC DEC
FFh Indirct Grp5 INC DEC CALL CALL JMP JMP PUSH
0Fh,00h Grp6 SLDT STR LLDT LTR VERR VERW
0Fh,01h Grp7 SGDT SIDT LGDT LIDT SMSW LMSW
0Fh,BAh Grp-8 BT BTS BTR BTC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编指令“Intel 组”类别源自何处? 的相关文章

随机推荐

  • jhipster - gyp 动词 `which` 失败错误:未找到:python2

    以下是当我尝试使用 JHipster 生成新项目时出现的错误 gyp verb check python checking for Python executable python2 in the PATH gyp verb which f
  • 是否强制要求短路逻辑运算符?以及评估顺序?

    有ANSI标准吗mandate在 C 或 C 中要短路的逻辑运算符 我很困惑 因为我记得 K R 书中说你的代码不应该依赖于这些被短路的操作 因为它们可能不会 有人可以指出标准中哪里说逻辑操作总是短路的吗 我对 C 最感兴趣 对于 C 的答
  • 使用动态 form_class 更新视图

    我想动态改变form class of an UpdateViewDjango 1 6 中的 CBV 我尝试使用 get context data 来执行此操作 但这没有帮助 因为表单已经初始化 所以这需要在 init 我猜 这是我尝试过的
  • R中的zoo对象和ts对象有什么区别?

    我想知道使用上的差异ts or zoo 功能 动物园对象的索引属性中的时间值 可能不规则 在控制台上显示为行名称print zoo方法以及矩阵或原子向量中的值 这些值对可以使用的值进行了限制 通常是数字 但必须全部是单一模式 即不是像数据帧
  • 我应该在程序结束时删除 C++ 中的大树集合还是将其留给操作系统? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这可能是个有点愚蠢的问题 我应该打电话吗delete在节目结束时的巨大地图 场景上 假设整个程序都需要地图 集合 delete是返回前的最后一行
  • tumblr 和 google+ 如何像拼图一样堆叠图像?

    我想要制作一个图像库 并且想知道如何像 Google 和 tumblr 那样堆叠图像 我的意思是 当你查看 tumblr 的存档页面时 它们都堆积在列中 http the overlook hotel tumblr com archive
  • Azure 网站支持的最大域数

    我们正在构建一个托管服务 每个用户在注册时都会在我们的服务域上获得一个自定义子域 例如john myservice com 我们通过在 Azure 网站的域管理器中添加通配符条目来处理此问题 myservice com Azure 网站现在
  • Heroku 上的回形针?

    我很好奇是否有人可以在不使用 S3 的情况下在 Heroku 上工作 我假设 Heroku 是一个只读系统 但必须有某种方法可以在那里保存图像 您无法写入 Heroku 的文件系统 因此无法按照您想要的方式保存图像 您的选择是使用 S3 等
  • django-rest-auth 重置密码 uid 和令牌

    我们的团队在后端使用 django rest api 进行项目 并在前端进行响应 对于身份验证 我们使用 django rest auth 并且我们在密码重置方面遇到问题 这里的网址 urlpatterns url r accounts i
  • 如何在 AngularJS 中异步加载谷歌地图?

    现在我已经找到了一种在以下方法的帮助下初始化 Google 地图的方法安迪 乔斯林 https stackoverflow com users 1397051 andy joslin在这个SO在 angularjs 中初始化 google
  • 使用 ReverseLayout recyclerview 将项目添加到 Endless Scroll RecyclerView

    在普通的回收器视图中 最新的项目都位于顶部 如果您将项目添加到回收器视图中 它会将现有项目向下推 新项目占据顶部位置 在reverseLayout recyclerview中 最新的项目都位于底部 如果您将项目添加到recyclerview
  • 如何在 Maven 项目中添加 Flight Recorder 启用标志?

    我正要开始使用Java 任务控制 5 3 0 我已经添加了 XX 解锁商业功能 XX FlightRecorder进入我的网络应用程序的 jetty template 然后我启动网络应用程序mvn 码头 运行 但是当我开始的时候飞行记录仪我
  • CSV 文件上传不适用于 Codeigniter

    我正在使用下面的代码上传 csv 文件 它总是说 无效文件错误 我该如何解决这个问题 这是我的表格
  • 运行多个 UI 线程

    跳到底部查看问题 这只是一些额外信息 我正在使用一个组件 GeckoFX 来渲染一些网站 很好 但它只能在 Windows 窗体中使用 因为它必须绑定到可以绘制的 WinForms 对象 因为所有 WinForm 都在同一个线程中运行 所以
  • 角度组件没有被破坏

    在角度应用程序中 每次我路由到新页面时 之前页面的组件都会保留在内存中 它没有被破坏 当我路由回该页面时 它会创建一个新实例 应用程序不是通过 Angular CLI 创建的 它是一个使用 Angular 网站上提供的 webpack 配置
  • javascript字符串解释为对象

    从生产的角度来看可能无关紧要 但我想知道为什么会这样 字符串文字被解释为对象 function fancyCallback callback callback this console log typeof this just to see
  • 替换 CSV 字符串中的值

    我有一个以逗号分隔的产品列表 由于项目列表已替换为新产品项目 我正在尝试使用新产品项目列表修改此 CSV 列表 create table tmp id int identity 1 1 not null plist varchar max
  • 为什么这会导致分段错误?

    我一直在 C 项目中对此进行编码 通常我不会遇到太大的分段错误问题 但我是 C 新手 基本上我正在创建一个指向 IntList 的指针 并调用 prepend 从指针创建一个 IntList 问题是 当调用 prepend 时 它会卡在头文
  • Flexbox 最佳填充

    我有一个基本的 Flexbox 列式布局 其中包含固定宽度容器和固定宽度可变高度元素 for let e of document getElementsByClassName element e style height Math floo
  • 汇编指令“Intel 组”类别源自何处?

    在开发 86 DOS 应用程序的分支期间 lDebug https pushbx org ecm web projects ldebug 我遇到了称为 英特尔组 的指令类别 具体来说 组是指与使用相同 1 或 2 个操作码字节的一组指令相关