void main()
{
int a, b;
swap(&a, &b);
}
void swap(int *ap, int *bp)
{
int temp = *ap;
*ap = *bp;
*bp = temp;
}
栈向下增长
//以下汇编代码为main函数中调用swap函数的始终
// M是DRAM抽象成的数组,SP表示栈指针
<swap>:
SP = SP-4; //sp 初始指向saved pc, 栈向下增长,所分配4字节栈内存
R1 = M[SP+8]; //获取ap的地址
R2 = M[R1]; //获取ap的值
M[SP] = R2; //ap的值赋给temp, sp当前指向temp
R1 = M[SP+12]; // 取bp的地址
R2 = M[R1]; // 取bp的值
R3 = M[SP+8]; // 取ap的地址
M[R3]=R2; // bp的值赋给ap
R1 = M[SP]; //获取temp的值
R2 = M[SP+12]; //取bp的地址
M[R2] = R1; //temp值赋给bp的地址指向的值
SP = SP+4; // 释放temp的栈内存
RET; // 释放saved pc的栈内存
//注:M[sp] 就是从dram加载数据到register, temp 是int型变量,所以获取的是temp的值,M[sp+8]获取的的是指针变量的值,所以它得到的是地址, 此外register到dram叫store.