main函数argv两种参数差异比较

来源:互联网 发布:网络洗剪吹是什么意思 编辑:程序博客网 时间:2024/06/05 08:25
 #include <stdio.h>                                                   |     #include <stdio.h>                                           
                                                                     |                            
int main(int argc,char ** argv)                                      |     int main(int argc,char * argv[])                             
{                                                                    |     {                                                            
                                                                     |                            
    for (register i=0 ;i <argc ;i++)                                 |         for (register i=0 ;i <argc ;i++)                         
        printf("%s\n",*argv++);                                      |             printf("%s\n",argv[i]);                              
                                                                     |                            
}                                                                    |     }                                                            
                                                                     |                                                                   
Dump of assembler code for function main:                            |                                                     
4 {                                                                  |     Dump of assembler code for function main:                    
   0x0000000000400530 <+0>: push   rbp                               |     4{                                                          
   0x0000000000400531 <+1>: mov    rbp,rsp                           |        0x0000000000400530 <+0>:push   rbp                       
   0x0000000000400534 <+4>: push   rbx                               |        0x0000000000400531 <+1>:mov    rbp,rsp                   
   0x0000000000400535 <+5>: sub    rsp,0x18                          |        0x0000000000400534 <+4>:push   rbx                       
   0x0000000000400539 <+9>: mov    DWORD PTR [rbp-0x14],edi          |        0x0000000000400535 <+5>:sub    rsp,0x18                  
   0x000000000040053c <+12>: mov    QWORD PTR [rbp-0x20],rsi        |        0x0000000000400539 <+9>:mov    DWORD PTR [rbp-0x14],edi  
                                                                     |        0x000000000040053c <+12>:mov    QWORD PTR [rbp-0x20],rsi
5                                                                   |                                                     
6    for (register i=0 ;i <argc ;i++)                               |     5                                                          
=> 0x0000000000400540 <+16>: mov    ebx,0x0                         |     6   for (register i=0 ;i <argc ;i++)                       
   0x0000000000400545 <+21>: jmp    0x400561 <main+49>              |     => 0x0000000000400540 <+16>:mov    ebx,0x0                 
   0x000000000040055e <+46>: add    ebx,0x1                         |        0x0000000000400545 <+21>:jmp    0x400567 <main+55>      
   0x0000000000400561 <+49>: cmp    ebx,DWORD PTR [rbp-0x14]        |        0x0000000000400564 <+52>:add    ebx,0x1                 
   0x0000000000400564 <+52>: jl     0x400547 <main+23>              |        0x0000000000400567 <+55>:cmp    ebx,DWORD PTR [rbp-0x14]
   0x0000000000400566 <+54>: mov    eax,0x0                         |        0x000000000040056a <+58>:jl     0x400547 <main+23>      
                                                                     |        0x000000000040056c <+60>:mov    eax,0x0                 
                                                                     |                                                     
7        printf("%s\n",*argv++);                                    |     7       printf("%s\n",argv[i]);                            
   0x0000000000400547 <+23>: mov    rax,QWORD PTR [rbp-0x20]        |        0x0000000000400547 <+23>:movsxd rax,ebx                 
   0x000000000040054b <+27>: lea    rdx,[rax+0x8]                   |        0x000000000040054a <+26>:lea    rdx,[rax*8+0x0]         
   0x000000000040054f <+31>: mov    QWORD PTR [rbp-0x20],rdx        |        0x0000000000400552 <+34>:mov    rax,QWORD PTR [rbp-0x20]
   0x0000000000400553 <+35>: mov    rax,QWORD PTR [rax]             |        0x0000000000400556 <+38>:add    rax,rdx                 
   0x0000000000400556 <+38>: mov    rdi,rax                         |        0x0000000000400559 <+41>:mov    rax,QWORD PTR [rax]     
   0x0000000000400559 <+41>: call   0x400410 <puts@plt>             |        0x000000000040055c <+44>:mov    rdi,rax                 
                                                                     |        0x000000000040055f <+47>:call   0x400410 <puts@plt>     
8                                                                   |                                                     
9 }                                                                  |     8                                                          
   0x000000000040056b <+59>: add    rsp,0x18                        |     9}                                                          
   0x000000000040056f <+63>: pop    rbx                             |        0x0000000000400571 <+65>:add    rsp,0x18                
   0x0000000000400570 <+64>: pop    rbp                             |        0x0000000000400575 <+69>:pop    rbx                     
   0x0000000000400571 <+65>: ret                                    |        0x0000000000400576 <+70>:pop    rbp                     
                                                                     |        0x0000000000400577 <+71>:ret                            
End of assembler dump.                                               |                                                              |
                                                                     |     End of assembler dump.                               
原创粉丝点击