Talk:Learning 6502 assembly

Latest comment: 4 months ago by Dan Polansky in topic Purpose of using BPL

Purpose of using BPL

edit

I am trying to figure out why one would ever use BPL (and BMI). The following example shows an idiom that sees some use:

LDA #1
LDY #$7F
LOOP:
STA $200, Y
DEY
BPL LOOP    ; If $80 > Y >= 0, branch to LOOP

If we switch BPL to BNE, the loop body will never see the index value of 0. A limitation is that the initial index value can be at most #$80. On the other hand, we can move DEY above the loop body and do without BPL:

LDA #1
LDY #$80
LOOP:
DEY
STA $200, Y
BNE LOOP    ; If Y is not 0, branch to LOOP

However, the latter only works because the loop body after DEY does not impact Z flag. If z flag was impacted by the loop body, one would need an additional CPY #0 before the BNE; and thus, using BPL is cheaper.

Another use case seems to be as a test for the most significant bit e.g. in the Atari BASIC floating point representation, where the first of the 6 bytes features the sign and the exponent, and one would surely want to test for that sign.

--Dan Polansky (discusscontribs) 11:46, 21 August 2024 (UTC)Reply

Return to "Learning 6502 assembly" page.