陷阱子程序LC3组装

时间:2017-12-06 02:55:48

标签: assembly subroutine low-level lc3

嗨我有一个cs类的问题

       The puts TRAP routine has been disabled for some reason. Write an LC-3 
      subroutine called puts that
  implements its behaviour. In other words when the subroutine is called 
 register R0 will contain the
 address of a null-delimited string and the subroutine will simply print the 
string and return. You will of
course need to utilize the TRAP routine out that prints a character. 

DO   不必写主要   程序

所以我的方法是这个我不确定这是否正确或我的逻辑是否正确

    PUTS:      
    ADD R2, R0, #0;
    AND R0, R0, #0;
    ADD R0, R2, #0;

    Out(trapx21) ; print first char in r0;


    BRp PUTS ; repeat loop 

我不确定我是否正确地做了这个帮助?

1 个答案:

答案 0 :(得分:1)

关于您的TRAP还有一些问题。

  1. 最大的错误,就是在陷阱服务程序中使用OUT陷阱。当调用陷阱时,返回地址放在R7中。当你调用OUT陷阱时,R7被破坏了。现在你无法回到任何一个叫做陷阱的代码。
  2. 你最后需要一条RET指令才能回复那些叫你的人
  3. 您的代码实际上并未从R0中包含的字符串中获取字符。因此,如果你从R0中包含的地址读取(通过LDR),你应该得到第一个字符,从R0 + 1中包含的地址读取,你应该得到第二个字符,你必须不断地从R0中的地址读取字符,直到你收到一个0,这是NUL终结者。
  4. 与你问题中的说明相反,你应该写一个MAIN来测试它。