Program 6: Sticky Keyboard

Program 6: Sticky Keyboard

Are you tired of adding one all the time to increment memory addresses? What if I told you there was a better way? A way where you didn’t need the ADD opcode. A way that allows the processor to work in less cycles?!?!?!? Now for $19.95 I will show you the secret to be more efficient. Or you could just read below.

Incrementing LDR/STR instructions #

Offset address #

The first method is to alter the address before the LDR or STR operation happens. When you use this syntax, the change in address does not write a new value to the address register. There are some use cases for this such as looking ahead in memory.

    ldr         r0, =address        @ pretend the address loaded is 0x1000
    ldrb        r1, [r0, #2]        @ this would load the byte at 0x1002 to r1 
                                    @ r0 still equals 0x1000 

Pre-index address #

By using this method, the address with be adjusted before the LDR/STR operation (as above) however it will then write this address to the address register. The only difference is the addition of an ! after the offset.

    ldr         r0, =address        @ pretend the address loaded is 0x1000
    ldrb        r1, [r0, #2]!       @ this would load the byte at 0x1002 to r1 
                                    @ r0 would then be set to 0x1002 

Post-index address #

This is the form that you will see most often. This will allow you to read an address and then offset the address value after the LDR/STR.

    ldr         r0, =address        @ pretend the address loaded is 0x1000
    ldrb        r1, [r0], #2        @ this would load the byte at 0x1000 to r1 
                                    @ r0 is then set to 0x1002 

Program 6: Sticky Keyboard Video

Description of Program
My keyboard sucks. Thanks Apple. The keys stick badly. (They don’t really 🤷‍♂️) Write a program that takes a string and removes the duplicate letters.
Template/Input
Completed Code
Expected Output
I just want this stupid thing to work!