我编写了一个程序来使用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程序集.数字24和28在这里意味着什么?
movl 28(%esp), %edx
movl 24(%esp), %eax
Run Code Online (Sandbox Code Playgroud)