编写一个LC-3子程序打印“Hello”N次。编写一个主程序,从键盘输入N,调用子程序,然后输出N次“Hello”。(20分)
时间: 2024-02-13 21:02:17 浏览: 22
LC-3子程序打印“Hello”N次的代码如下:
```
; 子程序打印Hello
; 输入: R5 = N
; 输出: 无
; 破坏: R0, R1
LEA R0, HELLO_STRING ; R0指向Hello字符串
LD R1, N ; R1 = N
LOOP:
OUT ; 输出Hello字符串
ADD R1, R1, #-1 ; N = N - 1
BRzp DONE ; 如果N为0,则停止循环
ADD R0, R0, #6 ; R0指向下一个字符
BR LOOP ; 继续循环
DONE:
RET
HELLO_STRING .STRINGZ "Hello\n"
N .FILL #0 ; 这里定义N的初始值为0,需要在主程序中进行输入
```
主程序的代码如下:
```
; 主程序输入N,调用子程序打印Hello
; 输入: 无
; 输出: 无
; 破坏: R0-R5
.ORIG x3000
LEA R0, PROMPT ; 输出提示信息"Please enter N: "
PUTS
GETC ; 从键盘读取字符
OUT ; 将字符输出
SUB R4, R0, #'0' ; R4 = 输入的数字
AND R4, R4, #15 ; 保留低4位,防止输入超过15
ADD R5, R4, #0 ; 将N保存到R5
JSR PRINT_HELLO ; 调用子程序打印Hello N次
HALT
PROMPT .STRINGZ "Please enter N: "
.PRINT_HELLO
; 调用子程序打印Hello N次
; 输入: R5 = N
; 输出: 无
; 破坏: R0-R5
; 将N保存到R5
ST R5, N
; 调用子程序打印Hello
JSR HELLO
; 将N清零
AND R5, R5, #0
RET
.END