【BA4988】_get_current_bank_number函数
反汇编:
U8 _get_current_bank_number() { _BK_SEL = 0x05 if (_BK_ADRH > *0x03E4) { BankSwitchTemp = 0x00 tmp = *(U16 *)(&_BK_ADRL) - (((*(U8 *)0x03E4) << 8) | *(U8 *)0x03E5) } else { BankSwitchTemp = 0xE0 tmp = *(U16 *)(&_BK_ADRL) - *(U16 *)0x2029 } BankSwitchTemp += 0xFF & (tmp >> 2 ) return BankSwitchTemp }
汇编:
E8F8 [4C A5 F4]: JMP $F4A5 @ 转移
F4A5 [08 78 8A]: PHP @ 处理器状态压入堆栈
F4A6 [78 8A 48]: SEI @ 置中断禁止位
F4A7 [8A 48 98]: TXA @ 变址寄存器X送累加器
F4A8 [48 98 48]: PHA @ 累加器压入堆栈
F4A9 [98 48 A9]: TYA @ 变址寄存器Y送累加器
F4AA [48 A9 05]: PHA @ 累加器压入堆栈
F4AB [A9 05 85]: LDA #$05 @ 送累加器
F4AD [85 0C A5]: STA $0C = #$05 @ 存累加器
F4AF [A5 0E CD]: LDA $0E = #$D2 @ 送累加器
F4B1 [CD E4 03]: CMP $03E4 = #$0E @ 累加器与存储器比较
F4B4 [B0 14 A9]: BCS $F4C8 @ 进位为“1”分支
F4B6 [A9 E0 8D]: LDA #$E0 @ 送累加器
F4B8 [8D 00 20]: STA $2000 = #$E0 @ 存累加器
F4BB [A5 0D 38]: LDA $0D = #$32 @ 送累加器
F4BD [38 ED 29]: SEC @ 置进位标志
F4BE [ED 29 20]: SBC $2029 = #$2F @ 带借位的减法
F4C1 [AA A5 0E]: TAX @ 累加器送变址寄存器X
F4C2 [A5 0E ED]: LDA $0E = #$D2 @ 送累加器
F4C4 [ED 2A 20]: SBC $202A = #$02 @ 带借位的减法
F4C7 [4C DB F4]: JMP $F4DB @ 转移
F4CA [A9 00 8D]: LDA #$00 @ 送累加器
F4CC [8D 00 20]: STA $2000 = #$00 @ 存累加器
F4CF [A5 0D 38]: LDA $0D = #$32 @ 送累加器
F4D1 [38 ED E5]: SEC @ 置进位标志
F4D2 [ED E5 03]: SBC $03E5 = #$80 @ 带借位的减法
F4D5 [AA A5 0E]: TAX @ 累加器送变址寄存器X
F4D6 [A5 0E ED]: LDA $0E = #$D2 @ 送累加器
F4D8 [ED E4 03]: SBC $03E4 = #$0E @ 带借位的减法
F4DB [4A A8 8A]: LSR @ 右移
F4DC [A8 8A 6A]: TAY @ 累加器送变址寄存器Y
F4DD [8A 6A AA]: TXA @ 变址寄存器X送累加器
F4DE [6A AA 98]: ROR @ 循环右移
F4DF [AA 98 4A]: TAX @ 累加器送变址寄存器X
F4E0 [98 4A 8A]: TYA @ 变址寄存器Y送累加器
F4E1 [4A 8A 6A]: LSR @ 右移
F4E2 [8A 6A 18]: TXA @ 变址寄存器X送累加器
F4E3 [6A 18 6D]: ROR @ 循环右移
F4E4 [18 6D 00]: CLC @ 清进位标志
F4E5 [6D 00 20]: ADC $2000 = #$00 @ 带进位加
F4E8 [8D 00 20]: STA $2000 = #$EC @ 存累加器
F4EB [68 A8 68]: PLA @ 堆栈弹回累加器
F4EC [A8 68 AA]: TAY @ 累加器送变址寄存器Y
F4ED [68 AA AD]: PLA @ 堆栈弹回累加器
F4EE [AA AD 00]: TAX @ 累加器送变址寄存器X
F4EF [AD 00 20]: LDA $2000 = #$EC @ 送累加器
F4F2 [28 60 08]: PLP @ 堆栈弹回处理器状态
F4F3 [60 08 78]: RTS @ 子程序返回