Assembly 8086 asm递归的问题
我的ITEM3程序应该做的是检查在“鹅的游戏”游戏板上,placemarker的最终目的地是否已被占用,如果已被占用,则返回,直到找到一个空单元格。所以我想使用递归过程。 编辑: 代码如下: 掷骰子(或计算单元格给予玩家的奖励)后,按下placemarker的计算位置后调用该过程 但是,当调用该过程时,placemarker不会发生任何变化。错在哪里?谢谢Assembly 8086 asm递归的问题,assembly,recursion,x86-16,Assembly,Recursion,X86 16,我的ITEM3程序应该做的是检查在“鹅的游戏”游戏板上,placemarker的最终目的地是否已被占用,如果已被占用,则返回,直到找到一个空单元格。所以我想使用递归过程。 编辑: 代码如下: 掷骰子(或计算单元格给予玩家的奖励)后,按下placemarker的计算位置后调用该过程 但是,当调用该过程时,placemarker不会发生任何变化。错在哪里?谢谢 你可以找到完整的代码。这是一篇老文章,但我认为应该发布一个明确的答案 问题是对ITEM3过程的调用已更改BP注册表,因此以下涉及BP的说明无
你可以找到完整的代码。这是一篇老文章,但我认为应该发布一个明确的答案 问题是对
ITEM3
过程的调用已更改BP注册表
,因此以下涉及BP
的说明无法正确执行
解决方法是在调用过程之前按一下BP键,然后在调用过程之后立即弹出
ITEM3 PROC
MOV BP, SP
PUSHA
MOV BX, [BP+2]
CMP BX, 0
JE no_collision
MOV DL, PLAYER
CMP BL, P1_POS
JE collisionp1
p2collision:
CMP BL, P2_POS
JE collisionp2
p3collision:
CMP BL, P3_POS
JE collisionp3
JMP no_collision
collisionp1:
CMP DL, 1
JE p2collision
JMP collision
collisionp2:
CMP DL, 2
JE p3collision
JMP collision
collisionp3:
CMP DL, 3
JE no_collision
collision:
DEC BL
PUSH BP ; HERE
PUSH BX
CALL ITEM3
POP BX
POP BP ; AND HERE
MOV [BP+2], BX
no_collision:
POPA
RET
ITEM3 ENDP
使用调试器单步执行代码并查看哪里出错。另外,请注释您的代码,特别是如果您希望他人帮助的话。注:尽可能避免递归。@Jester你说得对,我很匆忙。我对代码添加了一些注释。我试图调试,但当调用该过程时,调试器没有进入该过程的代码中。我再试一次。目前,我的目标是在明天早上之前完成,如果不行,我将切换到迭代。。但我想更改我能更改的最少行,但我没有看到。谢谢大家的关注。@EnricoBalsamo程序项目3和项目1c都遇到了同样的问题。很高兴你找到了解决办法。也许你可以发布一个简短的答案,说明你是如何解决的。@user3144770你是对的,我很粗鲁。这是全部正确且有效的代码
ITEM3 PROC
MOV BP, SP
PUSHA
MOV BX, [BP+2]
CMP BX, 0
JE no_collision
MOV DL, PLAYER
CMP BL, P1_POS
JE collisionp1
p2collision:
CMP BL, P2_POS
JE collisionp2
p3collision:
CMP BL, P3_POS
JE collisionp3
JMP no_collision
collisionp1:
CMP DL, 1
JE p2collision
JMP collision
collisionp2:
CMP DL, 2
JE p3collision
JMP collision
collisionp3:
CMP DL, 3
JE no_collision
collision:
DEC BL
PUSH BP ; HERE
PUSH BX
CALL ITEM3
POP BX
POP BP ; AND HERE
MOV [BP+2], BX
no_collision:
POPA
RET
ITEM3 ENDP