You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将打印X形矩形的Python嵌套逻辑转换为LC3汇编代码

LC3 嵌套循环打印矩形实现方案

实现思路

  • 寄存器预先分配,避免冲突:
    • R0:负责存放系统调用入参(输出字符、返回值)
    • R1:外层循环计数器,记录剩余待打印的行数,初始值为矩形长度4
    • R2:内层循环计数器,记录当前行剩余待打印的x数量,初始值为矩形宽度3
    • R3:存储宽度常量,用于每次内层循环结束后重置内层计数器
  • 核心逻辑完全对应你提供的Python伪代码:
    1. 预先定义'x'的ASCII码值(0x78)、换行符ASCII码值(0x0A)、长宽常量
    2. 外层循环先判断剩余行数是否为0,为0直接结束程序,否则重置内层计数器为宽度初始值
    3. 内层循环判断当前行剩余x数量是否为0,为0则跳转打印换行,否则输出x后内层计数器减1,回到内层循环开头
    4. 打印换行后外层计数器减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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:39:03