x86-64 相关问题

x86-64是Intel x86架构的64位扩展

为什么 GCC 和 Clang 会在两个分支上弹出而不是只弹出一次?

GCC 和 Clang 都可以编译 布尔预测(); 无效 f(); 无效 g(); 无效 h() { 如果(预测()){ F(); } 别的 { G(); } } 到一些变化 # Clang -Os 输出。 -O3是一样的 哈...

回答 1 投票 0

汇编器(masm 64)错误致命错误LNK1104

你能告诉我如何使这段代码能够看到C:驱动器并正常工作吗? 包括 \masm64\include64\masm64rt.inc 。数据 BS 设备 128 Fname BYTE "C:\",0 ; ms1 db“可用空间...

回答 1 投票 0

在机器代码中打印字符串时出现分段错误

我正在编写一个机器代码程序,用于在 64 位 Linux 中将字符串打印到终端。这是我的代码: 00000000: 7f45 4c46 0201 0103 0000 0000 0000 0000 .ELF............ 00000010: 0200 3e00 0100 0...

回答 1 投票 0

记住 x86-64 System V arg 寄存器顺序的最佳方法是什么?

我经常忘记系统调用中每个参数需要使用的寄存器,每次我忘记时我都会访问这个问题。 整数/指针参数到 x86_64 用户空间函数的正确顺序...

回答 2 投票 0

如何确保内存分配在某个地址附近?

我正在为 x86_64 编写一个 JIT 重新编译器,有时发出的代码需要从编译的二进制文件中调用函数。 由于 ASLR,我的程序的 .text 段被放置在某个随机地址...

回答 1 投票 0

组装检查三个数中最大的一个

我现在正在学习汇编,我有一个很大的问题需要解决。 (顺便说一句,我使用 x86_64 nasm 程序集) 到目前为止,我已经做到了这一点 .bss 节 结果:resb 10 .data 节 num1: 数据库'22' ...

回答 2 投票 0

进行多平台交叉编译Docker构建时安装正确的arm64包

我使用Linux构建了一个多平台Docker镜像,并通过piprequirements.xt文件安装了numpy。镜像构建良好,容器在 Windows/Linux 上运行良好,但在 M1 mac 上运行时

回答 1 投票 0

CPUID:为什么某些功能必须将 MISC_ENABLE.LCMV 设置为 0?可以暂时覆盖吗?

我正在尝试使用CPUID,但有一些附加条件。根据 sandpile.org 的 CPUID 页面,CPUID 标准函数 0000_0004h 及以上仅在设置 MISC_ENABLE.LCMV 标志时才起作用...

回答 2 投票 0

如何在64位应用程序中从反汇编代码中获取对象?

我有可以在内存区域中找到字节序列的模式。 0x74、0x26、0x48、0x8B、0x05、0、0、0、0、0x48、0x8D、0x0D、0、0、0、0 其中0——可以用任何字节填充。 效果很好。

回答 1 投票 0

如何在x86-64位应用程序中从反汇编代码中获取对象?

我有可以在内存区域中找到字节序列的模式。 0x74、0x26、0x48、0x8B、0x05、0、0、0、0、0x48、0x8D、0x0D、0、0、0、0 其中0——可以用任何字节填充。 效果很好。

回答 1 投票 0

Windows 64 位有 64 位版本的 Windows API 吗?

旧的32位Windows提供了32位Windows API,其中大多数都有'WINAPI'的调用约定,这是一个从__stdcall定义的宏。 现在64位了,调用约定已经统一到Mic了...

回答 1 投票 0

x86-64 / Windows 下正确的上下文切换

