addl指令说明

Posted

技术标签:

【中文标题】addl指令说明【英文标题】:Addl instruction explanation 【发布时间】:2015-08-10 09:58:35 【问题描述】:

我正在学习汇编语言,但无法自己解决以下练习。

假设以下值存储在指定的内存地址和寄存器中:

现在,我们有一个指令:

addl %ecx , (%eax)

对我来说,这意味着 - 将存储在 %ecx 和内存地址 (%eax) 中的值相加的结果存储在内存地址 (%eax) 中。

该练习的正确答案是: 值 0x100 和目标地址 0x100。

我知道正确的操作数是目标地址,但是我们如何通过计算%ecx + (%eax) 得到0x100 的值?

【问题讨论】:

该指令看起来像是一条具有 AT&T 语法的 intel 指令(这将有助于在问题中定义它,因为否则操作数是相反的!)。这意味着 0x01(ecx 的值)被添加到地址 0x100 处已经存在的 0xFF。有什么问题? @Damon 我现在明白了,谢谢!我的问题是我试图添加 0x100 + 0x1 【参考方案1】:

首先,我讨厌 AT&T 语法,这就是你在这里所拥有的……除此之外。

EAX 包含0x1000x100 的值是 0xFF

ECX 包含0x1

0x1 + 0xFF = 0x100。到目前为止一切顺利。

然后将最终结果放入EAX指向的地址中。因此,(0X100) == 0x100

我认为你大部分时间都在那里。

【讨论】:

感谢您的解释。我想补充一点:将addX src, dest 视为dest += src 也很有帮助,因此在C 中:dest = dest + src。另请注意,括号表示指针。括号基本上告诉我们“将值视为地址并遵循它”,因此基本上“取消引用”它。但注意:当使用例如在 LEA 指令中,括号不会取消引用 pinter,因为 LEA 并没有真正触及内存。对吗? 你有这个权利,@xotix。看看这个:***.com/questions/1658294/…

以上是关于addl指令说明的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-20155336 《信息安全系统设计基础》第七周学习总结

程序的机器级表示

[转帖]软件的变革与 AOT

Atitit..net clr il指令集 以及指令分类  与指令详细说明

汇编指令机器码说明

自己动手写CPU_5_5.4 逻辑位移操作与空指令的说明