LC3子程序 - 自定义陷阱例程

时间:2017-12-09 22:46:13

标签: assembly subroutine low-level lc3 lc3-trap

我正在研究一个问题,其目标是创建一个模仿陷阱(PUTS)的子程序,它会将一个字符串写入控制台,这个字符串可以假设在r0

这是我到目前为止,它适用于第一个字符's'之后它保持循环打印>>>>>>香港专业教育学院尝试了一切建议吗?

getWorkers():Observable<any> {    
  let fn = firebase.database().ref('/workers').on('child_added', (snapshot) => {
        return snapshot.val();
  });

  return Observable.bindCallback(fn) as Observable<any>
}

1 个答案:

答案 0 :(得分:0)

好的

1

br putss

使用JSR调用子例程。如果你必须分支到子程序,那么一旦子程序结束,控制流如何回到子程序的调用者?

另一点是,如果你需要在你的子程序中调用TRAP,那么你必须保存并恢复R7,因为作为调用TRAP的一部分,它将在R7中写入它的返回地址,这将破坏返回地址以返回到呼叫者。也许这就是你使用BR的原因?

2

add r0, r1,#0

这很糟糕。这破坏了子程序被调用时R0中包含的字符串数据的地址。我不明白你为什么要这样做?

3

and r1,r1,#0

这似乎是不必要的,当LDR R1,......发生时,你将覆盖R1中的值。

4

add r4, r0, #-4

似乎没必要? PUTS在读取值为0(nul终结符)的字符时结束。

5

theend
halt

不要在子程序中执行此操作,完成后的子程序应该只使用ret返回给调用者。如果你打电话给别人的子程序,你不会希望程序终止。