我正在为 x86-64 实现我自己的光纤库。其部分原因是缺乏跨平台的标准上下文切换(GCC/Linux 有 makecontext,它将 void *s 作为可变参数,而 Win...

回答 1 投票 0

ACPI ASL/AML:使用 linux 驱动程序获取 GPIO 和 LED

我的基于 x86 的系统中有一个 GPIO 扩展器 (PCF8574),它连接到 SMBus。 GPIO0-3用作GPIO。 GPIO4-7 用于控制 LED。 为了让它发挥作用,并希望以后能进入

回答 1 投票 0

局部变量从 8 字节指令长度过渡到 11 字节指令长度

注意这些C++局部变量指令长度是红框中的8个字节 48 c7 45 f8 00 00 00 00 ... 但是,绿框中的指令长度为 11 字节 48 c7 85 78 ff ff ...

回答 1 投票 0

x86 - 来源之间不合理的差异

我正在学习 x86 程序集上的系统调用(例如:打开、读取、写入)。 我在互联网上看到了一些例子,比如这样、这样、这样,每个系统调用使用不同的系统调用号......

回答 1 投票 0

最小的 64 位 MASM GUI 应用程序无法正常工作

我尝试在汇编中制作一个最小的 64 位 Windows GUI 程序(!)。我使用了 MASM 编译器 (ml64.exe) 和 MASM64 包含文件 (https://masm32.com/board/index.php?topic=10052.0)。我这样做哦...

回答 1 投票 0

QEMU 中的 MS-DOS 在 GDB 中运行 while 循环后中断

使用 qemu 使用命令 qemu-system-i386 -fda ./images/disk01.img 运行 MS-DOS 3.20 似乎工作正常。附加 GDB(使用命令 qemu-system-i386 -fda ./images/disk01.img -S -s for qemu...

回答 1 投票 0

导致该程序存储延迟的原因是什么?

给出以下 C 程序(MSVC 不会为我优化“工作”,对于其他编译器,您可能需要添加 asm 语句): #包括 #包括 给出以下 C 程序(MSVC 不会为我优化“工作”,对于其他编译器,您可能需要添加 asm 语句): #include <inttypes.h> #include <stdlib.h> #define SIZE 10000 typedef struct { int32_t a, b, c; } Struct; void do_work(Struct* data) { int32_t* a = malloc(sizeof(int32_t) * SIZE), * b = malloc(sizeof(int32_t) * SIZE), * c = malloc(sizeof(int32_t) * SIZE); int32_t* a_ptr = a, * b_ptr = b, * c_ptr = c; for (size_t i = 0; i < SIZE; i++, a_ptr++, b_ptr++, c_ptr++, data++) { *a_ptr = data->a; *b_ptr = data->b; *c_ptr = data->c; } free(a); free(b); free(c); } int main() { Struct* data = malloc(sizeof(Struct) * SIZE); for (size_t i = 0; i < SIZE; i++) { data[i].a = i; data[i].b = i; data[i].c = i; } for (int i = 0; i < 500000; i++) { do_work(data); } free(data); } (我在 Rust 中有一个类似的程序,具有相同的结论)。 Intel VTune 报告称,该程序有 63.1% 的内存限制和 52.4% 的存储限制,存储延迟为 26%。它建议搜索虚假共享,但我不明白这里怎么可能有虚假共享。没有并发性,所有数据都由一个核心拥有,访问模式应该很容易预测和预取。我不明白为什么 CPU 需要在这里的商店中停顿。 我认为也许三个分配的地址的低位和高位是相同的,这导致它们被映射到相同的缓存线,但我记得读到现代CPU不只是删除一些位来分配一个缓存行但可以进行更复杂的计算。 另一种想法是,也许在分配被释放后,CPU 仍然忙于刷新存储,并且在下一次运行中,分配器为它们分配了相同的地址(或接近的地址),这给 CPU 带来了问题,因为它已经在存储新数据之前等待。所以我尝试不释放分配,但这导致代码速度慢得多。 我使用的是 Windows 11、笔记本电脑 Intel Core i9-13900HX、32 个逻辑核心、8 个性能核心和 16 个高效核心。 最有可能是 int32_t * SIZE 调用中的 malloc。如果您使用像 SIZE << 2 这样的位移位,您的代码应该更快、更高效。

回答 1 投票 0

如何将x86汇编中的UP(方向)标志更改为1?

我想将标志 UP 更改为 1,现在它是 UP = 0。我正在使用 Visual Studio 64 位程序集。 (英特尔称之为“方向标志”,DF)。 我试过这个: 。数据 源数据库“你好,世界!”,0

回答 1 投票 0

为什么 MSVC 从不为成员函数返回 RAX 中的结构体?

我在 MSVC 代码生成中偶然发现了一个奇怪的现象,涉及用作返回值的结构。考虑以下代码(此处为现场演示): 结构结果 { uint64_t 值; }; 结果

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.