如何将打印X形矩形的Python嵌套逻辑转换为LC3汇编代码
LC3 嵌套循环打印矩形实现方案
实现思路
- 寄存器预先分配,避免冲突:
- R0:负责存放系统调用入参(输出字符、返回值)
- R1:外层循环计数器,记录剩余待打印的行数,初始值为矩形长度4
- R2:内层循环计数器,记录当前行剩余待打印的x数量,初始值为矩形宽度3
- R3:存储宽度常量,用于每次内层循环结束后重置内层计数器
- 核心逻辑完全对应你提供的Python伪代码:
- 预先定义'x'的ASCII码值(0x78)、换行符ASCII码值(0x0A)、长宽常量
- 外层循环先判断剩余行数是否为0,为0直接结束程序,否则重置内层计数器为宽度初始值
- 内层循环判断当前行剩余x数量是否为0,为0则跳转打印换行,否则输出x后内层计数器减1,回到内层循环开头
- 打印换行后外层计数器减1,回到外层循环开头
完整汇编代码
.ORIG x3000 ; 常量定义 WIDTH .FILL #3 ; 矩形宽度,对应你代码里的width=3 LENGTH .FILL #4 ; 矩形长度,对应你代码里的length=4 CHAR_X .FILL x78 ; 'x'的ASCII码 NEWLINE .FILL x0A ; 换行符的ASCII码 ; 寄存器初始化 LD R1, LENGTH ; R1 = 外层循环计数器(剩余行数) LD R3, WIDTH ; R3 = 宽度常量,用于重置内层计数器 ; 外层循环开始 OUTER_LOOP ADD R1, R1, #0 ; 判断剩余行数是否为0 BRz END_PROG ; 剩余行数为0则结束程序 ADD R2, R3, #0 ; 重置内层计数器为宽度值 ; 内层循环开始 INNER_LOOP ADD R2, R2, #0 ; 判断当前行剩余打印字符数是否为0 BRz PRINT_NEWLINE ; 打印完当前行所有x,跳去打印换行 ; 打印x LD R0, CHAR_X TRAP x21 ; 系统调用:输出字符 ADD R2, R2, #-1 ; 内层计数器减1 BRnzp INNER_LOOP ; 回到内层循环开头 ; 打印换行 PRINT_NEWLINE LD R0, NEWLINE TRAP x21 ; 输出换行符 ADD R1, R1, #-1 ; 外层计数器减1 BRnzp OUTER_LOOP ; 回到外层循环开头 END_PROG TRAP x25 ; 系统调用:结束程序 .END
使用说明
如果需要调整矩形的长宽,直接修改代码开头WIDTH和LENGTH对应的.FILL值即可,无需修改其他逻辑。该代码可直接在标准LC3模拟器中运行,输出结果和你给出的Python代码效果完全一致。
内容的提问来源于stack exchange,提问作者Mitch Callahan
相关产品推荐
相关产品推荐

