gpt4 book ai didi

assembly - 16 位 asm 指令集

转载 作者:行者123 更新时间:2023-12-04 09:37:13 36 4
gpt4 key购买 nike

COM 文件中使用了哪些指令集?我以为是 8086,但似乎我错了。在我发现的 8086 手册中,shl 的第二个参数只能接受 1 或 cl,而 1 以外的立即值对我来说很好用。如果重要,我正在使用 NASM。
谢谢你的时间。

最佳答案

这是那些有趣的问题之一,而且答案一如既往地具有误导性。

一个真正的 DOS COM 文件没有头文件,必须放在单个内存段中,因为它没有重定位信息,DOS 必须把文件放在它需要的地方,所以唯一真正兼容(与 x86)的方法是使用 8086 兼容程序集。
编辑:为了澄清上述内容,这是因为 8086 没有内存页。

您当然可以在 286/386 操作数中进行编译,因为一旦程序运行,DOS 中就没有执行运行时来阻止您并说“不,您不能这样做,这是一条 386 指令”。

有趣的是,这也是 COM 文件在 Windows7 x32 或在 Windows7 x64 中不经常工作的部分原因。

由于 DOS 的工作方式,command.com 在您执行 .com 文件时被卸载,然后重新加载,因此基本上您的 .com 文件可以访问系统的所有内存,理论上使用 DOS 内存扩展器,如 Phar lap 的 DOS/4GW和 CWSDPMI 浮现在脑海中。

长话短说;您可以使用当前系统可以支持的任何类型的命令,但您应该只使用 16 位 x86 兼容命令以确保。

如果以上听起来像 PITA,那是因为它是,我记得:) 这也是为什么 .EXE 格式很快变得非常流行的原因。

关于assembly - 16 位 asm 指令集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7597988/

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