汇编语言(asm)编程问题。请务必使用您正在使用的处理器和/或指令集以及汇编程序。警告:对于.NET程序集,请改用标签[.net-assembly]。对于Java ASM,请改用标签[java-bytecode-asm]。
我正在学习如何将 C 文件编译为机器代码。我知道我可以使用 -S 标志从 gcc 生成程序集,但是它也会生成很多与 main() 和 printf() 相关的代码,而我不是
x86-64 上的 C++:结构/类何时在寄存器中传递和返回?
假设 Linux 上的 x86-64 ABI,在 C++ 中的什么条件下,结构体会传递给寄存器中的函数,还是传递给堆栈上的函数?在什么条件下它们会返回到寄存器中?答案是吗
是否可以使用 GNU 工具(gcc、binutils 等)将所有出现的汇编指令修改为无操作?具体来说,带有 -pg 选项的 gcc 生成以下程序集 (ARM): ...
我最近对 MCU 的链接器脚本和汇编编码感兴趣。我刚刚发现我们在reset_handler中做的第一件事是设置堆栈指针寄存器(sp)。 我的问题...
在 NASM(Netwide Assembler)中编写汇编代码的正确格式是什么?当尝试在 NASM 中运行 MASM32 (Microsoft Assembler) 文件时,NASM 似乎无法识别某些 M...
为什么我的 NASM 代码在将 db 字节变量打印为 int 时打印出一个很大的值?
我正在用 nasm 编码,但我不明白发生了什么。 Linux 发行版是 Ubuntu 16 64 位,但 NASM 以 32 位运行。 预期输出-->“数字是:2” 实际输出--&...
我正在用 nasm 编码,但我不明白发生了什么。 Linux 发行版是 Ubuntu 16 64 位,但 NASM 以 32 位运行。 预期输出-->“数字是:2” 实际输出--&...
我正在用 nasm 编码,但我不明白发生了什么。 linux 发行版是 ubuntu 16 64 位,但 NASM 运行在 32 位 预期输出-->“数字是:2” 实际输出 --> &
编写汇编程序:处理 x64 REX 和 VEX 编码的干净高效的方法?
我正在开发一个 x64 汇编器(只有 64 位,至少现在是这样),而且我已经取得了相当大的进展(我支持几乎所有指令,包括大多数扩展),但我有一些相当...
我正在使用 Easy68k 制作一个包含 while 循环的简单程序。 假设寄存器 A0 指向我的数据,即字。 为什么这不起作用? 移动.W (A0) , D3 移动.W (A0)+...
我想知道是否可以对如下指令进行编码: 添加 rax,[地址] 其中 是指向 64 位值的完整 64 位地址。 NASM 似乎只是截断了地址... 我想知道是否可以对如下指令进行编码: 添加rax,[地址] 其中 是指向 64 位值的完整 64 位地址。 NASM 似乎只是截断地址并将其编码为 32 位地址。唯一有效的 64 位寻址(使用直接地址)形式是: mov rax,[qword 地址] 由 NASM 使用 REX.W=1 和 MOV 的特殊操作码进行直接寻址编码。将 REX.W 与 add 指令一起使用只会使其将目标地址解释为包含 64 位值,但不允许指定 64 位地址。但我很好奇是否还有其他方法。 (顺便说一句,由于这个问题,我现在使用 RIP 相对寻址)。 谁能确认直接 64 位寻址形式是不可能的? 除某些特殊情况外,amd64架构没有64位位移的寻址模式。相反,使用 rip 相对寻址,如果您的二进制文件大小小于 2 GB,这应该没问题。 请记住,64 位模式是 AMD 的天才之作。 1980 年,英特尔团队坚持认为 INC REG16(2 字节指令)太长,并浪费了 256 个首页操作码中的 16 个来用 1 字节创建别名。 AMD 将其重新用作具有 4 位可用的前缀,在编译器愿意节省一个字节的极少数情况下浪费了一个字节。 对于 64 位操作,第一位表示 1。 剩下的三位用于指定是否是 32 位或 64 位寄存器 故意的。幸运的是,sib 中最复杂的指令有一个主寄存器、一个指针和一个索引,总共三个。 这些被用作开关,因此简单而友善。 在所有其他方面,i386/pentium 指令集均未更改。 所以这回答了你的问题,没有偏离 32 位,没有 64 位地址。批准的答案解释了如何在需要 64 位值的情况下解释 32 位常量。
C++ 中 NtWaitForSingleObject 的神秘行为 - 在没有 std::cout 的情况下返回无效句柄错误
我的程序遇到了一个奇怪的问题,该程序在循环中使用 NtWaitForSingleObject 和 NtDelayExecution 。问题是函数 NtWaitForSingleObject 偶尔会返回错误
我正在尝试在 ARMv7 系统上构建 x265,并且在其中一个汇编源中出现以下错误: /usr/bin/c++ -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm -DPIC -c .../source/comm...
我正在为 Pentium 编写 64 位汇编代码。我正在使用 Microsoft Visual C/C++ 和 MASM。在汇编代码中,我编写了以下代码片段来调用 printf: 推送接收 噗...
我需要将手动输入的数组元素逐个写入屏幕,但是当我尝试写入第一个数组元素时,我在屏幕上得到5的输出。 我还需要兑换第五个...
我需要将手动输入的数组元素逐个写入屏幕,但是当我尝试写入第一个数组元素时,我在屏幕上得到5的输出。 我还需要兑换第五个...
我必须在汇编 x86 32 位中转置一个矩阵,将结果存储在另一个矩阵中,然后将其打印在屏幕上。 但我没有得到正确的结果,我也不明白为什么。我想是的
我只是找到二进制签名,并且我得到了搜索签名的正确地址。 但是,我想从那里获取地址并在我的程序中使用它。 例子。 (在 C8092 中找到签名) 二进制.exe+...
目前我正在阅读CSAPP 3d版,我发现说明有点冗长(在我看来)就像vucommiss一样,所以我搜索了说明的全名以帮助记忆。 我找到了