Voglio dividere un numero di 16 bit per due. La mia soluzione al problema è stata, come di seguitoCome dividere il numero di 16 bit per 2 in 6502 asm?
lda $17 ;set high byte
ldx $32 ;set low byte
divide:
PHA ;push A to stack
TXA ;X > A
LSR ;divide low byte by 2
TAX ;A > X
PLA ;pull A from stack
LSR ;divide high byte by 2
BCC + ;C=0, skip
PHA ;while C=1
TXA ;add $80 to the lsb
ADC#$80
TAX
PLA
+
+printDecimal $0400+120
Tutto PHA/PLA
inganno è perché il mio printDecimal
macro legge MSB da A e LSB da X.
Quando controllo alternative in linea, ho trovato 4 istruzioni alternativa a mio modesto routine di divisione. Ma non ho capito.
div2:
LDA counter_hi ;Load the MSB
ASL ;Copy the sign bit into C
ROR counter_hi ;And back into the MSB
ROR counter_lo ;Rotate the LSB as normal
LDA counter_hi
LDX counter_lo
+printDecimal $0400+40
Come funziona?
LSR = CLC + ROR – i486
questo. Moltiplicazioni e divisioni per (multipli di) due non sono altro che bitshift a sinistra oa destra. 'LSR hi-byte, ROR lo-byte' raggiungerà il tuo obiettivo di divisione a 16 bit senza risme di codice di loop, swap di registro, ecc. –
@ i486. Grazie I486. Ho modificato la risposta. – Hoopje