3
testl %esi, %esi
jle .L3
movl %esi, %eax
如果testl
做逻辑与上esi
结果不能永远少但只有等于,或者如果esi
为0。无法达到这种方式movl
。这是真的,或者我错过了一些事情。
第二步:
f1:
pushq %rbp
movq %rsp, %rbp
testl %esi, %esi
jle .L3
movl %esi, %eax
.L2:
incb (%rdi)
incq %rdi
decq %rax
jne .L2
.L3:
popq %rbp
ret
在假设C译法如果.L3
由pop
然后ret
和分支发生有可能确定由函数的返回值?
在假设C译法如果'.L3'由leave'和'RET的' '和分支发生,这意味着函数返回'0'?否则,如果'jle'失败,在'movl'指令后面有一个结语,那么这意味着该函数返回整数值'eax'? –
积分值在IA-32的'eax'中返回,所以在你描述的场景中,如果esi> 0,它将返回'esi'的值,否则它将返回'eax'中已有的值。 – Michael
如果我没有这些信息,我无法确定返回什么值? –