blog3

对于栈的初学习

小端序

端序指的是字节的存储顺序;小端序是把高位字节存储在高端地址,底位字节存储在低端地址,高端序与之相反。大小端序是硬件层面上的,针对不同的CPU与内存而言是不同的。

补充ASCII码表与2进制、16进制数

ASCII码表

2进制与10进制互相转换

10进制转2进制

十进制数逐次整除2,直至商为0,所得余数按照相反的顺序写出,即为其二进制数。

示例:45写成二进制为101101  

45逐次整除2的商        22       11       5       2       1       0

逐次整除2的余数   1          0        1       1       0       1

                              ←←←←←←←←←←←←←←←←←←

                                    把余数从右往左写,即为二进制数

2进制转10进制

计算公式:a20+b21+c22+d23+……+n*2(n-1)=

此公式中,a表示二进制数的右边第一位数,b表示二进制数的右边第二位数,以此类推。

示例:101101写成十进制为45

1*20+0*21+1*22+1*23+0*24+1*25=45

10进制转16进制

十进制数依次除以16直至得0,所得余数按照相反的顺序写出,即为其16进制数。

16进制转10进制

计算公式:a160+b161+c162+d163+……+n*16(n-1)=
此公式中,a表示二进制数的右边第一位数,b表示二进制数的右边第二位数,以此类推。

16进制与2进制互相转换

示例: 二进制数 1001 0111 0111 1001

转十六进制数         9        7      7       9

从二进制数右边起每四个数字所代表的十进制中的数字为十六进制数的一个数字,即二进制数1001 0111 0111 1001写成十六进制数为9779。2进制转16进制过程相反。


特性:栈先进后出,从高地址像低地址延伸。
数据从上面往下面存,从下面往上面拿。
栈的作用:暂时保存变量,调用函数时传递参数,保存函数返回地址。

作业

描述此C代码的栈运行

‘’’

#include<stdio.h>
void swap(int aa, int bb)
{
int cc = aa; aa = bb; bb = cc;
}
int main()
{
int a = 1, b = 0;
swap(&a, &b);
printf(“%d %d”, a, b);
}
‘’’

描述部分汇编语言

012616FE mov eax,dword ptr [aa] 把aa的地址移入eax
01261701 mov ecx,dword ptr [eax] 把eax中的数值移入ecx
012616E9 push ebx 把ebx压入栈
012616E3 sub esp,0CCh 在esp中留出0CCh的空间
012616EC lea edi,[ebp-0CCh] 将[edp-0CCh]中的地址移到edi
012616FC rep stos dword ptr es:[edi] 将上一串指令重复并将上一出寄存器中的数值拷到es:[edi]指
                       向的地址