V zadaném řetězci program určí počty slov se stejnou délkou. Počty uloží do paměti v desítkové soustavě.

zadání: V zadaném řetězci program určí počty slov se stejnou délkou. Počty uloží do paměti v desítkové soustavě.
rozbor: Vzhledem k tomu,že procesor H8S od renesas,pro který má být úloha realizována,má pouze 7 24bitových registrů, je třeba vymyslet jak s nimi naložit. Rozložil jsem je takto:

  • Zásobník není třeba, registr ER7 si nechám na pomocné proměnné
  • registry ER1-ER5 použiji k ukládání počtu slov délky 1,2,..,9,10 a více
  • registr R6L použiji pro uchování příznaku,zda je již konec řetězce a program má připočíst poslední slovo a skončit.

zde je samotný kód programu:

.h8300s

.data ; začátek datové sekce
TEXT: .asciz „q q q q q q q q q q Qqq qq QQ QQQQ“
VAR1: .space 1
VAR2: .space 1
VAR3: .space 1
VAR4: .space 1
VAR5: .space 1
VAR6: .space 1
VAR7: .space 1
VAR8: .space 1
VAR9: .space 1
VAR10: .space 1
.text ; začátek kódové sekce
.global _start ; _start je globální návěští

_start:
MOV.L #TEXT, ER0 ;presunu odkaz na zacatek textu
xor.l ER7,ER7 ;vymazu registru pro ukladani poctu..
xor.l ER1,ER1
xor.l ER2,ER2
xor.l ER3,ER3
xor.l ER4,ER4
xor.l ER5,ER5
xor.l ER6,ER6
smycka: MOV.B @ER0, R7H ;nactu prvni znak
CMP.B #0, R7H ;kdyz je to znak konce textu
BEQ FINALIZE
CMP.B #' ', R7H ;kdyz je to znak mezery
BEQ ULOZ ;tak je cas ulozit to
add.b #1,R7L ;pridame jednicku k pocitadlu

INC.L #1, ER0 ;posuneme ukazatel ER0 na dalsi znak
BRA smycka

ULOZ: CMP.B #1, R7L
BEQ JEDNA
CMP.B #2, R7L
BEQ DVA
CMP.B #3, R7L
BEQ TRI
CMP.B #4, R7L
BEQ CTYRI
CMP.B #5, R7L
BEQ PET
CMP.B #6, R7L
BEQ SEST
CMP.B #7, R7L
BEQ SEDM
CMP.B #8, R7L
BEQ OSM
CMP.B #9, R7L
BEQ DEVET
CMP.B #9, R7L
BHI VIC
BRA KON

JEDNA: add.b #1,R1L
bra REINI
DVA: add.b #1,R1H
bra REINI
TRI: add.b #1,R2L
bra REINI
CTYRI: add.b #1,R2H
bra REINI
PET: add.b #1,R3L
bra REINI
SEST: add.b #1,R3H
bra REINI
SEDM: add.b #1,R4L
bra REINI
OSM: add.b #1,R4H
bra REINI
DEVET: add.b #1,R5L
bra REINI
VIC: add.b #1,R5H
bra REINI

REINI: CMP.B #1, R6L
BEQ COPYTOMEM
xor.b R7L,R7L
INC.L #1, ER0
bra smycka

FINALIZE: mov.b #1,R6L
bra ULOZ

COPYTOMEM:
mov.b R1L,@VAR1
mov.b R1H,@VAR2
mov.b R2L,@VAR3
mov.b R2H,@VAR4
mov.b R3L,@VAR5
mov.b R3H,@VAR6
mov.b R4L,@VAR7
mov.b R4H,@VAR8
mov.b R5L,@VAR9
mov.b R5H,@VAR10
bra KON

KON: bra KON ; nekonečná smyčka na konci
.end