Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 验证任务切换器是否在任务之间正确切换_Assembly_Mips - Fatal编程技术网

Assembly 验证任务切换器是否在任务之间正确切换

Assembly 验证任务切换器是否在任务之间正确切换,assembly,mips,Assembly,Mips,我的MIPS汇编老师让我们实现了一个任务切换器,它通过将所有寄存器保存并加载到堆栈中,在两个任意任务之间切换。他在课堂上问我们如何测试我们的切换器是否工作正常 他暗示这可以用一行代码来完成,并且可以在不知道任务在做什么的情况下完成(即,给我们二进制文件) 班上没有人能想出他想让我们怎么做,他也不告诉我们,他只是因为我们不能想出这个显而易见的事情而生气 那么我们该怎么做呢?答案是: 一次运行一个任务,并检查结果是否与运行多任务时相同 允许此操作的一行附加代码是taskswitch例程中的jr$ra

我的MIPS汇编老师让我们实现了一个任务切换器,它通过将所有寄存器保存并加载到堆栈中,在两个任意任务之间切换。他在课堂上问我们如何测试我们的切换器是否工作正常

他暗示这可以用一行代码来完成,并且可以在不知道任务在做什么的情况下完成(即,给我们二进制文件)

班上没有人能想出他想让我们怎么做,他也不告诉我们,他只是因为我们不能想出这个显而易见的事情而生气


那么我们该怎么做呢?

答案是:

一次运行一个任务,并检查结果是否与运行多任务时相同


允许此操作的一行附加代码是taskswitch例程中的
jr$ra
,以防止它实际切换

如果不查看切换程序代码,很难说,但这听起来像是一个虚假的声明。要彻底测试它,您需要大量的测试。无论如何,如何确保堆栈存储/恢复正常工作的一个想法是使用可识别的位模式(即每个寄存器具有不同的值)设置每个任务的初始环境,并在准备切换后,在跳转到任务之前,再次跳转到任务切换。因此,切换器只需在不执行单个任务指令的情况下继续切换两个环境。如果没有值偏离,则切换工作(咳嗽)。