我正在尝试理解6502汇编中的控制流。
假设我有以下代码:
ControlFlow:
lda mem
cmp #1
bne .sub_one
cmp #2
bne .sub_two
.sub_one:
; sub routine one goes here
jmp .done ; <-------------- without this jmp, .sub_two will execute
.sub_two:
; sub routine two goes here
.done:
rts就我个人而言,我更喜欢switch语句或其他一些控制流结构。上面的JMP也与我有关。似乎有一种更好的方法来处理多个情况,而不需要这种类型的意大利面条代码。
发布于 2013-08-18 22:27:06
6502提供以下控制程序流程,即修改PC寄存器。
(或RTS,如果将stack)
.P导致跳过重置向量<代码>H215<代码>F216就这样。如果你想要更复杂的东西,你需要使用上面的一个或多个来创建它。
实现switch语句的一种方法是首先创建一个指针表,指向switch语句中涉及的所有例程。根据例程的低位字节和高位字节对它们进行拆分:
switchtab_lo .db >routine1, >routine2, >routine3
switchtab_hi .db <routine1, <routine2, <routine3
(我永远记不住>表示低字节还是高字节,不同的汇编程序可能有不同的语法)
然后,假设您想要切换的值是.X格式的,并且vector是两个不从页面末尾开始的字节(为了避免JMP间接错误),并且您已经确保它是一个有效的值:
lda switchtab_lo,X
sta vector
lda switchtab_hi,X
sta vector+1
jmp (vector)每次需要切换时这样做都很乏味,但这就是为什么高级语言被发明出来的原因。
https://stackoverflow.com/questions/14411017
复制相似问题