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

8086 MS-DOS汇编下使用TASM5打印字符串数组问题求助

问题根因

你的代码存在两处核心语法与逻辑错误,直接导致仅第一个字符串可以正常打印:

  • MASM/TASM默认规则下,mov bx, dir_array会被解析为读取dir_array标号指向的内存单元存储的值,而非取dir_array本身的偏移地址。由于dir_array第一个元素恰好是dos_dir的偏移,所以bx最终存储的是第一个字符串的地址,和你调试观察到的现象完全一致。
  • 循环内的lea dx, [bx]逻辑错误:dir_array数组的每个元素存储的是对应打印字符串的偏移地址,你需要将bx指向的内存单元的内容赋值给dx,而非把bx本身的值作为字符串地址传入DOS中断。
兼容8086指令集的最优修复方案

仅需要修改两行核心代码即可,无需调整其他逻辑,修改后代码简洁且运行效率最高,无冗余指令:

main    proc near   
; 第一处修改:加offset明确取dir_array数组的首偏移地址
mov     bx, offset dir_array
mov     ah,9
dirloop:
; 第二处修改:用mov而非lea,取出数组元素中存储的字符串偏移地址
mov     dx, [bx]
int     21h
add     bx,2
cmp     bx, offset dir_array + dir_array_size
jl      dirloop

mov     ax,4C00h
int     21h
main    endp

补充说明

你代码中其余部分的字符串定义、数组大小计算逻辑均符合要求,修改后即可依次打印数组中所有5个路径字符串,完全兼容8086指令集与MS-DOS平台的.COM程序格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:04