assembly 相关问题

汇编语言(asm)编程问题。请务必使用您正在使用的处理器和/或指令集以及汇编程序。警告:对于.NET程序集,请改用标签[.net-assembly]。对于Java ASM,请改用标签[java-bytecode-asm]。

有没有办法单独输出单个函数的汇编?

我正在学习如何将 C 文件编译为机器代码。我知道我可以使用 -S 标志从 gcc 生成程序集,但是它也会生成很多与 main() 和 printf() 相关的代码,而我不是

回答 2 投票 0

x86-64 上的 C++:结构/类何时在寄存器中传递和返回?

假设 Linux 上的 x86-64 ABI,在 C++ 中的什么条件下,结构体会传递给寄存器中的函数,还是传递给堆栈上的函数?在什么条件下它们会返回到寄存器中?答案是吗

回答 2 投票 0

尝试对指令进行空操作

是否可以使用 GNU 工具(gcc、binutils 等)将所有出现的汇编指令修改为无操作?具体来说,带有 -pg 选项的 gcc 生成以下程序集 (ARM): ...

回答 2 投票 0

堆栈指针在STM32F103上如何工作

我最近对 MCU 的链接器脚本和汇编编码感兴趣。我刚刚发现我们在reset_handler中做的第一件事是设置堆栈指针寄存器(sp)。 我的问题...

回答 2 投票 0

编写 NASM 汇编程序文件的正确格式和语法

在 NASM(Netwide Assembler)中编写汇编代码的正确格式是什么?当尝试在 NASM 中运行 MASM32 (Microsoft Assembler) 文件时,NASM 似乎无法识别某些 M...

回答 1 投票 0

为什么我的 NASM 代码在将 db 字节变量打印为 int 时打印出一个很大的值?

我正在用 nasm 编码,但我不明白发生了什么。 Linux 发行版是 Ubuntu 16 64 位,但 NASM 以 32 位运行。 预期输出-->“数字是:2” 实际输出--&...

回答 1 投票 0

为什么我的 NASM 代码打印与预期的不同

我正在用 nasm 编码,但我不明白发生了什么。 Linux 发行版是 Ubuntu 16 64 位,但 NASM 以 32 位运行。 预期输出-->“数字是:2” 实际输出--&...

回答 1 投票 0

获取操作码的简单方法

我知道如何从可执行文件中获取操作码和相应的汇编语法;然而,有没有一种简单的方法可以单独获取特定汇编指令的操作码,而无需编写

回答 5 投票 0

为什么我的 NASM 代码打印与预期的不同

我正在用 nasm 编码,但我不明白发生了什么。 linux 发行版是 ubuntu 16 64 位,但 NASM 运行在 32 位 预期输出-->“数字是:2” 实际输出 --> &

回答 1 投票 0

编写汇编程序:处理 x64 REX 和 VEX 编码的干净高效的方法?

我正在开发一个 x64 汇编器(只有 64 位,至少现在是这样),而且我已经取得了相当大的进展(我支持几乎所有指令,包括大多数扩展),但我有一些相当...

回答 1 投票 0

如何更新地址寄存器?

我正在使用 Easy68k 制作一个包含 while 循环的简单程序。 假设寄存器 A0 指向我的数据,即字。 为什么这不起作用? 移动.W (A0) , D3 移动.W (A0)+...

回答 4 投票 0

x86-64 上可以使用 64 位直接内存操作数吗?

我想知道是否可以对如下指令进行编码: 添加 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 位常量。

回答 2 投票 0

C++ 中 NtWaitForSingleObject 的神秘行为 - 在没有 std::cout 的情况下返回无效句柄错误

我的程序遇到了一个奇怪的问题,该程序在循环中使用 NtWaitForSingleObject 和 NtDelayExecution 。问题是函数 NtWaitForSingleObject 偶尔会返回错误

回答 1 投票 0

在 ARMv7 上编译汇编代码:CLang 与 GNU

我正在尝试在 ARMv7 系统上构建 x265,并且在其中一个汇编源中出现以下错误: /usr/bin/c++ -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm -DPIC -c .../source/comm...

回答 1 投票 0

汇编代码、printf 和在堆栈上分配空间[重复]

我正在为 Pentium 编写 64 位汇编代码。我正在使用 Microsoft Visual C/C++ 和 MASM。在汇编代码中,我编写了以下代码片段来调用 printf: 推送接收 噗...

回答 1 投票 0

如何寻址数组中的字大小元素以交换和显示值?

我需要将手动输入的数组元素逐个写入屏幕,但是当我尝试写入第一个数组元素时,我在屏幕上得到5的输出。 我还需要兑换第五个...

回答 1 投票 0

如何对字大小的数组中的元素进行寻址以交换和显示值?

我需要将手动输入的数组元素逐个写入屏幕,但是当我尝试写入第一个数组元素时,我在屏幕上得到5的输出。 我还需要兑换第五个...

回答 1 投票 0

汇编中的矩阵转置

我必须在汇编 x86 32 位中转置一个矩阵,将结果存储在另一个矩阵中,然后将其打印在屏幕上。 但我没有得到正确的结果,我也不明白为什么。我想是的

回答 1 投票 0

将字节转换为具有正确地址的操作码的简单方法

我只是找到二进制签名,并且我得到了搜索签名的正确地址。 但是,我想从那里获取地址并在我的程序中使用它。 例子。 (在 C8092 中找到签名) 二进制.exe+...

回答 1 投票 0

comis / vucomis 中的“i”代表什么?

目前我正在阅读CSAPP 3d版,我发现说明有点冗长(在我看来)就像vucommiss一样,所以我搜索了说明的全名以帮助记忆。 我找到了

回答 1 投票 0

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