6502汇编使用CMP、BNE配合TXA/TAX实现循环运行异常求助
代码问题分析及修复方案
核心错误点
- 跳转逻辑完全写反:
cmp #08后的bne exit含义是「当X值不等于8时直接退出循环」。第一次循环执行inx后X值为1,和8比较不相等,直接触发跳转结束逻辑,因此仅能完成$1000第一个地址的写入。 - 寄存器操作冗余且位置错误:
tax放在了比较判断之后,仅当X等于8时才会执行,完全没有起到循环过程中保存累加器值到X寄存器的作用,本身你用X做循环计数器的场景下,也不需要通过累加器中转做比较。
修正后代码
ldx #00 loader lda #$08 sta $1000,x inx cpx #08 ; 直接对X寄存器做值比较,无需中转累加器 bne loader ; 不等于8时跳回循环头继续写入,等于8再退出 exit jsr*
执行流程说明
修正后循环会依次对$1000 + 0到$1000 +7共8个地址写入$08,完全符合你的预期:
- 初始X=0,写入
$1000+0,X自增为1,和8比较不相等,返回循环头 - 重复执行写入、自增、比较逻辑,直到X自增到8时,比较结果相等,不触发跳转,正常退出循环。
内容的提问来源于stack exchange,提问作者Smokeyparkin
相关产品推荐
相关产品推荐

