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

如何在MARIE汇编中初始化指向标签地址的全局指针数据

结论

标准MARIE汇编(含你使用的marie.js模拟器)原生不支持直接在DEC/HEX伪指令中传入标签作为初始化值,你写的pointer, DEC array确实会报语法错误,但可以通过运行时动态赋值的方案实现同等需求,不需要手动计算地址、也不需要两次汇编。

具体实现方案

核心逻辑是利用MARIE指令的地址字段本身会自动解析标签的特性,把标签地址通过指令运算写入指针变量:

  • 编写一条加载目标标签的指令,这条指令在汇编时会自动把标签对应的内存地址填入指令的地址位
  • MARIE指令为16位格式,高4位是操作码,低12位是地址,把上述指令的低12位提取出来就是目标标签的内存地址
  • 把提取出的地址写入指针变量即可完成初始化

可运行示例代码

/ 主程序入口,跳过数据区
ORG 0
JUMP Start

/ 指针变量
pointer, DEC 0

/ 常量:提取地址用的掩码,对应二进制0000111111111111
AddrMask, HEX 0FFF

/ 目标数组
array, DEC 1000
       DEC 1001
       DEC 1002

One, DEC 1

Start,
  / --------------------------
  / 初始化pointer为array的地址
  / --------------------------
  Load GetArrayAddr / 把下方的Load array指令本身加载到累加器AC
  AND AddrMask      / 抹除高4位操作码,剩余低12位就是array的内存地址
  Store pointer     / 写入指针变量,初始化完成

  / --------------------------
  / 测试1:读取array[0]
  / --------------------------
  LoadI pointer     / 此时AC值为1000,验证初始化有效

  / --------------------------
  / 测试2:前移指针读取array[1]
  / --------------------------
  Load pointer
  Add One
  Store pointer
  LoadI pointer     / 此时AC值为1001,验证指针操作正常

  HALT

/ 注意:这条指令仅用于存储array的地址,永远不会被执行
GetArrayAddr, Load array

方案说明

该方案完全兼容标准MARIE汇编规则,不需要手动计算地址、也不需要两次汇编,在marie.js模拟器中可直接运行通过。

内容的提问来源于stack exchange,提问作者Erik Eidt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:04