x86-64相关内容

如何让这个简单的程序集运行?

这是我第一次尝试用汇编编程.我使用的是 64 位 Mac 操作系统.我也在使用 NASM.我已经四处寻找解决方案,但找不到任何适用于我的机器的东西. 谁能帮我解决这个问题?这是代码和错误,谢谢! hello.asm 全局开始部分 .text开始:mov rax, 1mov rdi, 1mov rsi, 消息mov rdx, 13系统调用移动 eax, 60xor rdi, rdi系 ..
发布时间:2022-01-11 15:40:33 其他开发

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

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

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

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

JRE 32 位与 64 位

我已经使用 Java 有一段时间了,我设置新开发机器的典型习惯要求从 Oracle 的站点下载和安装最新的 JDK. 今天提出了一个不寻常的问题,我使用 32 位或 64 位 JRE 包有关系吗? 回想起来,我之前已经安装了这两个版本,并且我的普通工具链愉快地插入 (Eclipse).在我的日常编程中,我不记得曾经因为我使用 64 位 JRE(或在这方面针对 64 位 JRE)而不得不 ..
发布时间:2022-01-06 13:13:27 Java开发

R 在 RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP 中代表什么?

x86 汇编语言不得不改变,因为 x86 处理器架构已经从 8 位变为 16 位,再到 32 位和现在的 64 位. 我知道在 32 位汇编寄存器名称(EAX、EBX 等)中,每个名称的前缀 E 代表 Extended 表示寄存器的 32 位形式而不是 16 位形式(AX、BX 等).). 这些寄存器名称的 R 前缀在 64 位中代表什么? 解决方案 我认为它只是 R 代表“寄 ..
发布时间:2022-01-06 13:13:01 其他开发

位置无关代码的区别:x86 vs x86-64

