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

如何在MARIE汇编语言中仅打印数组的5个元素

MARIE汇编打印数组前5个元素的死循环问题修复

原代码的核心错误

  • 数组地址未正确初始化:X被定义为DEC 0,导致Load X加载的是0而非数组Array的起始地址,根本没指向目标数组。
  • 地址计算逻辑混乱:循环中用Addr + Count -1更新地址,会导致地址每次往错误偏移方向移动,完全不符合数组遍历逻辑。
  • 缺失打印指令:代码仅有打印注释,没有Output指令,无法输出元素内容。
  • 寻址方式错误:要访问Addr指向的数组元素,需用间接寻址LoadI,而非直接加载Addr的数值。
  • 循环退出条件错误:Skipcond 000仅在累加器值小于0时跳转,计数器从5递减到0时,累加器等于0,不会触发跳转,导致循环无法终止。

修复后的代码

ORG 100

Main,    Load  X           // 加载数组的起始地址
         Store Addr
         Load  5           // 初始化计数器,设置要打印的元素数量为5
         Store Count
Loop,    LoadI Addr        // 间接寻址,加载当前Addr指向的数组元素
         Output            // 打印该元素
         Load  Addr
         Add   1           // 地址自增1,指向下一个数组元素
         Store Addr
         Load  Count
         Subt  1           // 计数器减1
         Store Count
         Skipcond 800      // 如果计数器>0,继续循环
         Jump  Loop
         Halt

Addr,    DEC   0
Count,   DEC   0
X,       DEC   Array       // X指向数组Array的起始地址
Array,   DEC   10          // 示例数组(包含10个元素)
         DEC   20
         DEC   30
         DEC   40
         DEC   50
         DEC   60
         DEC   70
         DEC   80
         DEC   90
         DEC   100

修复说明

  1. 初始化数组地址:将X设置为DEC Array,确保Load X能获取到数组的正确起始地址。
  2. 正确遍历数组:每次循环后将Addr加1,依次指向数组的下一个元素,符合MARIE单字元素的存储规则。
  3. 添加打印指令:用Output指令输出当前加载的数组元素。
  4. 使用间接寻址:LoadI Addr加载Addr地址中存储的内存单元的值,也就是目标数组元素的内容。
  5. 修正循环退出条件:Skipcond 800会在累加器(此时存储计数器值)大于0时跳过下一条指令,继续循环;当计数器减到0时,不会跳过,直接执行Halt终止程序。

内容的提问来源于stack exchange,提问作者Buddhinatha Kodituwakku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:48:00