在C程序中解码汇编输出

Aru*_*mar 8 c assembly

我编写了一个程序来使用XOR交换2个变量.

var1 = var1 ^ var2;
var2 = var2 ^ var1;
var1 = var1 ^ var2;
Run Code Online (Sandbox Code Playgroud)

我编译它以获得程序集输出和其他输出

$ gcc Q1.c -save-temps -o Q1
Run Code Online (Sandbox Code Playgroud)

我在装配表单中获得此输出...

movl    24(%esp), %edx
movl    28(%esp), %eax
xorl    %edx, %eax
movl    %eax, 24(%esp)
movl    28(%esp), %edx
movl    24(%esp), %eax
xorl    %edx, %eax
movl    %eax, 28(%esp)
movl    24(%esp), %edx
movl    28(%esp), %eax
xorl    %edx, %eax
Run Code Online (Sandbox Code Playgroud)

我不熟悉x86程序集,但我从事过ARM程序集.数字2428在这里意味着什么?

movl    28(%esp), %edx
movl    24(%esp), %eax
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 9

%esp是堆栈指针.24(%esp)读取地址+24处的值%esp.