我对汇编代码有几个问题
mov
和mov1
有什么区别?
你能解释一下这个输出吗?
804879a: - push %ebp
804879b: mov %esp,%ebp
804879d: sub $0x14,%esp <-allocating space for local variables in heap
80487a0: mov 0x8(%ebp),%eax
80487a3: mov %al,-0x14(%ebp)
80487a6: movl $0x79,-0xc(%ebp)
80487ad: movl $0x5,-0x8(%ebp)
80487b4: movl $0xc,-0x4(%ebp)
80487bb: mov -0x8(%ebp),%eax
80487be: mov -0xc(%ebp),%edx
80487c1: add %edx,%eax <- adding edx to eax
80487c3: mov %eax,%edx
80487c5: sub -0x4(%ebp),%edx
80487c8: movsbl -0x14(%ebp),%eax
80487cc: cmp %eax,%edx
80487ce: sete %al
80487d1: movzbl %al,%eax
80487d4: leave
80487d5: ret
^
|
(memory addresses)
我理解前几行是为局部变量分配内存。
我最不理解的是$0x79
数字。它们是什么?
另外,如果有人可以向我解释sete
会是什么样的很好
答案 0 :(得分:1)
这是ATT或类似语法(与Intel语法相对)。 “$”表示立即值(对于Intel语法,“$”表示当前位置,因此对自身的循环将是|循环$ |)。 movl表示长(32位),如果操作数都不包含操作数大小而不是寄存器名称(al = 8位,ax = 16位,eax = 32位,rax = 64位),则需要后缀。如果当前条件代码表示“相等”(由前一个cmp指令设置),则SETE将AL设置为1,否则将AL设置为零。 movsbl将扩展的带符号8位值移动到32位操作数。