qq1242009750 发表于 2017-2-6 00:12:24

用汇编的角度来看前自增和后自增

今天有点无聊,于是就复习了一下以前的知识 (=。=);

于是我就看了看前自增后后自增,一开始的时候有点忘记了; 但最后还是想起来了;

好了,话不多说,接下来让我们从汇编的角度来分析一下C语言吧;

{:10_306:}

ascript:;

如图:嘻嘻 ;


首先我们来分析一下第一条汇编程序    默认i的内容为0

------------------------------------------------i++-------------------------------------------------------------------------------
1.把i的内容从内存赋值到eax寄存器中                                                                           | moveax,dword ptr

2.把eax寄存器的值加1,ps:其实这一步根据我对汇编的理解 可以优化为 inc eax            |add   eax,1

3.把加1后的eax寄存器的值放回到i的内存中                                                                     |mov   dword ptr,eax

-----------------------------------------------++i---------------------------------------------------------------------------------
4.把i的内容从内存赋值到ecx寄存器中                                                                            |mov    eax,dword ptr

5.把ecx的值赋值给内存中 ,ps:此处相当于创建了一个副本                     |mov   dword ptr,eax

6.把i的内容从内存中赋值到edx寄存器中                                                                        |mov   edx,dword ptr

7.把edx寄存器的值加1                                                                                                  |add   edx,1

8.把加1后的edx寄存器的值放回到i的内存中                                                                    |mov   dword ptr,edx

--------------------------------------------------接下来就是输出了(重点)-----------------------------------------------------
9.把i的内存从内存给eax                                                                                                   |mvo    eax,dword prt

10.eax入栈                                                                                                                   |push eax

11.把内存中的值赋值给ecx                                                                       |mov ecx dword ptr

12ecx入栈                                                                                                                |push ecx

因为栈是一个先进后出的存放体系,所以在遇到第一个 %d的时候就会弹出第二个入栈的值 此时屏幕上会显示 i++= 2
然后遇到第二个%d的时候就会弹出第一个入栈的值 此时屏幕上会显示 i++ = 2   ++i = 1
{:10_247:}
在这里我们可以看出后置的++给出的仅仅是一个副本{:10_244:}

好了分析完了,不足之处请大家多多指出!

零度非安全 发表于 2017-2-6 16:43:29

我当年也是这么干的,nice 哟{:5_95:}

qq1242009750 发表于 2017-2-7 00:49:52

零度非安全 发表于 2017-2-6 16:43
我当年也是这么干的,nice 哟

哈哈哈哈 , 同道中人{:10_279:}

qq1242009750 发表于 2017-2-10 00:14:27

{:10_245:}
页: [1]
查看完整版本: 用汇编的角度来看前自增和后自增