家庭作业:我第一次尝试用MIPS写作,而且我坚持使用JAL命令。当我运行一个名为setup_ports
的子程序时,一切都按照宣传的方式工作(即它进入子程序,执行代码并退出)。下一个函数(wait_for_operation
)调用另一个函数light_leds
。问题是代码在此行停止。调试器不会进入light_leds
,它只是暂停。我不确定问题是什么。
正确使用代码:
.ent setup_ports
setup_ports:
#set leds to input, RB10-11
LI $t0, 0x3C00
SW $t0, TRISBCLR
#set switches to output, RE08, RD00, RD08, RD13
LI $t0, 0x100
SW $t0, TRISESET
LI $t0, 0x2101
SW $t0, TRISDSET
JR $ra
.end setup_ports
代码无效:
.ent wait_for_operation
wait_for_operation:
MOVE $s1, $ra
LI $t0, 0xF
MOVE $a0, $t0
JAL light_leds
NOP
SW $t0, ($zero)
.ent light_leds
light_leds:
#clear all lights
LI $t0, 0x3C00
SW $t0, LATBCLR
#get passed value
MOVE $t0, $a0
调试器在JAL light_leds
行停止,并且不允许暂停,只停止。