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
包含0x100
。 0x100
的值是 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 《信息安全系统设计基础》第七周学习总结