Assembler
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