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

如何在LMC中实现动态大小表格并向不同地址存入数据?

LMC动态表格存储实现方案

你的核心问题是未利用间接寻址模拟数组的动态存储,原代码始终将数据写入同一固定地址,无法实现多位置存储。LMC没有原生数组语法,但可以通过「指针+间接寻址」实现动态表格,具体实现如下:

实现思路

  • 先输入表格大小N,存入变量SIZE;
  • 用PTR变量存储表格的起始内存地址,每存入一个数据就将PTR加1,指向下一个存储位置;
  • 用计数器COUNT记录已存入数据的数量,当COUNT等于SIZE时停止输入;
  • 可选添加验证环节:遍历表格输出所有数据,确认存储结果。

修正后的LMC代码

LDA     TAB         ; 加载表格起始地址到累加器(需根据模拟器内存分配调整,此处假设TAB地址为16)
               STA     PTR         ; 初始化写入指针为表格起始地址
               INP                ; 输入表格大小N
               STA     SIZE
               LDA     ZERO
               STA     COUNT       ; 初始化计数器为0

LOOP           LDA     COUNT
               SUB     SIZE
               BRZ     INIT_PRINT  ; 计数器等于表格大小,结束输入准备打印
               INP                ; 输入要存入的数据
               STA     [PTR]       ; 间接寻址:将数据写入指针指向的内存地址
               LDA     PTR
               ADD     ONE
               STA     PTR         ; 指针+1,指向表格下一个位置
               LDA     COUNT
               ADD     ONE
               STA     COUNT       ; 计数器+1
               BRA     LOOP

INIT_PRINT     LDA     PTR
               SUB     ONE
               STA     PTR_PRINT   ; 初始化打印指针为最后一个数据的地址
               BRA     PRINT_LOOP

PRINT_LOOP     LDA     COUNT
               BRZ     HALT        ; 计数器归0,打印完成
               LDA     [PTR_PRINT] ; 间接寻址加载当前指针指向的数据
               OUT                ; 输出数据
               LDA     PTR_PRINT
               SUB     ONE
               STA     PTR_PRINT   ; 指针-1,指向前一个数据位置
               LDA     COUNT
               SUB     ONE
               STA     COUNT       ; 计数器-1
               BRA     PRINT_LOOP

HALT           HLT

SIZE           DAT                 ; 存储表格大小
PTR            DAT                 ; 写入用的地址指针
COUNT          DAT                 ; 计数变量
PTR_PRINT      DAT                 ; 打印用的地址指针
ZERO           DAT     0
ONE            DAT     1
TAB            DAT                 ; 表格起始位置,后续内存自动分配用于存储数据

关键说明

  • 间接寻址:STA [PTR]是核心逻辑,它会将累加器的值存入PTR变量所指向的内存地址,通过修改PTR的值就能动态切换存储位置;
  • 模拟器兼容性:部分LMC模拟器对间接寻址的语法支持不同,如果[PTR]不生效,可替换为STA PTR,I(I表示间接寻址);
  • 打印逻辑:示例中从最后一个数据往前输出,若需要从第一个开始输出,只需调整打印指针的初始值和增减方向即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:05:35