我给出了以下装配程序。
subl $16, %esp
movl $0, -4(%ebp)
movl $10, -8(%ebp)
movl $5, -12(%ebp)
movl $0, -16(%ebp)
_L1:
movl -16(%ebp), %eax
cmpl -12(%ebp), %eax
jge _L2
movl -16(%ebp), %eax
addl -8(%ebp), %eax
movl %eax, -8(%ebp)
movl -16(%ebp), %eax
addl $1, %eax
movl %eax, -16(%ebp)
jmp _L1
_L2:
movl -4(%ebp), %eax
addl $16, %esp
我想知道是否曾进入过L1?我看到两个函数定义,一个用于_L1
,另一个用于_L2
。但主要功能从不调用L1。
我看到该程序分为:
subl $16, %esp
movl $0, -4(%ebp)
movl $10, -8(%ebp)
movl $5, -12(%ebp)
movl $0, -16(%ebp)
_L1:
movl -16(%ebp), %eax
cmpl -12(%ebp), %eax
jge _L2
movl -16(%ebp), %eax
addl -8(%ebp), %eax
movl %eax, -8(%ebp)
movl -16(%ebp), %eax
addl $1, %eax
movl %eax, -16(%ebp)
jmp _L1
_L2:
movl -4(%ebp), %eax
addl $16, %esp
但是这些函数都不是从外部函数调用的。所以这个程序和以下一样好:
subl $16, %esp
movl $0, -4(%ebp)
movl $10, -8(%ebp)
movl $5, -12(%ebp)
movl $0, -16(%ebp)
我来自Python世界,所以这对我来说没有多大意义。
它是否在初始扫描时实际执行L1? (没有跳到)。
对此的任何帮助都会很棒 - 我刚刚开始学习大会。