x86相关内容

如何从独立环境中关闭计算机?

我正在制作一个基于英特尔 x86 架构的保护模式操作系统,并且正在寻找一些关于如何通过汇编代码或类似的东西关闭计算机电源的信息.你能帮我解决这个问题吗? 解决方案 来自 http:///forum.osdev.org/viewtopic.php?t=16990 ACPI 关闭在技术上是一件非常简单的事情,只需要一个 outw(PM1a_CNT, SLP_TYPa | SLP_EN ) ..
发布时间:2022-01-11 22:50:44 其他开发

在 MASM 的宏中使用本地标签的问题

我要编写一个宏,它以 E,NE,A,B... 作为参数和单个命令,即 mov eax,ebx如果前面的 cmp 操作设置的条件为真,则执行. 示例调用如下所示. cmp bx,20mDoIf E, 我遇到的问题是,当我尝试使用以下定义进行编译时,我得到了两个错误之一.通过 LOCAL 定义,我得到一个 Undefined Symbol Error: ??00 ..
发布时间:2022-01-11 20:16:17 其他开发

继续获取 e8 00 00 00 00 作为机器代码以在汇编中调用函数

我知道在我的文件中使用 objdump -dr 时 call 在机器代码中显示为 e8 00 00 00 00 因为它没有尚未被链接.但我需要找出链接器完成工作后 00 00 00 00 会变成什么.我知道它应该计算偏移量,但我对此有点困惑. 以下面的代码为例,链接器部分完成后,e8 00 00 00 00应该如何?我如何得到这个答案? 我正在使用此示例代码进行测试:(我正在尝试调用 ..
发布时间:2022-01-11 15:41:52 其他开发

如何在编译/链接时使用地址进行计算?

我编写了一些代码来初始化 IDT,它将 32 位地址存储在两个不相邻的16 位半.IDT 可以存储在任何地方,您可以通过运行 LIDT 指令告诉 CPU 在哪里. 这是初始化表格的代码: void idt_init(void) {/* 不幸的是,我们不能把它写成循环.第一个选项,* 用地址初始化 IDT,在这里循环它,并且* 重新初始化描述符不起作用,因为分配了一个*一个uintptr_t ..
发布时间:2022-01-11 15:24:53 其他开发

汇编 - x86 调用指令和内存地址?

我一直在阅读一些汇编代码,并且开始看到调用指令实际上是程序计数器相关的. 但是,每当我使用 Visual Studio 或 Windbg 进行调试时,它总是说 call 0xFFFFFF ... 这对我来说意味着我要跳转到那个地址. 谁是对的?Visual Studio 是否隐藏了指令编码的复杂性,只是说哦,这就是程序的意思,也就是说,调试器知道它是一条相对于 pc 的指令,并且因为它 ..
发布时间:2022-01-11 15:14:27 其他开发

对于微型程序,链接后最小的可执行文件大小现在比 2 年前大 10 倍?

对于大学课程,我喜欢比较使用 gcc/clang 和汇编编写和编译的功能相似程序的代码大小.在重新评估如何进一步缩小某些可执行文件的大小的过程中,当我两年前组装/链接的相同汇编代码现在在再次构建后增长超过 10 倍时,我无法相信自己的眼睛(这适用于多个程序,不仅是 helloworld): $ 制作as -32 -o helloworld-asm-2020.o helloworld-asm-20 ..
发布时间:2022-01-11 14:56:15 服务器开发

x86 中是否有任何指令可以加速 SHA (SHA1/2/256/512) 编码?

例如,x86 是指令集到硬件加速 AES.但是在 x86 中是否有任何指令可以加速 SHA(SHA1/2/256/512)编码,在 x86 上编码 SHA 的最快库是什么? 解决方案 x86 中是否有任何指令可以加速 SHA (SHA1/2/256/512) 编码? 现在是 2016 年 11 月,答案终于是肯定的.但它只有 SHA-1 和 SHA-256(以及扩展的 SHA-2 ..
发布时间:2022-01-10 10:00:39 C/C++开发

过程链接表的目的是什么?

我很好奇为什么存在过程链接表.它的用途是什么?程序集不能直接调用全局偏移表吗?调用 PLT 比调用 Global Offset Table 有什么优势? 整个过程对我来说仍然有点困惑,我正在尝试找出动态链接的来龙去脉,因此我们将不胜感激. 解决方案 对于从 PIC 代码进行的调用,您是正确的,PLT 并不是真正需要的.编译器可以很好地生成 GOT 查找并间接调用从 GOT 获得的地址 ..
发布时间:2022-01-09 19:59:23 服务器开发

如何在 x86 程序集中比较有符号值和无符号值

我无法找到一种方法来比较 x86 汇编代码中的正数和负数. 例如:当我比较 -1 和 1 时,我总是得到 -1 更大.我知道这是因为 2 的补码格式使基础二进制中的 -1 大于 1. 但是任何人都可以提供 x86 程序集的片段来比较正数和负数并使其在数学上正确吗?(例如 1 > -1) 谢谢! 解决方案 您可能使用了以下无符号变体之一: cmp eax, ebxjb较小 ..
发布时间:2022-01-09 19:36:34 其他开发

创建一个 x86 汇编程序,将整数转换为 0 和 1 的 16 位二进制字符串

正如问题所暗示的,我必须编写一个 MASM 程序来将整数转换为二进制.我尝试了许多不同的方法,但没有一个对我有帮助.我正在处理的最终代码如下.我在 Visual Studio 中调试代码时遇到访问内存冲突错误. 任何有关如何解决错误以及我是否走在正确轨道上的帮助将不胜感激.第一个代码是我的 C++ 代码,它将一个 char 数组传递给一个 .asm 文件以转换为二进制文件. #includ ..
发布时间:2022-01-09 19:22:43 其他开发

x86 32 位汇编代码是有效的 x86 64 位汇编代码吗?

所有 x86 32 位汇编代码都是有效的 x86 64 位汇编代码吗? 我想知道 32 位汇编代码是否是 64 位汇编代码的子集,即每个 32 位汇编代码都可以在 64 位环境中运行? 我猜答案是肯定的,因为 64 位 Windows 可以执行 32 位程序,但后来我看到 64 位处理器支持 32 位兼容模式? 如果不是,请提供一个不是有效 64 位汇编代码的 32 位汇编代码的 ..
发布时间:2022-01-09 19:21:17 其他开发

如果只需要结果的低位部分,哪些 2 的补码整数运算可以在不将输入中的高位归零的情况下使用?

在汇编编程中,想要从不保证其他位为零的寄存器的低位计算某些东西是相当普遍的.在 C 等高级语言中,您只需将输入转换为小尺寸,让编译器决定是否需要分别将每个输入的高位归零,或者是否可以在事实. 这对于 x86-64(又名 AMD64)来说尤其常见,原因有很多1,其中一些存在于其他 ISA 中. 我将使用 64 位 x86 作为示例,但目的是询问/讨论 2 的补码 和一般的无符号二进制算术 ..
发布时间:2022-01-09 18:59:07 其他开发

在x86上将float转换为int的最快方法是什么

在 x86 CPU 上将浮点数转换为 int 的最快方法是什么?对于以下任意组合,最好在 C 或程序集中(可以在 C 中内联): 32/64/80 位浮点数 -> 32/64 位整数 我正在寻找一些比让编译器更快的技术. 解决方案 这取决于您是要截断转换还是舍入转换以及精度.默认情况下,当您从 float 转换为 int 时,C 将执行截断转换.有 FPU 指令可以做到这一点, ..
发布时间:2022-01-09 10:26:35 其他开发

为什么 SSE scalar sqrt(x) 比 rsqrt(x) * x 慢?

我一直在分析我们在英特尔酷睿双核上的一些核心数学,在研究平方根的各种方法时,我发现了一些奇怪的东西:使用 SSE 标量运算,取倒数平方根更快并乘以得到 sqrt,而不是使用本机 sqrt 操作码! 我正在使用类似以下的循环对其进行测试: inline float TestSqrtFunction( float in );无效的测试函数(){#define ARRAYSIZE 4096#de ..
发布时间:2022-01-09 10:11:26 其他开发

使用 32 位“程序文件";msbuild 中的目录

在 64 位版本的 Windows 中,32 位软件安装在“c:\program files (x86)"中.这意味着您不能使用 $(programfiles) 来获取(32 位)软件的路径.所以我需要一个 $(ProgramFiles32) 在我的 MSBuild 项目中克服这个问题.我不想根据运行的操作系统更改项目. 我将发布一个解决方案,但也许有更简单/更好的方法. 解决方案 ..
发布时间:2022-01-08 15:11:04 其他开发

通过将 float 放入 int 变量进行内联 ASM 舍入的优点

我继承了一段非常有趣的代码: inline int round(float a){国际我;__asm {一个拳头我}返回我;} 我的第一个冲动是丢弃它并用 (int)std::round 替换调用(在 C++11 之前,将使用 std::lround 如果它发生在今天),但过了一段时间我开始怀疑它到底是否有一些优点...... 此函数的用例都是 [-100, 100] 中的所有值,因此即 ..
发布时间:2022-01-07 11:41:37 其他开发

MASM/NASM 差异

NASM 和 MASM 汇编器之间的语法差异是什么? 解决方案 NASM 文档的第 2.2 节标题为 MASM 用户快速入门,其中列出了 NASM 和 MASM 之间的重要区别. ..
发布时间:2022-01-06 13:13:41 其他开发