11得票3回答
如何让GNU汇编器使用斜杠/作为注释符号?

这确实是我的一个愚蠢怪癖,但我无法忍受GNU AS用于插入注释的方式。我太习惯Sun的方式(大多数UNIX汇编器使用相同方式),即使用一个简单的斜杠“/”来注释掉代码直到行末。 你知道有什么方法可以实现我的小小愿望吗?

11得票2回答
为什么GCC在减法运算中会发出"lea"指令而不是"sub"指令?

我在查看由反汇编一些C程序生成的一些汇编代码,我对其中一种优化感到困惑,因为我经常看到这个优化。 当我没有开启GCC编译器的任何优化时,它使用subl指令进行减法运算,但是当我开启了优化(具体来说是-O3),编译器会使用leal指令代替减法,以下是一个示例: 没有开启优化:83 e8 01 ...

10得票2回答
如何将一个C语言目标文件与一个汇编语言目标文件链接起来?

我在链接两个目标文件时遇到了问题,其中一个是由汇编语言源文件生成的,另一个是由C语言源文件生成的。C语言源代码://main2.c extern int strlength(char *); int main(){ char * test = "hello"; int num ...

10得票2回答
如何在C程序内部或使用inline汇编获取C函数的大小?

假设我有一个如下的函数: # cat 003.c int foo(int a, int b) { return a+b; } 编译方式如下: gcc -S 003.c 获取以下汇编结果: .file "003.c" .text .globl f...

10得票2回答
如何将GNU GAS宏参数与其他标记连接起来形成单个标签?

我希望在汇编函数中使用gas宏动态创建一组标签。我想做的事情如下所示: ``` .macro set_up_jumptab_entry prefix, from=0, to=10 .quad \prefix_\item .if \to-\from set_up_...

10得票5回答
“movl $0x2d, 0x4(%esp)”中的“0x4”是什么作用?

我正在研究由GCC生成的汇编代码,但我不理解:movl $0x2d, 0x4(%esp) 在第二个操作数中,0x4代表什么?偏移地址吗?而寄存器EAX的用途是什么?

10得票2回答
指令mov %edi和mov %rsi是做什么的?

我写了一个基本的 C 程序,定义了一个整型变量 x,将其设为零并返回该变量的值:#include <stdio.h> int main(int argc, char **argv) { int x; x = 0; return x; } 当我使用objdu...

10得票3回答
汇编中标签和函数的区别是什么?

我一直在通过AT&T语法跟随Youtube上的汇编教程。我刚学会了使用.type指令声明函数(如果这里使用正确的术语的话),例如: .type MyFunction, @function 现在我可以像这样定义我的函数: MyFunction: <code here...

10得票5回答
GCC汇编优化 - 为什么它们是等价的?

我正在尝试以基础水平了解汇编语言的工作方式,因此我一直在玩弄gcc编译的-S输出。我编写了一个简单的程序,定义了两个字节并返回它们的和。整个程序如下:int main(void) { char A = 5; char B = 10; return A + B; } 当我不使用任何优...

9得票1回答
在GNU as .intel_syntax中区分内存和常量

我有一条使用Intel语法(使用gas作为我的汇编器)编写的指令,如下所示: mov rdx, msg_size ... msg: .ascii "Hello, world!\n" .set msg_size, . - msg 但是那个mov指令被汇编成了mov 0xe,%rd...