Dag 14

image
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.
image
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
image

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.

image

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}