Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 8086 asm递归的问题_Assembly_Recursion_X86 16 - Fatal编程技术网

Assembly 8086 asm递归的问题

Assembly 8086 asm递归的问题,assembly,recursion,x86-16,Assembly,Recursion,X86 16,我的ITEM3程序应该做的是检查在“鹅的游戏”游戏板上,placemarker的最终目的地是否已被占用,如果已被占用,则返回,直到找到一个空单元格。所以我想使用递归过程。 编辑: 代码如下: 掷骰子(或计算单元格给予玩家的奖励)后,按下placemarker的计算位置后调用该过程 但是,当调用该过程时,placemarker不会发生任何变化。错在哪里?谢谢 你可以找到完整的代码。这是一篇老文章,但我认为应该发布一个明确的答案 问题是对ITEM3过程的调用已更改BP注册表,因此以下涉及BP的说明无

我的ITEM3程序应该做的是检查在“鹅的游戏”游戏板上,placemarker的最终目的地是否已被占用,如果已被占用,则返回,直到找到一个空单元格。所以我想使用递归过程。 编辑:

代码如下: 掷骰子(或计算单元格给予玩家的奖励)后,按下placemarker的计算位置后调用该过程

但是,当调用该过程时,placemarker不会发生任何变化。错在哪里?谢谢


你可以找到完整的代码。

这是一篇老文章,但我认为应该发布一个明确的答案

问题是对
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