首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gameboy模拟器弹出空堆栈

Gameboy模拟器弹出空堆栈
EN

Stack Overflow用户
提问于 2015-10-25 20:29:02
回答 1查看 742关注 0票数 4

我正在开发一个游戏仿真器,在ROM中我得到了操作码0xD1 (pop DE off堆栈),但是堆栈是空的(没有值被推送到它上)。所有未知操作码都会返回一个错误,所有其他指令似乎都正常工作。

这是我编程中的一个错误,ROM,还是程序将DE设置为0x0000的一种快速方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 02:53:22

即使没有将值PUSH编辑到堆栈,POP也会将存储在SP地址的值检索到指定的寄存器对,而SP将由2递增。

在您的示例中,如果已经将SP初始化为(比方说wD000 ),并且预先将WRAM初始化为0,那么POP DE将有效地将0加载到DE,并通过2增加Stack Pointer

代码语言:javascript
复制
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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33334734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档