假设我有以下装配线
movl $-1, %edi
movl $1, %edx
我到底在%edi/%edx寄存器中存储了什么内容。
基本上,如果我把这段代码转换成C程序,我会不会把一些变量初始化为-1和1,因为这就是我看到它的方式,这也是我感到困惑的地方。
我理解immediate =“一些常量”,但这是什么意思呢?
发布于 2013-02-16 02:21:32
有四种方法可以将某些内容加载到寄存器中:
$number
,并将特定的值(数字)加载到寄存器中。请注意,number
不必是数字值,例如,可以是movl $printf, %eax
-这会将函数printf
的地址加载到寄存器eax
中。来自另一个寄存器movl %eax, %edx
的eax
值复制到edx
中。从固定内存位置movl myvar, %eax
执行myvar
的内容在eax
中。从另一个寄存器中的内存位置edx
在eax
中的地址处具有任何32位值。当然,假设它实际上是一个“好”的内存位置--如果不是,我们就有了一个段错误。如果这是C代码,代码可能看起来有点像这样:
1)
int x = 42;
int (*printfunc)(const char *fmt, ...) = printf;
2)
int x = 1;
int y = 2;
...,
x = y; // movl %eax, %edx
3)
int x = myvar;
4)
int x = *myptr;
编辑:几乎所有作为move指令的“源”的东西都可以作为算术运算的源,比如add $3, %eax
将等同于x += 3;
的C语言。
https://stackoverflow.com/questions/14900594
复制相似问题