首页 > 解决方案 > 有人可以帮我理解一些汇编语言吗?

问题描述

很抱歉,这不是正确的地方,但我正拼命地试图理解这个汇编脚本中发生的事情(我假设就是这样,基于我已经完成的谷歌搜索时间。)它是口袋妖怪黄色版的rom,我了解一些但不是全部。我想如果我能得到一些帮助来理解这一段在做什么,我可以弄清楚其余的。代码如下所示:

PalletTownScript:
    CheckEvent EVENT_GOT_POKEBALLS_FROM_OAK
    jr z, .next
    SetEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS
.next
    call EnableAutoTextBoxDrawing
    ld hl, PalletTownScriptPointers
    ld a, [wPalletTownCurScript]
    jp JumpTable

我的理解是第一行只是将其余部分放入名为“PalletTownScript”的标签中,只是稍后引用的名称。第二行检查是否发生了某个事件,详细信息在另一个文件中。到目前为止一切都很好。第三行是对我来说变得复杂的地方。我确定“jr”跳转到脚本的另一部分,然后返回这里?我认为?但是,据我所见,每个示例只有一个参数,而这一行有两个。是跳到z吗?什么是z?我已经搜索了这个文件的其余部分,并且没有名为 z 的部分。z 是另一个函数吗?另一个参数是 .next,据我所知,它是 PalletTownScript 部分的一个子部分。所以它跳到那里是有道理的(但为什么要跳呢?如果它 s 就在那里,它不就是这样做吗?)但我仍然不知道“z”在那里做什么。在.next中,它调用了一些东西并加载了一些其他东西,这很好,但最后,它跳转到另一个文件中的JumpTable(我假设它全部编译后都没有关系,所以我'我不关心那个),但它仍然跳转到.next,然后再次跳转到JumpTable吗?它什么时候回去做那个 SetEvent?之后它会去哪里?m 不关心),但它仍然跳转到 .next,然后再次跳转到 JumpTable?它什么时候回去做那个 SetEvent?之后它会去哪里?m 不关心),但它仍然跳转到 .next,然后再次跳转到 JumpTable?它什么时候回去做那个 SetEvent?之后它会去哪里?

我以前从未处理过大会,这对我来说非常困惑,所以如果有人可以在这方面给我一些帮助,我将不胜感激。谢谢!

标签: assemblygameboy

解决方案


jr z, .next是有条件的相对跳跃。只有在设置了零标志(在 F 寄存器中)时才会进行跳转。

如果事件EVENT_GOT_POKEBALLS_FROM_OAK已经发生,则事件EVENT_PALLET_AFTER_GETTING_POKEBALLS变为已设置。

如果没有,SetEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS则跳过。

CheckEvent和宏在SetEvent这里定义:https ://github.com/pret/pokered/blob/master/macros/scripts/events.asm


推荐阅读