Lar*_*rry 0 assembly x86-64 pointer-arithmetic att
我的装配有点生疏,我试着让它再次变好.
显示意图的C代码:
void ask_me(int * data){
(*data)++;
}
Run Code Online (Sandbox Code Playgroud)
这是故意的愚蠢,但适合上下文.
我的工作大会:
_ask_me:
addq $1, (%rdi)
ret
Run Code Online (Sandbox Code Playgroud)
我想用这个lea指令作为训练.但我无法使其发挥作用:
_ask_me:
leaq 1(%rdi), %rdi
ret
Run Code Online (Sandbox Code Playgroud)
最差:
_ask_me:
movq (%rdi), %rcx
leaq 1(%rcx), %rdi
ret
Run Code Online (Sandbox Code Playgroud)
你能提醒我怎么做吗?
谢谢
原始程序集从/向内存读写.那是:
addq $1, (%rdi)
Run Code Online (Sandbox Code Playgroud)
执行操作:
*(rdi) += 1
Run Code Online (Sandbox Code Playgroud)
你无法实现同样的目的LEA,因为LEA将结果存储在寄存器中,而不是存储在内存中.所以你可以使用它rdi += 1(如你的第一次尝试),但不是*(rdi) += 1.
| 归档时间: |
|
| 查看次数: |
2804 次 |
| 最近记录: |