如何在easy68K中用嵌套循环实现banner格式字母显示且数据语句不可修改
前置说明
完全满足要求:
- 采用两层嵌套for循环实现核心逻辑
- 未修改任何
str下的dc.b数据定义 - 兼容输入大写A、小写a触发Banner输出
完整可运行代码
* 数据段定义,str下的dc.b完全保留未修改 ORG $1000 str dc.b ' # ',13,10,0 dc.b ' # # ',13,10,0 dc.b ' # # ',13,10,0 dc.b ' # # ',13,10,0 dc.b ' ######## ',13,10,0 dc.b ' # # ',13,10,0 dc.b ' # # ',13,10,0 ROW_CNT equ 7 ; Banner固定行数,和上方定义的行数量匹配 INPUT_BUF ds.b 1 ; 单字符输入缓冲区 * 代码段 ORG $2000 START: * 读取用户输入字符 move.b #1, D1 trap #1 move.b D0, INPUT_BUF * 统一转大写判断是否为A and.b #$DF, INPUT_BUF cmp.b #'A', INPUT_BUF bne EXIT * 初始化外层循环:D0作为行计数器,初始值0,最大到ROW_CNT move.l #str, A0 ; A0存储当前行的首地址 move.w #0, D0 OUTER_LOOP: cmp.w #ROW_CNT, D0 beq EXIT * 内层循环:遍历当前行所有字符逐个输出,直到碰到终止符0 INNER_LOOP: move.b (A0)+, D0 tst.b D0 beq INNER_EXIT move.b #0, D1 ; 陷阱调用功能号:输出单个字符 trap #1 bra INNER_LOOP INNER_EXIT: * 外层循环计数器自增,进入下一行处理 addq.w #1, D0 bra OUTER_LOOP EXIT: move.b #9, D1 trap #1
逻辑说明
- 外层循环:控制Banner输出的行数,行计数寄存器
D0从0开始累加,达到预设的总行数ROW_CNT后终止循环 - 内层循环:每次拿到当前行的首地址后,逐个读取字符输出,碰到每行末尾的终止符
0后退出内层循环,回到外层循环处理下一行 - 所有
str段下的dc.b定义完全保留,没有做任何修改,符合约束要求
内容的提问来源于stack exchange,提问作者duzi
相关产品推荐
相关产品推荐

