Kod: Markera allt
.ORG 1000
LDA #178
loop:
ROL
BCC skipp
LDX#$01
jmp loop
skipp:
LDX#$00
jmp loop
RTS
Tillägg: Först kommer en okänd bit, sen innehållet repeterat.
Kod: Markera allt
.ORG 1000
LDA #178
loop:
ROL
BCC skipp
LDX#$01
jmp loop
skipp:
LDX#$00
jmp loop
RTS
Sluta slarva, börja fundera på vad du gör, om du inte förstår, rita grafiskt med pilar osv var bitarna tar vägen till vilka register osv.Bara en slarvig test på vägen
Nej det gör man inte, skall du multiplicera med 2 använder du shift-left , vad det nu kan bli hos din processor.Har för mig att man anv ROL när man mutiplicerar(*2). Skall nog inte vara så svårt att hitta ett färdigt exempel och analysera.
De hjälper väldigt bra om du läser dem. Om du inte vill läsa dem så är det givetvis ingen nytta.1802 skrev:På viket sätt hjälper ovan 2 inlägg
Kod: Markera allt
; ---- shifta ut bitar en och en
;-------- indata i r17 ----------
; ------- r16 används ---------
ldi r16, 8 ; r16 använs att räkna varv
loop:
rol r17 ; flytta ut översta biten till carryflaggan.
brcc nolla ; Branch if Carry Cleared
; ----- etta --- gör något här ---
rjmp forts
nolla:
; ----- nolla --- gör något här ---
dec r16
brne loop
; --- end ---
Kod: Markera allt
; AslBit0.2.65s
;/åtta bitar finns i register "r" som ska analyseras.
; sätt loop-räknare till 8
;loop:
; rotera "r" vänster med ROL så att bit 7 hamnar i carry
; hoppa till "off" om carry är nolla.
; utför "on"-rutin
; hoppa till forsätt_loop
;off:
; utför off-rutin
;fortsätt_loop:
; minska loop-räknade med ett (dec)
; hoppa till loop om loopräknare inte är noll.
; Nedan följer inte ovan slaviskt.
.ORG 1000
LDA #189 ; indata
LDY #$08 ; kör 8 bitar
loop:
DEY
ASL ; rol kan också funka i vissa fall
BCC skipp ; hoppa om inte carry satt
jsr on
CPY #$00 ; kolla om 8 varv gått
BEQ end ; avsluta om sant
JMP loop
skipp:
jsr off
CPY #$00 ; kolla om 8 varv gått
BEQ end ; avsluta om sant
JMP loop
end:
RTS
on:
LDX #$01
stx $d021 ; Ger färgblink på C64
RTS
off:
LDX #$00
stx $d021 ; Ger färgblink på C64
RTS