C++代码的汇编实现之二(循环语句的实现)

首先来看看for循环,C++的代码如下

    int temp =0;

    for (int i = 0; i< 10; i ++)

    {

        temp = i;

    }

 

对应汇编代码是:

0116136E  mov        dword ptr [temp],0 

01161375  mov        dword ptr [i],0 

0116137C  jmp        wmain+37h (1161387h) 

0116137E  mov        eax,dword ptr [i] 

01161381  add        eax,1 

01161384  mov        dword ptr [i],eax 

01161387  cmp        dword ptr [i],0Ah 

0116138B  jge         wmain+45h (1161395h)   

0116138D  mov        eax,dword ptr [i] 

01161390  mov        dword ptr [temp],eax 

01161393  jmp        wmain+2Eh (116137Eh) 

 

让我们一行一行来解释

1.初始化temp变量,赋0

2.给循环的i赋值,赋0

3.这一行跳转到wmain+37h,也就是1161387h,在这里执行比较将i值与0ah(10)进行比较,

4.接下来会执行到0116138B:如果cmp的结果是i>=10,那么跳转至wmain+45h(1161395h)处,也就是循环体之外的第一条指令位置,然后结束循环

5.如果i<10,执行循环体,用两条mov将i值放到temp中,即temp = i;

6.随后jmp跳转至wmain+2eh(116137Eh)处,执行i++的操作,随后再次比较i是否小于10,直至i>=10跳出循环

 

然后是while语句

C++代码如下

int i= 0;

    int temp =0;

    while(i<10)

    {

        temp = i;

    }

 

对应汇编代码如下:

00B6136E  mov        dword ptr [i],0 

00B61375  mov        dword ptr [temp],0 

00B6137C  cmp        dword ptr [i],0Ah 

00B61380  jge        wmain+3Ah (0B6138Ah) 

00B61382  mov        eax,dword ptr [i] 

00B61385  mov        dword ptr [temp],eax 

00B61388  jmp        wmain+2Ch (0B6137Ch) 

 

1.给i和temp赋值

2.将i和10进行比较

3.如果大于等于10则跳出循环

4.否则对temp进行赋值,然后跳到wmain+2ch(0b6137ch)处继续执行比较

 

看上去指令数比for要少很多,一共只有6条,不知道是否用while会拥有更好的性能,有待进一步研究。

 

do…while 语句

C++代码如下:

int i= 0;

    int temp =0;

    do

    {

        temp = i;

    }

    while(i<10)

 

对应汇编代码:

011E136E  mov        dword ptr [i],0 

011E1375  mov        dword ptr [temp],0 

011E137C  mov        eax,dword ptr [i] 

011E137F  mov        dword ptr [temp],eax 

011E1382  cmp        dword ptr [i],0Ah 

011E1386  jl         wmain+2Ch (11E137Ch) 

 

1.给i赋0,给temp赋0

2.将i赋给temp

3.比较i是否小于10,如果成立跳转到wmain+2ch(11e137ch)处继续执行循环,否则跳出循环

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值