我最近正在构建一个针对 x86-64 架构的共享库 (ELF),如下所示: g++ -o binary.so -shared --no-undefined ... -lfoo -lbar 由于以下错误而失败: 重新定位R_X86_64_32针对`a local symbol'不能在制作共享对象时使用;用 -fPIC 重新编译 当然,这意味着我需要将其重新构建为与位置无关的代码,因此 ..
发布时间:2022-01-06 13:12:33 服务器开发

对于 .bss 中的符号和 .data 中的符号,gdb 的行为有所不同

我最近开始使用 YASM 为 Intel x86-64 架构学习汇编语言.在解决一本书(Ray Seyfarth 着)中建议的一项任务时,我遇到了以下问题: 当我将一些字符放入 .bss 部分的缓冲区中时,我在 gdb 中调试它时仍然看到一个空字符串.将字符放入 .data 部分的缓冲区中会在 gdb 中按预期显示. segment .bss结果 resb 75缓冲恢复 100使用请求 1 ..
发布时间:2022-01-06 13:08:48 其他开发

将 _mm_shuffle_epi32 转换为 C 表达式以进行排列?

我正在将 SSE2 移植到 NEON.该端口处于早期阶段,并且产生不正确的结果.结果不正确的部分原因是 _mm_shuffle_epi32 和我选择的 NEON 指令. _mm_shuffle_epi32 的文档来自 微软.Intel 文档更好,但我不清楚一些伪代码在做什么. SELECT4(src, control){案例(控制[1:0])0: tmp[31:0] := src[31:0 ..
发布时间:2022-01-06 13:08:15 其他开发

由于 Spectre Mitigation,Hardware Lock Elision 是否已经一去不复返了?

由于 Spectre 缓解而对所有当前 CPU 禁用硬件锁定消除是否正确,并且任何尝试使用 HLE 内在函数/指令进行互斥都会导致通常的互斥? 未来是否有可能不会有类似 HLE 互斥的东西来避免像 Spectre 这样的漏洞? 解决方案 因此,禁用 TSX 可能不是为了缓解 Spectre,而是作为另一个漏洞缓解的一部分,TSX 异步中止 (TAA). 这是英特尔网站上的相关文 ..
发布时间:2022-01-06 13:07:04 其他开发

i386 与 AMD64 ABI 差异

在哪里可以找到 i386 和 i386 之间数据类型的所有差异?AMD64 应用程序二进制接口 (ABI) ? 我知道在 i386 ABI & 中 long 类型是 32 位的64 位 AMD64.这是正确的吗? 解决方案 我建议你下载 Dr Agner Fog 的优化手册.他有一本专门介绍 ABI 及其差异的手册. 对于 32 位模式和 64 位模式之间指令集的差异,Inte ..
发布时间:2022-01-06 13:06:54 其他开发

什么特别将 x86 缓存行标记为脏 - 任何写入,或者是否需要显式更改?

这个问题专门针对现代 x86-64 缓存一致性架构 - 我很欣赏其他 CPU 上的答案可能会有所不同. 如果我写入内存,MESI 协议要求先将缓存行读入缓存,然后在缓存中修改(将值写入缓存行,然后将其标记为脏).在较旧的 write-though 微架构中,这将触发缓存线被刷新,在回写下,被刷新的缓存线可能会延迟一段时间,并且在两种机制下都可能发生一些写组合(更可能是写回).而且我知道这如何 ..
发布时间:2022-01-06 13:02:43 其他开发

为什么 Linux/gnu 链接器选择地址 0x400000?

我正在 Linux x86_64 上试验 ELF 可执行文件和 gnu 工具链: 我已经链接并(手动)剥离了一个“Hello World"测试: .global _start.文本_开始:移动 $1, %rax... 转换为 267 字节的 ELF64 可执行文件... 0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF………… ..
发布时间:2022-01-06 13:01:30 服务器开发

为什么 RDTSC 不是序列化指令?

关于 RDTSC 指令的英特尔手册警告说乱序执行RDTSC 实际执行时可以改变,所以他们建议在它前面插入一条 CPUID 指令,因为 CPUID 会序列化指令流(CPUID 永远不会乱序执行).我的问题很简单:如果他们有能力使指令序列化,他们为什么不进行 RDTSC 序列化?它的全部意义似乎是获得周期准确的计时.是否存在您不想想在它前面加上序列化指令的情况? 较新的 Intel CPU 有一 ..
发布时间:2022-01-06 13:01:20 其他开发

现代硬件上的浮点与整数计算

我正在用 C++ 做一些性能关键的工作,我们目前正在使用整数计算来解决固有的浮点问题,因为“它更快".这会导致一大堆烦人的问题,并添加了很多烦人的代码. 现在,我记得读过关于浮点计算在大约 386 天左右如此缓慢的文章,我相信 (IIRC) 有一个可选的协处理器.但是现在可以肯定的是,随着 CPU 的复杂性和功能呈指数级增长,如果进行浮点计算或整数计算,它的“速度"没有区别吗?特别是因为与导 ..
发布时间:2022-01-06 12:18:49 C/C++开发

mov %esi, %esi 在 x86-64 上是否为空操作?

我对 Linux 内核头文件之一中的注释感到有些困惑,arch/x86/include/asm/nops.h.它指出 以下指令不是 64 位模式下的 nops,对于 64 位模式,请改用 K8 或 P6 nops movl %esi,%esi leal 0x00(%esi),%esi 我猜作者在那里暗示了机器指令(分别是“89 F6"和“8D 76 00" ..
发布时间:2022-01-04 22:18:21 其他开发

linux x86 64 中 MSR_GS_BASE 的详细信息

我试图找出 Linux 内核中 MACRO current 的详细信息.当前的最终汇编代码为: movq %%gs:0xb000,%0 上面的代码可以工作!但是当我打印 %%gs 时,它的值为 0,所以 %%gs 指向 GDT NULL 的第一项!!??它是如何工作的? mov %%gs, %0 相反,gs 的基数在 MSR_GS_BASE 中,当前可以像这样替换: /*0xb000 是 ..
发布时间:2022-01-04 22:12:18 其他开发