Big*_*boy 3 c assembly converter
我无法理解下面的汇编代码,因为我将它转换为C.我知道它是一个循环,但我不知道从哪里开始转换它.
我有点理解输入必须是6个数字,而在循环内部它将增加5并进行比较.
我大多坚持我们如何知道起始值?
0x0000000000400f15 <+9>: callq 0x4016e5 <read_six_numbers>
0x0000000000400f1a <+14>: lea 0x4(%rsp),%rbx
0x0000000000400f1f <+19>: lea 0x18(%rsp),%rbp
0x0000000000400f24 <+24>: mov -0x4(%rbx),%eax
0x0000000000400f27 <+27>: add $0x5,%eax
0x0000000000400f2a <+30>: cmp %eax,(%rbx)
0x0000000000400f2c <+32>: je 0x400f33 <phase_2+39>
0x0000000000400f2e <+34>: callq 0x4016c3 <explode_bomb>
0x0000000000400f33 <+39>: add $0x4,%rbx
0x0000000000400f37 <+43>: cmp %rbp,%rbx
0x0000000000400f3a <+46>: jne 0x400f24 <phase_2+24>
Run Code Online (Sandbox Code Playgroud)
函数read_six_numbers接收数组的地址,将数字存储在寄存器中%rsi. %rsi设置为指向stack(%rsp)底部的位置,其中分配了一些空间sub $0x28,%rsp.循环0x400f24使用寄存器%rbx作为指向数组的指针,从头开始.它检查前一个值+ 5是否等于当前值.如果没有,它调用explode_bomb()没有参数.循环迭代5次,直到指针指向数组的末尾.