x86汇编leaq指令运算疑问:为何指定代码执行后%rsi的值为20
汇编指令运行结果解答
涉及的代码段如下:
leaq 20(%rdi),%rsi subq %rdi, %rsi
运算逻辑拆解
leaq是加载有效地址指令,它的核心功能是完成地址数值运算,不会根据计算出的地址去内存读取实际存储的数据,而是直接把运算得到的地址数值赋值给目标寄存器。- 第一条指令
leaq 20(%rdi),%rsi执行时,20(%rdi)的地址计算规则为「%rdi存储的数值 + 20」,执行完成后%rsi的取值就是%rdi + 20。 - 第二条指令
subq %rdi, %rsi遵循x86汇编subq 源操作数, 目标操作数的运算规则,即目标操作数 = 目标操作数 - 源操作数,代入%rsi当前值计算可得:%rsi = (%rdi + 20) - %rdi = 20。
疑问澄清
你之前的理解和实际逻辑本质是一致的:你提到的「%rdi加20的地址」本身的数值就是%rdi + 20,减去%rdi的取值后结果自然为20,整个过程仅涉及寄存器数值运算,和内存实际存储的内容无关。
内容的提问来源于stack exchange,提问作者compcomp
相关产品推荐
相关产品推荐

