以下汇编代码main中含有一个while循环结构,addval中含有一个if-else分支语句结构。 .file "while+call.c" .text .globl addval .type addval, @function addval: pushl %ebp movl %esp, %ebp cmpl $0, 8(%ebp) jle .L2 movl $100, 12(%ebp) jmp .L3 .L2: movl $200, 12(%ebp) .L3: movl 12(%ebp), %eax popl %ebp ret .size addval, .-addval .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $24, %esp movl $0, -4(%ebp) jmp .L6 .L7: movl -4(%ebp), %eax movl %eax, 4(%esp) movl -4(%ebp), %eax movl %eax, (%esp) call addval .L6: cmpl $99, -4(%ebp) jle .L7 movl -4(%ebp), %eax leave ret .size main, .-main .ident "GCC: (GNU) 4.4.4 20100503 (Red Hat 4.4.4-2)" .section .note.GNU-stack,"",@progbits 请识别main函数和addval函数中的控制结构,并还原成C语言代码,并标明每次跳转的地址。
时间: 2024-02-17 12:05:19 浏览: 106
python-leetcode面试题解之第346题数据流中的移动平均值.zip
main函数中的控制结构是while循环,跳转地址为.L6和.L7。
还原后的C语言代码如下:
```
int addval(int a) {
if (a > 0) {
return 100;
} else {
return 200;
}
}
int main() {
int i = 0;
while (i <= 99) {
addval(i);
i++;
}
return i;
}
```
阅读全文