1.Write a LC-3 subroutine for printing “Hello” for N times. Write a main program to input N from the keyboard, call the subroutine and then output “Hello” for N times. (20 points)
时间: 2024-02-12 15:08:15 浏览: 53
下面是一个 LC-3 子程序,用于打印“Hello” N 次:
```assembly
HelloSubroutine LD R1, count ;将计数器的地址加载到 R1 中
LD R2, message ;将消息的地址加载到 R2 中
LEA R3, newline ;将换行符的地址加载到 R3 中
LOOP: ADD R4, R4, R0 ;清空 R4 寄存器
LDR R4, R1, #0 ;将计数器的值加载到 R4 中
BRz END_LOOP ;如果计数器为0,则跳到 END_LOOP 标签
OUT ;输出 "Hello"
ADD R4, R4, #-1 ;将计数器减1
STR R4, R1, #0 ;将计数器的值存回内存
OUT ;输出换行符
BR LOOP ;跳回到 LOOP 标签
END_LOOP: RET ;返回到调用者
message .FILL x48 ;H
.FILL x65 ;e
.FILL x6C ;l
.FILL x6C ;l
.FILL x6F ;o
.FILL x20 ;空格
count .FILL #0 ;计数器的初始值为 0
newline .FILL x0A ;换行符
```
下面是一个 LC-3 主程序,用于输入 N,调用子程序并输出“Hello” N 次:
```assembly
.ORIG x3000
LD R0, N ;将 N 的地址加载到 R0 中
IN ;从键盘输入 N 的值
ST R0, count ;将 N 的值存到计数器中
JSR HelloSubroutine ;调用子程序打印 "Hello" N 次
HALT ;停机
N .FILL #0 ;存储输入的 N 的值
count .FILL #0 ;计数器的初始值为 0
.END
```
注意:这段代码可能需要根据具体的 LC-3 模拟器进行微调。
阅读全文