静态链表笔记

来源:互联网 发布:绝地求生画面优化补丁 编辑:程序博客网 时间:2024/05/16 16:17

1.结构体包含{
1.数据
2.结构体指针

}
2.结构体写法为:
struct A
{
xxx data;
struct A* next;

}
3.示例代码:
#include
#include

using namespace std;

struct Student_data
{
unsigned int num;
float score;
struct Student_data* p_next;

};

int main()
{

Student_data a,b,c,*head,*p;a.num=10001;a.score=89.4;b.num=10002;b.score=95.6;c.num=10003;c.score=100;head=&a;a.p_next=&b;b.p_next=&c;c.p_next=0;p=head;do   {   std::cout<<"The Student num is :"<<p->num<<"\n"<<"The Student score is :"<<p->score<<"\n";    p=p->p_next;

}
while(p!=0);

return 0;

}

这里写图片描述
这里写图片描述

4.汇编代码:
{
0040134A 55 push ebp
0040134B 89E5 mov ebp,esp
0040134D 56 push esi
0040134E 53 push ebx
0040134F 51 push ecx
00401350 83EC 4C sub esp,0x4C
00401353 E8 28B00100 call Iterator.0041C380
00401358 C745 D4 1127000>mov dword ptr ss:[ebp-0x2C],0x2711
0040135F A1 54F04700 mov eax,dword ptr ds:[0x47F054]
00401364 8945 D8 mov dword ptr ss:[ebp-0x28],eax
00401367 C745 C8 1227000>mov dword ptr ss:[ebp-0x38],0x2712
0040136E A1 58F04700 mov eax,dword ptr ds:[0x47F058]
00401373 8945 CC mov dword ptr ss:[ebp-0x34],eax
00401376 C745 BC 1327000>mov dword ptr ss:[ebp-0x44],0x2713
0040137D A1 5CF04700 mov eax,dword ptr ds:[0x47F05C]
00401382 8945 C0 mov dword ptr ss:[ebp-0x40],eax
00401385 8D45 D4 lea eax,dword ptr ss:[ebp-0x2C]
00401388 8945 E0 mov dword ptr ss:[ebp-0x20],eax
0040138B 8D45 C8 lea eax,dword ptr ss:[ebp-0x38]
0040138E 8945 DC mov dword ptr ss:[ebp-0x24],eax
00401391 8D45 BC lea eax,dword ptr ss:[ebp-0x44]
00401394 8945 D0 mov dword ptr ss:[ebp-0x30],eax
00401397 C745 C4 0000000>mov dword ptr ss:[ebp-0x3C],0x0
0040139E 8B45 E0 mov eax,dword ptr ss:[ebp-0x20]
004013A1 8945 E4 mov dword ptr ss:[ebp-0x1C],eax
004013A4 8B45 E4 mov eax,dword ptr ss:[ebp-0x1C]
004013A7 8B58 04 mov ebx,dword ptr ds:[eax+0x4]
004013AA 8B45 E4 mov eax,dword ptr ss:[ebp-0x1C]
004013AD 8B30 mov esi,dword ptr ds:[eax]
004013AF C74424 04 24F04>mov dword ptr ss:[esp+0x4],Iterator.0047>; ASCII “The Student num is :”
004013B7 C70424 40994800 mov dword ptr ss:[esp],Iterator.00489940 ; ASCII “lTH”
004013BE E8 FD8E0700 call Iterator.0047A2C0
004013C3 893424 mov dword ptr ss:[esp],esi
004013C6 89C1 mov ecx,eax
004013C8 E8 13830500 call Iterator.004596E0
004013CD 83EC 04 sub esp,0x4
004013D0 C74424 04 39F04>mov dword ptr ss:[esp+0x4],Iterator.0047>
004013D8 890424 mov dword ptr ss:[esp],eax
004013DB E8 E08E0700 call Iterator.0047A2C0
004013E0 C74424 04 3BF04>mov dword ptr ss:[esp+0x4],Iterator.0047>; ASCII “The Student score is :”
004013E8 890424 mov dword ptr ss:[esp],eax
004013EB E8 D08E0700 call Iterator.0047A2C0
004013F0 891C24 mov dword ptr ss:[esp],ebx
004013F3 89C1 mov ecx,eax
004013F5 E8 B6820500 call Iterator.004596B0
004013FA 83EC 04 sub esp,0x4
004013FD C74424 04 39F04>mov dword ptr ss:[esp+0x4],Iterator.0047>
00401405 890424 mov dword ptr ss:[esp],eax
00401408 E8 B38E0700 call Iterator.0047A2C0
0040140D 8B45 E4 mov eax,dword ptr ss:[ebp-0x1C]
00401410 8B40 08 mov eax,dword ptr ds:[eax+0x8]
00401413 8945 E4 mov dword ptr ss:[ebp-0x1C],eax
00401416 837D E4 00 cmp dword ptr ss:[ebp-0x1C],0x0
0040141A ^ 75 88 jnz XIterator.004013A4
0040141C B8 00000000 mov eax,0x0
00401421 8D65 F4 lea esp,dword ptr ss:[ebp-0xC]
00401424 59 pop ecx
00401425 5B pop ebx
00401426 5E pop esi
00401427 5D pop ebp
00401428 8D61 FC lea esp,dword ptr ds:[ecx-0x4]
0040142B C3 retn

}

5.总结
{
1.一般高级语言中定点型数据直接构成指令赋值(mov dword ptr ss:[ebp-0x2C],0x2711实际是a.num=10001),而浮点型数据存储在数据块(mov eax,dword ptr ds:[0x47F054],mov dword ptr ss:[ebp-0x40],eax相当于a.score=89.4)
2.指针赋值在汇编中{
00401385 8D45 D4 lea eax,dword ptr ss:[ebp-0x2C]
00401388 8945 E0 mov dword ptr ss:[ebp-0x20],eax
这两句相当于head=&a;

3.比较跳转汇编中{
00401416 837D E4 00 cmp dword ptr ss:[ebp-0x1C],0x0
0040141A ^ 75 88 jnz XIterator.004013A4
相当于 while(p!=0);

}

}
}