1.函数是如何传递返回值的
保存返回值和返回地址的方式、保存返回值,就是程序用EAX寄存器来保存返回值。如果有多个返回值,EAX寄存器返回的是一个内存地址,
这个内存地址里面可以指向很多的返回数据,EAX寄存器可以保存返回地址。函数还可以通过参数来传递返回值,如果参数是一个指针且该指
针指向的内存空间是可以写的,那么函数体的代码可以把需要返回的数据写入该内存空间。这样调用函数的代码在函数执行结束后,就可以通过
该指针参数来访问这些函数返回的数据。
2.堆栈
对于一个进程的内存空间而言,可以在逻辑上分成3个部份:代码区,静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和
“堆(heap)”是两种不同的动态数据区,栈是一种线性结构,堆是一种链式结构。进程的每个线程都有私有的“栈”,所以每个线程虽然代码一样,
但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量和静态变量分配在静态数据区,本地变量分配在动
态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。
堆栈具体的作用有:记录函数调用框架、传递函数参数、保存返回值的地址、提供函数内部局部变量的存储空间等。
3.实验mykernel实验指导(操作系统是如何工作的)
首先搭建虚拟实验平台
运行模拟时钟中断代码
根据github上修改代码,增加mypcb.h头文件
修改myinterrupt.c和mymain.c
修改后make出现错误
将mymain.c中的movq改成movl,rsp改成esp即可。