#include <stdio.h>
int main(void)
{
int count = 0;
printf("count = %d
", count);
count = 0;
while (count < 10)
{
count++;
printf("result = %d
", count);
}
/*
do
{
count++;
printf("result = %d
", count);
} while(count < 10);
*/
return 0;
}
- 无论是
while
循环或者是do while
循环,在C语言中都是级别不同的两种循环结构,它们在汇编或者机器语言这个角度用到的都是两条非常重要的指令,比较和跳转
- 通过
objdump -d Executable File
就可以帮助我们进行反汇编这个可执行文件
callq
指令 - 调用函数
cmpl
指令 - 比较,后面的l
表示 long
,上图中表示左边的0x9
比较右边的-0x4
jle
指令 - 跳转,后面的le
表小于等于,当上面的cmpl
小于等于的时候就需要跳转到4004f3
地址值,而对应的机器指令只有7e df
,这就是编程中的专业术语位置无关代码记录的是一个相对值,而不是地址的绝对值!意思就是记录的跳转4004f3
与自己的400512
的一个差值,优点就是当上面的代码被搬移到其他地址处,那么这段代码记录的是相对值,运行是没有任何问题的。如果是一个绝对值那么可能存在程序无法运行, 绝对值是这样的
- 位置有关代码就是上图所示,记录的绝对值,读法是反过来读
addl
指令 - 加法,后面的l
表示 long
,在C程序中就是count++