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

8086汇编点阵屏迷宫自动寻路程序开发问题咨询

迷宫寻路程序问题咨询

任务背景

我正在完成作业,使用包含ASCII LCD显示屏、七段显示屏的Emulation Kit,已在Dot Matrix Display Output上实现迷宫。当前任务为:在该设备上设置一个点,使其在3分钟内自动逃出迷宫;若该点无法在3分钟内逃出,程序需在ASCII LCD Display Output上打印“I couldn’t get out”的提示信息。

给定寻路算法

  • 点优先向右移动;
  • 遇障碍时向上移动,且向上移动的每一步需检查右侧是否可通行,若可通行则转向右侧;
  • 若向上、向右均不可行,则选择向下移动,向下移动的每一步仍需检查右侧是否可通行;
  • 最后选择向左移动,向左移动的每一步需按顺序检查向上、向下方向是否可通行。

现有代码

org 100h ;-----Data Section-----;
;#start=Emulation Kit.exe#
MOV DX, 2000h
CALL MAZE_1
MOV DX, 2005h
CALL MAZE_2
MOV DX, 200Ah
CALL MAZE_3
MOV DX, 200Fh
CALL MAZE_4
MOV DX, 2014h
CALL MAZE_5
MOV DX, 2019h
CALL MAZE_6
MOV DX, 201Eh
CALL MAZE_7
MOV DX, 2023h
CALL MAZE_8
MOV DX, 2000h
MOV AL , 00101111b; Dot's position
MOV Maze1[0],AL
OUT DX,AL
;-----Code Section-----;
MOV DI,0
MOVERIGHT:
TEST Maze1[DI+1],00100000b ; checks next bit is obstacle or not
JNZ MOVEUP ; obstacle occurs if AL>0
ADD Maze1[DI+1], 00100000b ; moves next column
SUB Maze1[DI],00100000b ; updates previous column
INC DI
MOV DX,2000h
CALL MAZE_1
LOOP MOVERIGHT
MOVEUP:
TEST Maze1[DI+1],00010000b
JNZ MOVELEFT:
ADD Maze1[DI],00001000b
SUB Maze1[DI], 00010000b
MOV DX,2000h
CALL MAZE_1
LOOP MOVEUP
MOVEDOWN:
TEST Maze1[DI-1],01000000b
JZ MOVELEFT
ADD Maze1[DI],01000000b
SUB Maze1[DI],00100000b
MOV DX,2000h
CALL MAZE_1
LOOP MOVEDOWN
MOVELEFT:
TEST Maze1[DI-1],00100000b
JNZ EXIT
CMP DI,0
JE MOVEDOWN:
ADD Maze1[DI-1],00100000b
SUB Maze1[DI],00100000b
DEC DI
MOV DX,2000h
CALL MAZE_1
LOOP MOVELEFT
EXIT:
ret
Maze1 db 00001111b,01000001b,01011001b,01010001b,01110111b,01110101b,01000001b,01011101b,01001001b,01100110b,01001110b,01000001b,01011101b,01000011b,01110001b, 01000011b,01011101b,01010001b,01000001b,01110111b,01000010b,01011110b,01000001b,01111010b,01000001b, 00100011b,01001101b,01000001b,01001001b,01001011b,01110011b,01000001b,01011101b,01001001b,01001011b,01110010b,01011001b,01000101b,01010001b,00001110b
Posy db 01000000b,00100000b,00010000b,00001000b,00000100b,00000010b,00000001b ; Possibilities on y axis
;;;;;;;;;;;;;;;;;;;
MAZE_1 PROC
MOV CX,5
MOV SI,0
NEXTM1:
MOV AL, Maze1[SI]
OUT DX,AL
INC SI
INC DX
LOOPNE NEXTM1
RET
MAZE_1 ENDP
;;;;;;;;;;;;;;;;;;
MAZE_2 PROC
MOV CX,5
MOV SI,5
NEXTM2:
MOV AL, Maze1[SI]
OUT DX,AL
INC SI
INC DX
LOOPNE NEXTM2
RET
MAZE_2 ENDP
;;;;;;;;;;;;;;;;;;
MAZE_3 PROC
MOV CX,5
MOV SI,10
NEXTM3:
MOV AL, Maze1[SI]
OUT DX,AL
INC SI
INC DX
LOOPNE NEXTM3
RET
MAZE_3 ENDP
;;;;;;;;;;;;;;;;;;
MAZE_4 PROC
MOV CX,5
MOV SI,15
NEXTM4:
MOV AL, Maze1[SI]
OUT DX,AL
INC SI
INC DX
LOOPNE NEXTM4
RET
MAZE_4 ENDP
;;;;;;;;;;;;;;;;;;
MAZE_5 PROC
MOV CX,5
MOV SI,20
NEXTM5:
MOV AL, Maze1[SI]
OUT DX,AL
INC SI
INC DX
LOOPNE NEXTM5
RET
MAZE_5 ENDP
;;;;;;;;;;;;;;;;;;
MAZE_6 PROC
MOV CX,5
MOV SI,25
NEXTM6:
MOV AL, Maze1[SI]
OUT DX,AL
INC SI
INC DX
LOOPNE NEXTM6
RET
MAZE_6 ENDP
;;;;;;;;;;;;;;;;;;
MAZE_7 PROC
MOV CX,5
MOV SI,30
NEXTM7:
MOV AL, Maze1[SI]
OUT DX,AL
INC SI
INC DX
LOOPNE NEXTM7
RET
MAZE_7 ENDP
;;;;;;;;;;;;;;;;;;
MAZE_8 PROC
MOV CX,5
MOV SI,35
NEXTM8:
MOV AL, Maze1[SI]
OUT DX,AL
INC SI
INC DX
LOOPNE NEXTM8
RET
MAZE_8 ENDP
;;;;;;;;;;;;;;;;;;

问题咨询

  • 当前程序仅能在X轴单一行移动,未实现Y轴方向的移动,也未完全遵循给定算法,请问如何实现Y轴移动?
  • 代码中已定义Posy数组,但SI、DI寄存器已被占用,如何使用BX寄存器遍历该数组?
  • 针对需适配8个不同端口的场景,是否有更简便的实现方式?寻求相关修正与帮助,可提供代码参考。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:56:59