前言
我是懒狗
该章节复习LC-3中子程序的调用与参数保存等内容。
TRAP指令
使用TRAP 操作数
指令调用子程序,可以跳转到操作数指向的地址。这个地址内的内容,是子程序的起始地址(即函数指针寻址找到子程序)
TRAP跳转
比如 TRAP x20
,系统内存 0x0020
处放置的值是 0x1234
,那么子程序开始的地址就在 0x1234
值得注意的是,TRAP指令的起始地址表,通常是LC-3系统自带的子程序,比如:TRAP x20
是读取一个输入的字符。此外,TRAP指令的操作数只有8bit,所以最多支持256个服务程序。
TRAP返回
TRAP指令执行前,会将PC的值存放到R7
中。在子程序返回时,从R7
中取出指向主程序的PC值,然后跳转到该PC值。
使用R7来保存返回地址,而不是栈帧,这意味着子程序必须保证R7的值不能被修改。
RET指令
前文提到返回地址保存在R7,所以RET指令是 JMP R7
的简写。RET指令没有操作数,直接调用即可。