Dag 14
Tekst
Det nyeste innen måltallsrapportering er antall fullførte e-læringsmoduler i SLEDE8 blandt de ansatte, så kunne du gjennomført modul 97672649875ca349? Rapporter tilbake som vanlig når du er ferdig!
Utviklerverktøyet finner du fortsatt her. Se vedlagt dokumentasjon, eller på GitHub.
📎 SLEDE8.md
Linker:
https://slede8.npst.no/
https://github.com/pstnorge/slede8
Oppgave tekst
; Føde består av et ukjent antall verdier, der verdien 0x00 markerer siste verdi.
; Skriv ut verdiene i motsatt rekkefølge.
; Eksempel: 11223344556600 => 665544332211
; Eksempel: 0123456789abcdef00 => efcdab8967452301
Progresjon
Det gikk relativt kjapt å skrive koden, og alle lokale test eksempler passerte med glans.
Jeg tenkte for meg selv at nå er jeg F%!# meg god! SLEDE KONGEN ER JEG!
, og trykket meg kjapt inn på E-Læring for å levere svaret.
HVA?! Verden raser sammen i dette øyeblikket 😂
…noen dager senere…
Etter mye prøving og feiling, fikk jeg et “AHA-moment” da jeg satt og leste over Tastefinger
sine tips om hvordan bruke .DATA,FINN,LAST,LAGR i SNABEL-A meldingen.
Første implementasjon så plusset jeg på 0x01 på r1 og ikke r0 etter å ha lest inn den faste adressen jeg jobbet ut fra!
SKIVE BOM!
Ved å rette opp dette så passerer vi nå test 5 med stil! MEN
Jeg leser heldigvis mer av koden til Tastefinger
får jeg får overnevtne “AHA-moment”, for der står det nemlig:
PLUSS r0, r11 ; legg 1 til r0, slik at vi nå peker på neste verdi i dataen
; OBS! hvis vi gjør dette og r0 går fra 0xFF->0x00 må vi plusse på 1
; i registeret r1 (0xFF + 0x01 = 0x100). Det håndteres ikke her
Dette må jo være årsaken til at test 6 feiler?
Vi får jo helt sikkert en kjempe lang FØDE, som da får r0 til å gå rundt.
OG DET VAR DET!
Jeg endte dog med å skrive om hele koden vertfall 2 ganger, før jeg kom frem til en ganske så fin kode om synes jeg.
Kode
; r10 = innlest føde
; r11 = statisk 0xFF
; r12 = statisk 0x01
; r13 = statisk 0x00
; r14 = hvor mange innlesnigner som er foretatt
; r15 = hvor mange innlesninger som er foretatt hvis r14 "går rundt"
SETT r11, 0xFF
SETT r12, 0x01
;; FINN LAGRINGS PLASSEN
FINN 0x0100
;;;;;;;;;;;;;;; INNLESING
les:
LES r10
LIK r10, r13 ; SJEKK OM INNLEST FØDE == 0x00
BHOPP skrivUt ; HOPP OM FØDE == 0x00
LAGR r10
LIK r0, r11 ; r0 has reached it's maximum!
BHOPP plussSerie
PLUSS r0, r12
HOPP les
plussSerie:
PLUSS r1, r12
SETT r0, 0x00
HOPP les
;;;;;;;;;;;;;;;;; UTSKRIFT
skrivUt:
LIK r0, r13
BHOPP minusSerie
MINUS r0, r12
skrivUtContinue1:
LAST r3 ;
LIK r3, r13
BHOPP ferdig
SKRIV r3
LIK r0, r13 ; SJEKK OM r1 har nådd 0x00
BHOPP minusSerie
MINUS r0, r12
HOPP skrivUtContinue1
minusSerie:
MINUS r1, r12
SETT r0, 0xFF
HOPP skrivUtContinue1
ferdig:
STOPP
Flag
PST{InReverseCountryEverythingIsPossible}