在调试其中一个程序集代码示例时,我发现了以下信息:
(gdb) x /10i 0x4005c4
0x4005c4: push %rbp
0x4005c5: mov %rsp,%rbp
0x4005c8: sub $0xa0,%rsp
0x4005cf: mov %fs:0x28,%rax
0x4005d8: mov %rax,-0x8(%rbp)
0x4005dc: xor %eax,%eax
0x4005de: movabs $0x6673646c6a6b3432,%rax
0x4005e8: mov %rax,-0x40(%rbp)
0x4005ec: movl $0x323339,-0x38(%rbp)
0x4005f3: movl $0x553059,-0x90(%rbp)
根据我的理解,不应该使用movabs,它似乎是故意引入的。我的理解对吗?
替换它的等效MOV命令应该是什么?
发布于 2017-10-07 23:33:26
..。可以使用
movabs
指令将任意64位常量加载到寄存器中,并将整数寄存器从/加载/存储到任意常数64位地址。
http://www.ucw.cz/~hubicka/papers/amd64/node1.html
它所做的正是你所期望的--它把即时的东西放到了登记簿上。
https://stackoverflow.com/questions/46594389
复制相似问题