If statement gbz80-IF语句
我正在VisualboyAdvance上用Z80进行编码,我不知道如何做任何形式的IF语句 我制作了一个脚本,从0xC3A0开始增加屏幕上每个磁贴的值。屏幕数据在0xC507结束 我的代码如下:If statement gbz80-IF语句,if-statement,machine-code,gameboy,If Statement,Machine Code,Gameboy,我正在VisualboyAdvance上用Z80进行编码,我不知道如何做任何形式的IF语句 我制作了一个脚本,从0xC3A0开始增加屏幕上每个磁贴的值。屏幕数据在0xC507结束 我的代码如下: d322|21A0C3|LD HL,C3A0h d325|34 |INC (HL) d326|23 |INC HL d327|00 |NOP . . . d340|00 |NOP d341|C325D3|JP
d322|21A0C3|LD HL,C3A0h
d325|34 |INC (HL)
d326|23 |INC HL
d327|00 |NOP
.
.
.
d340|00 |NOP
d341|C325D3|JP D325h
正如您所见,它不断循环,最终通过增加核心函数使游戏崩溃。我想有一种方法使它在HL达到0xC507时使用0xC9(Ret)
任何帮助都将不胜感激
如果你能向我解释你提供的陈述是如何起作用的,那就太好了。机器代码对我来说是陌生的。请勿使用Visual Boy Advance 其Game Boy仿真精度非常差,尤其是内存访问定时,这是许多商用ROM的一个大问题: 它还存在许多安全漏洞。堆栈缓冲区溢出,使攻击者能够控制您的计算机。以下是其中之一: 根据您的调试需要使用BGB,它具有一个优秀的调试器,其准确性非常好 退出循环的条件必须在跳转指令上完成,如下所示:
01 67 01 ld bc,0167 ;0xC507 - 0xC3A0
21 A0 C3 ld hl,C3A0 ;start of the area we wish to increment
:loop_start
34 inc (hl) ;(hl) ++
23 inc hl ;hl ++
0B dec bc ;bc --
78 ld a,b
B1 or c
20 F9 jr nz,[loop_start] ;if(bc ≠ 0), loop to :loop_start
...