我正在开发一个游戏仿真器,在ROM中我得到了操作码0xD1 (pop DE off堆栈),但是堆栈是空的(没有值被推送到它上)。所有未知操作码都会返回一个错误,所有其他指令似乎都正常工作。
这是我编程中的一个错误,ROM,还是程序将DE设置为0x0000的一种快速方式?
发布于 2015-10-26 02:53:22
即使没有将值PUSH编辑到堆栈,POP也会将存储在SP地址的值检索到指定的寄存器对,而SP将由2递增。
在您的示例中,如果已经将SP初始化为(比方说wD000 ),并且预先将WRAM初始化为0,那么POP DE将有效地将0加载到DE,并通过2增加Stack Pointer。
21 00 C0 ld hl,C000 ;Start of WRAM
01 FF 1F ld bc,1FFF ;Length of WRAM
AF xor a ;a = 0
22 ldi (hl),a ;Blanks WRAM
0B dec bc
78 ld a,b
B1 or c
20 F9 jr nz,0158 ;Loops until WRAM is cleared
21 00 D0 ld hl,D000
F9 ld sp,hl ;SP = 0xD000
D1 pop de ;de = 0x0000, SP = 0xD002另外,请注意,CALL指令将返回地址推送到堆栈,并通过2减少SP。同样,RET从堆栈中检索地址,并通过2增加SP。
https://stackoverflow.com/questions/33334734
复制相似问题