Joh*_*arr 4 assembly 6502 retro-computing
我试图了解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
Run Code Online (Sandbox Code Playgroud)
就个人而言,我很喜欢switch语句或其他控制流结构。上面的JMP也与我有关。似乎有一种更好的方法来处理多种情况,而无需使用此类意大利面条式代码。
如果案例数足够大,则跳转表可能会很有用。在左侧,有一个模板(未经测试),用于跳转到标签,从而将正确的地址压入堆栈并返回。右侧有一个基于jsr 的差异例程,_out:从每个子例程返回后,该例程将在标签处继续。进位逻辑在6502上取反,表示如果(Acc> = Imm),将置位。
; goto label[n] vs. call label[n]
lda variable
cmp #MAX_PLUS_ONE
bcs _out
tax
lda table_hi, X
pha vs. sta jsrcmd+2
lda table_lo, X
pha vs. sta jsrcmd+1
rts vs. jsrcmd: jsr 1000 ; self modify
_out:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2186 次 |
| 最近记录: |