问题标签 [att]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4041 浏览

assembly - 汇编(AT&T 32 位)scanf 问题

我想在汇编中编写以下 C 代码:

首先,我尝试只使用一个整数来扫描/打印:

但它没有用。出于某种原因,以下技巧使它起作用(在 printf 之前添加):

我不明白为什么 pushl 4(%esp) 会使它起作用,所以对于我的第一个问题,我要求对此事进行澄清。然后我尝试对两个变量做同样的事情:

但它导致了分割错误。它甚至没有到达 printf 部分,我会尝试这样的事情:

(遵循与之前的 pushl 4(%esp) 相同的逻辑。所以我的第二个问题是如何使它与两个变量一起工作。谢谢!

编辑:为什么下面的代码不能用于扫描两个变量?

0 投票
3 回答
26237 浏览

assembly - NASM 与 GAS(实际差异)

我并不是要引发英特尔与 AT&T 的战争(无论如何,现在它们都支持英特尔语法,这是有争议的)或者问哪个本身“更好”,我只是想知道选择一个或另一个的实际差异.

基本上,几年前当我学习一些基本的 x86 程序集时,我无缘无故地使用了 NASM,除了我正在阅读的那本书——这让我坚定但不由自主地加入了 NASM 阵营。从那以后,我很少有使用汇编的理由,所以我没有机会尝试 GAS。

请记住,它们都支持英特尔语法(我个人更喜欢)并且至少在理论上应该产生相同的二进制文件(我知道它们可能不会,但不应该改变含义),有什么理由支持非此即彼?

是命令行选项吗?宏?非助记词?或者是其他东西?

谢谢 :)

0 投票
1 回答
466 浏览

gcc - GCC-generated asm :: Where did I assign to that register?

Possible Duplicate:
Not sure why we add the registers %rdx and %rax when the assembly code has been using %eax and %edx

all. So, here's my minimal program:

I now run gcc -S on this, and here's the meat of the generated assembly:

Okay, so you see the line I indicate as the problem line. Here's my question: What on earth are %rdx and %rax? The only registers I've loaded things into are %edx and %eax.

Since the program works, %rdx and %rax must be some sort of alias to %edx and %eax, accordingly. Can someone possibly explain the nuances of x86 register nomenclature? I'm completely in the dark on this.

(Of note, if I change the problem line to addl %edx, %eax, the result is identical, but if I change it to addl %rdx, %rax, I get "Error: Incorrect register '%rax' used with l suffix")

0 投票
2 回答
8278 浏览

linux - ASM 调用 Printf

我使用以下 asm 代码打印EBX寄存器中的内容。当我使用

echo $?我得到了正确的答案,但在第一种情况下出现了分段错误。我正在使用 GNU 汇编器和 AT&T 语法。我该如何解决这个问题?

0 投票
1 回答
2947 浏览

assembly - cmp汇编语言指令-gas格式

我正在将 32 位和 64 位汇编语言文件从 gas 格式转换为 MASM 格式,并且在我的代码中遇到了一条似乎完全有问题的指令。我的意思是,我认为汇编器无法知道操作数的大小,指令是否从内存中获取 8、16、32 或 64 位来执行比较。这是说明:

  • cmp $0, 8(%rsp)

如果指令是以下指令之一,汇编器可能已经根据寄存器计算出要获取和比较的内存操作数的大小:

  • cmp %rax, 8(%rsp)
  • cmp %eax, 8(%rsp)
  • cmp %ax, 8(%rsp)

我原以为指令需要是 cmpb、cmpw、cmpl、cmpq ......但不,我的程序只用 cmp 指令就可以很好地组装它。不幸的是,我不记得这段代码在做什么,而且非常不明显......所以解决这个问题的更简单方法是知道指令在做什么。

有人知道吗?任何人都明白为什么这种语法(未指定操作数大小/类型)甚至允许使用直接操作数?

0 投票
2 回答
897 浏览

assembly - 这段汇编代码无效吗?

我试图弄清楚以下汇编代码是否无效。

无效吗?如果是这样,为什么?谢谢。

0 投票
3 回答
479 浏览

assembly - 这段汇编代码到 C 中是什么?

ATT 语法。

我试图了解以下汇编代码的作用:

它应该是带有一个参数的函数体:无符号 x。我知道这是一个do-while 循环,但我怎样才能将它完全转换为 C 代码?

0 投票
1 回答
451 浏览

assembly - 如何从汇编代码中计算 switch case 值?

ATT 语法。

我试图理解我们在课堂上讨论过的一个练习题。

我们得到了以下 switch 语句的部分汇编代码:

我知道第二部分是跳表。我想不通的是如何计算原始的 C 级 switch case 值。我怎样才能做到这一点?

0 投票
2 回答
416 浏览

assembly - 这个汇编代码有什么作用,为什么要使用它?

ATT 语法。

我注意到 C 中的库例程经常使用以下汇编代码片段:

  • %eax 存储在这里的值是什么,为什么它会被弹出?
  • 这个片段的目的是什么?
0 投票
2 回答
1138 浏览

c++ - 在函数调用中从 %esp 中减去分配了多少空间?

C++、ATT 程序集

我有以下汇编代码:

我的教科书声称,通过从 %esp 中减去 0x28(作为堆栈形成的一部分),为变量分配了 12 个字节。为什么从堆栈中减去十进制 40 会分配 12 个字节?