Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
将 C 代码转换为 x86-64 汇编
我正在尝试将 C 代码转换为 x86 64 我的目标是反转链表 传入的两个参数是 head ptr 和 offset to 以获取指针字段的地址 即指向列表中下一个节点的指针 据我了解 head ptr是通过rdi寄存器传入的 offset
c
Assembly
x8664
inlineassembly
查找哪些页面不再与写入时复制共享
假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
c
Linux
x8664
copyonwrite
pagetables
SSE:跨页边界的未对齐加载和存储
我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
c
Linux
x8664
SSE
memoryalignment
movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?
我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
Assembly
x86
64bit
x8664
为什么X86中没有NAND、NOR和XNOR指令?
它们是您可以在计算机上执行的最简单的 指令 之一 它们是我亲自实施的第一个指令 执行 NOT AND x y 会使执行时间和依赖链长度和代码大小加倍 BMI1 引入了 andnot 这是一个有意义的补充 是一个独特的操作 为什么不是这个问题
x86
x8664
cpuarchitecture
instructions
instructionset
为什么 printf 使用浮点和整数格式说明符打印随机值
我在64位机器上写了一个简单的代码 int main printf d 2 443 所以 这就是编译器的行为方式 它将识别第二个参数为双精度型 因此它将在堆栈上压入 8 个字节 或者可能只是在调用之间使用寄存器来访问变量 d需要 4 字节整
c
floatingpoint
x8664
长多字节 NOP:通常理解的宏或其他符号
x86 和 x86 64 处理器不仅具有单字节 这不是什么大秘密NOP指令 还包括各种类型的多字节类 NOP 指令 这些是我设法找到的 AMD 推荐 参考 AMD 系列 15h 处理器的 AMD 软件优化指南 文档 47414 http s
Assembly
x8664
namingconventions
disassembly
noop
错误 LNK2019:函数 main 中引用的外部符号无法解析
我正在尝试在 C 中运行我的简单汇编代码 我只有两个文件 cpp 文件和 asm 文件 编译时出现错误 见下文 如果有人可以提供帮助 我将不胜感激 这是我的 main cpp 文件 include
c
visualstudio2012
Assembly
x8664
在 x86 汇编中将 64 位常量移至内存
我正在使用 Intel x64 程序集 NASM 编译器 尝试将 0x4000000000000000 常量移至内存 该常量在 ieee 754 标准双精度中应等于 2 0 我正在使用的代码是 define two 0x4000000000
Assembly
x86
64bit
nasm
x8664
在 x86 程序集中存储大量布尔值的最佳方法是什么?
最近我一直在处理充满布尔值的大型数组 目前 我将它们存储在 bss部分有一个 space指令 它允许我创建字节数组 但是 由于我只需要存储布尔值 因此我希望从数组中逐位读取和写入数据 目前 我能想到的最好方法是有一个 space指令所需存储
Assembly
x86
Boolean
x8664
bitarray
为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?
我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
c
Assembly
x8664
compileroptimization
llvmcodegen
这个反斜杠在这段汇编代码中起什么作用?
我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
gcc
Assembly
Linuxkernel
x8664
gnuassembler
如何将输入传递到扩展汇编中?
考虑这段代码 来自我的先前的问题 https stackoverflow com questions 37955538 segfault on movq instruction int main asm movq 100000000 rcx
c
gcc
x8664
inlineassembly
att
阴影空间示例
EDIT 我接受了下面的答案 并添加了我自己的代码的最终修订版 希望它向人们展示影子空间分配的实际示例 而不是更多的文字 编辑 2 我还设法在 YouTube 视频 所有内容 的注释中找到了一个调用约定 PDF 的链接 其中有一些关于 Li
Windows
Assembly
x8664
nasm
stackmemory
为什么我的空循环在 Intel Skylake CPU 上作为函数调用时运行速度是原来的两倍?
我正在运行一些测试来比较 C 和 Java 并遇到了一些有趣的事情 在 main 调用的函数中 而不是在 main 本身中 运行具有优化级别 1 O1 的完全相同的基准代码 导致性能大约翻倍 我正在打印 test t 的大小 以毫无疑问地验
c
performance
Assembly
x8664
cpuarchitecture
从 NASM 调用 C 函数 _printf 会导致分段错误
我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
c
Assembly
x8664
nasm
macho
为什么在强度降低乘法和循环进位加法之后,这段代码的执行速度会变慢?
我正在读书阿格纳 雾 https en wikipedia org wiki Agner Fog s 优化手册 https en wikipedia org wiki Agner Fog Optimization 我遇到了这个例子 doub
Assembly
Optimization
x8664
cpuarchitecture
SIMD
页面错误陷阱的成本
我有一个应用程序 它定期 每 1 或 2 秒后 通过分叉自身来获取检查点 因此 检查点是原始进程的一个分支 它一直保持空闲状态 直到原始进程发生某些错误时被要求启动 现在我的问题是fork的写时复制机制的成本有多大 每当原始进程写入内存页面
c
Linux
memorymanagement
x8664
在 x86-64 CPU 上通过交叉修改代码重现意外行为
Question 对于可能在 x86 或 x86 x64 系统上触发意外行为的交叉修改代码有哪些想法 在这些系统中 交叉修改代码中的所有操作均已正确完成 但在执行处理器之前执行序列化指令除外修改代码 如下所述 我有一个 Core 2 Duo
Assembly
concurrency
x86
threadsafety
x8664
尝试使用 x86 程序集 GNU GAS 在数组索引处赋值时出现错误
我在用x86GNU 与 GCC 的程序集 并尝试实现相当于以下内容的程序集c c int x 10 x 0 5 但是 当我尝试运行 使用命令 a out 我的汇编代码如下 第一次编译后gcc filename s 错误Segmentatio
MacOS
Assembly
x8664
gnuassembler
«
1
2
3
4
5
6
...23
»