B Main
ExampleString ; start of packed string
DCD #0x53595343 ; ‘S’=0x53 ‘Y’=0x59 ‘S’=0x53 ‘C’=0x43
DCD #0x20333030
DCD #0x36210000 ; 1st 00 is the null-terminator, 2nd 00 is just padding to fill the word
Main
; R0 = address of the packed string
m
er as
LEA R0, [ ExampleString ]
co
eH w
; R1 = index of the character in the packed string ... test with several values
o.
MOV R1, #5
rs e
; the following code puts the indexed character into the least significant byte of R0,
ou urc
; and clears the remainder of R0
o
; ---- start of block to copy into Fragment 2 ----
aC s
; R2 = offset to word containing indexed character
vi y re
LSR R2, R1, #2 ; divide index by 4
; R3 = word containing indexed character
ed d
LDR R3, [ R0, R2 ]
ar stu
; R1 = digit offset of indexed character in R3 (digit offset = 0, 1, 2 or 3)
AND R1, R1, #3
sh is
; need to shift character from current position to least significant byte
Th
; need to shift 8 bits for each digit position
; R1 = number of digit shifts needed
MOV R4, #3
SUB R1, R4, R1
BEQ DoneShiftLoop ; if 0 shifts needed, then done shifting
; shift character into least significant byte
ShiftLoop
This study source was downloaded by 100000850872992 from CourseHero.com on 03-24-2023 01:11:09 GMT -05:00
https://www.coursehero.com/file/14306242/lab8syscpdf/
https://www.coursehero.com/file/24395275/Lab-8pdf/
, LSR R3, R3, #8
SUB R1, R1, #1
BNE ShiftLoop
DoneShiftLoop
; R3 now has indexed character in least significant byte,
; but may have additional characters in higher bits
; R0 = indexed character with higher bits cleared
AND R0, R3, #0xFF
; ---- end of block to copy into Fragment 2 ----
m
er as
DCD #0xFFFFFFFF ; stop
co
=============================================
eH w
o.
Fragment 2:
rs e
ou urc
MOV R13, #0x800 ; initialize stack pointer
B Main
o
ExampleString ; start of packed string
aC s
vi y re
DCD #0x53595343 ; ‘S’=0x53 ‘Y’=0x59 ‘S’=0x53 ‘C’=0x43
DCD #0x20333030
ed d
DCD #0x36210000 ; 1st 00 is the null-terminator, 2nd 00 is just padding to fill the word
ar stu
; char CharAt ( &( PackedString[] ), uint charIndex )
sh is
; accepts R0 = address of PackedString[] (by reference),
Th
; R1 = charIndex (by value)
; returns R0 = PackedString[ charIndex ]
CharAt
PUSH {R1,R2,R3,R4,R14} ; save registers (SYSC 3006 Register Preservation convention)
; ---- start of block copied from Fragment 1 ----
This study source was downloaded by 100000850872992 from CourseHero.com on 03-24-2023 01:11:09 GMT -05:00
https://www.coursehero.com/file/14306242/lab8syscpdf/
https://www.coursehero.com/file/24395275/Lab-8pdf/