x86相关内容

Windows 8 fat binary (exe for x86 & ARM)

是否有人(这里)知道 Windows 8 是否会有一种胖 exe,可以用 Visual Studio 2012 编译,ARM 和 x86 机器都支持?我猜不是,因为据我所知,您无法创建将执行 32 位或 64 位代码的胖二进制文件(据我所知,唯一可用的解决方案是 32 位,它可以即时创建 64 位可执行文件). 微软扩展 exe 或为 Windows 8 及更高版本创建胖二进制格式似乎会有所 ..
发布时间:2022-01-17 14:17:32 其他开发

任意解引用指针的输出

我按如下方式填充内存: char buf[8] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}; 然后将无符号长指针依次放在前5个字节并输出结果: char *c_ptr;无符号长 *u_ptr;c_ptr = buf;对于 (int i=0;i 当我在我的 x64 平台上执行此代码时,我得到了我的预期: 4433221155443 ..
发布时间:2022-01-17 14:14:18 C/C++开发

由于 cpu 乱序执行或缓存一致性问题,是否需要内存屏障?

我想知道为什么需要内存屏障,我已经阅读了一些关于这个主题的文章. 有人说这是因为 cpu 乱序执行,而 others 说是因为缓存一致性问题导致存储缓冲区和队列失效. 那么,需要内存屏障的真正原因是什么?cpu乱序执行还是缓存一致性问题?或两者?cpu乱序执行和缓存一致性有关系吗?x86和arm有什么区别? 解决方案 当 ISA 的内存排序规则弱于您的算法所需的语义时,您需要屏障来排序 ..
发布时间:2022-01-17 14:10:21 其他开发

是否可以制造支持多个 ISA 的处理器?(例如:ARM + x86)

自 Skylake(?) 架构以来,英特尔一直在内部将 CISC 指令解码为 RISC 指令,而 AMD 自 K5 处理器以来一直在这样做.那么这是否意味着 x86 指令在执行过程中被翻译成一些奇怪的内部 RISC ISA?如果这是正在发生的事情,那么我想知道是否有可能创建一个能够理解(即内部转换为自己的专有指令)x86 和 ARM 指令的处理器.如果可以的话,性能会是怎样的?为什么还没有完成? ..
发布时间:2022-01-17 13:44:00 其他开发

Intel x86 到 ARM 程序集转换

我目前正在学习ARM汇编语言; 为此,我正在尝试将一些 x86 代码(AT&T 语法) 转换为 ARM 汇编 (Intel 语法) 代码. __asm__("movl $0x0804c000, %eax;");__asm__("mov R0,#0x0804c000"); 从这个 document,我了解到在 x86 中的 Chunk 1堆结构从 0x0804c000 开始.但是当我尝试在 ..
发布时间:2022-01-17 13:40:36 其他开发

如何在 Linux 中刷新地址空间区域的 CPU 缓存?

我对仅针对地址空间区域刷新缓存(L1、L2 和 L3)感兴趣,例如从地址 A 到地址 B 的所有缓存条目.在 Linux 中是否有这样做的机制,无论是来自用户还是内核空间? 解决方案 查看此页面以获取 linux 内核中可用的刷新方法列表:https://www.kernel.org/doc/Documentation/cachetlb.txt Linux 下的缓存和 TLB 刷新. ..
发布时间:2022-01-17 13:28:52 服务器开发

是否有任何现代 CPU 缓存字节存储实际上比字存储慢?

这是常见声明 将字节存储到缓存中可能会导致内部读取-修改-写入周期,或者以其他方式损害吞吐量或延迟与存储完整寄存器相比. 但我从未见过任何例子.没有 x86 CPU 是这样的,我认为所有高性能 CPU 也可以直接修改缓存行中的任何字节.一些微控制器或低端 CPU 是否有不同(如果它们有缓存的话)? (我不计算字可寻址机器,或者 Alpha,它是字节可寻址但缺少字节加载/存储指令.我说的 ..
发布时间:2022-01-17 13:23:40 其他开发

寻找 x86 的 16 位 c 编译器

我正在将 uc/OS-II 从 DOS 移植到 x86(实模式).我需要: 生成实模式 16 位 x86 程序集的编译器 将生成的程序集组装成目标文件的汇编器 将目标文件链接在一起并输出可执行文件(原始二进制文件、COFF、PE 或ELF 格式很好) 一个不调用任何DOS服务的标准库(int 21h),只依赖BIOS服务. 我想知道是否有任何工具链可以做到这一点. ..
发布时间:2022-01-17 08:38:16 其他开发

这些年英特尔为什么要改变静态分支预测机制?

从这里我知道英特尔实现了几个静态分支预测这些年的机制: 80486 年龄:始终未采取 Pentium4 时代:Backwards Takes/Forwards Not-Taken Ivy Bridge、Haswell 等较新的 CPU 变得越来越无形,请参阅 Matt G 的实验在这里. 而且英特尔似乎不想再谈论它了,因为我在英特尔文档中找到的最新材料是大约十年前写的. ..

X86 程序集 - 处理 IDIV 指令

我目前正在编写一个简单的 C 编译器,它将 .c 文件作为输入并生成汇编代码(X86、AT&T 语法).一切都很好,但是当我尝试执行 IDIVQ 指令时,我得到了一个浮点异常.这是我的输入: int mymain(int x){诠释d;诠释;d = 3;e = 6/d;返回 e;} 这是我生成的代码: mymain:.LFB1:.cfi_startprocpushq %rbp.cfi_def ..
发布时间:2022-01-17 08:24:53 其他开发

试图理解 gcc 在 main 顶部的复杂堆栈对齐,它复制了返回地址

您好,我已经反汇编了一些我编写的程序 (linux),以便更好地理解它是如何工作的,我注意到 main 函数总是以: lea ecx,[esp+0x4] ;我认为这是为了获取 main 的第一个参数的地址......为什么?和 esp,0xfffffff0 ;???编译器是否试图在 16 个字节上对齐堆栈指针???推 DWORD PTR [ecx-0x4] ;我知道汇编程序正在推动返回地址... ..
发布时间:2022-01-17 08:21:41 服务器开发

SIMD 对 64 位 * 64 位到 128 位的无符号乘法进行签名

我创建了一个使用 SIMD 执行 64 位 * 64 位到 128 位的函数.目前我已经使用 SSE2(实际上是 SSE4.1)实现了它.这意味着它同时做两个 64b*64b 到 128b 的产品.同样的想法可以扩展到 AVX2 或 AVX512,同时提供四个或八个 64b*64 到 128b 产品.我的算法基于 http://www.hackersdelight.org/hdcodetxt/mu ..
发布时间:2022-01-14 14:06:30 其他开发

如何在没有来自 c 库的 printf 的情况下在汇编级编程中打印整数?

谁能告诉我以十进制格式在寄存器中显示值的纯汇编代码?请不要建议使用 printf hack,然后使用 gcc 编译. 说明: 嗯,我对 NASM 进行了一些研究和一些实验,并认为我可以使用 c 库中的 printf 函数来打印一个整数.我通过使用 GCC 编译器编译目标文件来做到这一点,并且一切正常. 但是,我想要实现的是以十进制形式打印存储在任何寄存器中的值. 我做了一些 ..
发布时间:2022-01-14 13:49:10 其他开发

AVX-512 和分支

我对掩蔽在理论上可以对分支做什么感到困惑.假设我有一个 Skylake-SP(哈哈,我希望..),我们忽略了编译器功能,这在理论上是可能的: 如果一个分支条件依赖于一个静态标志,并且所有分支都将一个数组设置为一个计算结果,假设编译器无论如何都不会将其优化为两个单独的循环,它可以向量化吗? 做 i = 1, nx如果 (my_flag .eq. 0) 那么a(i) = b(i) ** 2别的 ..
发布时间:2022-01-14 09:45:42 其他开发

如何检查 x86 程序集中的键状态?

去年 1 月,我将 x86 组装作为一种爱好,因此我可以制作可以在 PCj 和 Tandy 1000 等老式 8086 驱动计算机上运行的游戏,但我发现的书籍并没有确切地教授该特定主题的内容.虽然一些 dos 和 bios 中断可以完成这项工作,但它们远非完美. 我的主要问题是在不停止程序的情况下读取按键的键盘状态.我找到了一些方法,但它们非常有限.INT 21h, AH 0Ch 读取最后按 ..
发布时间:2022-01-13 22:32:59 其他开发

x86 程序集上的保护模式键盘访问

我正在为我正在开发的一个非常基本的内核处理键盘输入,但我完全陷入困境.我似乎无法在网上找到任何可以显示我需要知道的信息的信息. 我的内核现在在保护模式下运行,所以我不能使用实模式键盘例程而不跳转到实模式并返回,这是我试图避免的.我希望能够从保护模式访问我的键盘.有谁知道如何做到这一点?到目前为止,我发现的唯一一件事是它涉及直接使用输入/输出端口与控制器对话,但除此之外,我感到很困惑.当然,这 ..
发布时间:2022-01-13 22:17:05 其他开发

加快浮动转换的速度?

我在 C++ 中的浮点类型转换很短,这对我的代码造成了瓶颈. 代码从一个硬件设备缓冲区转换而来,该缓冲区本身是短路的,这表示来自花哨的光子计数器的输入. 浮点因子= 1.0f/值;for (int i = 0; i 整数destination[i] = value*fact ..
发布时间:2022-01-13 08:13:23 C/C++开发

执行从 x86 程序集编译的程序时出现分段错误?

我是汇编语言的新手,我必须实现一个函数,在我的例子中是 sin(x),它可以从 C 源文件中调用.我必须制作 2 个单独的文件:*.c 和 *.s在 ubuntu 上通过 gcc 编译时一切正常,但是当程序执行时它给我错误“分段错误"... 要编译,我输入: gcc -c -o sinc.o sinx.c -g3gcc -c -o sins.o sinx.s -g3gcc -o sinx ..
发布时间:2022-01-12 16:33:40 其他开发

mov 0, %eax 上带有 x86 程序集的 Segfault

我正在尝试组装一小段 x86 代码.我在一台 32 位机器上,我编写了以下代码.它应该只是将值添加到 eax 然后返回.我意识到不会有任何输出.当我使用 编译它时 gcc main.S -o main 它编译没有错误.但是当我运行它时会出现段错误(gdb 声称它在第一条 movl 指令上出现段错误).main.S 中包含以下代码.我做错了什么? .text.globl 主要主要的:推% ..
发布时间:2022-01-12 16:24:56 其他开发

在 .DATA 部分中将 reg 存储到 var 时出现段错误

所以我正在尝试使用 x86 编写一些代码,但我似乎无法让它将寄存器的内容移动到内存中的某个位置. 代码就是这样 全局主要部分.数据var_i:DD 0部分.文本主要的:按双字 4流行EAXmov [var_i], EAX移动 EAX, 0ret 我在代码上使用 nasm 和 gcc.我遇到的问题是,每当我尝试移动到内存中的位置时,它都会出现段错误 解决方案 你使用什么样的系统/对 ..
发布时间:2022-01-12 16:04:29 其他开发