Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 17 additions & 27 deletions lab-1/fib.s
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,25 @@
.type fibonacci, function

fibonacci:
@ ADD/MODIFY CODE BELOW
@ ADD/MODIFY CODE BELOW
@ PROLOG
push {r3, r4, r5, lr}

@ R4 = R0 - 0 (update flags)
@ if(R0 <= 0) goto .L3 (which returns 0)

@ Compare R4 wtih 1
@ If R4 == 1 goto .L4 (which returns 1)

@ R0 = R4 - 1
@ Recursive call to fibonacci with R4 - 1 as parameter

@ R5 = R0
@ R0 = R4 - 2
@ Recursive call to fibonacci with R4 - 2 as parameter

@ R0 = R5 + R0 (update flags)

pop {r3, r4, r5, pc} @EPILOG
push {r3, r4, r5, r6, r7, lr}

mov r4, r0 @counter
mov r5, #0
sub r5, r5, #1 @previous
mov r6, #0
add r6, r6, #1 @result
.L1:
sub r4, r4, #1
add r7, r5, r6 @r7 = sum = previous + result
mov r5, r6
mov r6, r7
cmp r4 ,#-2
bgt .L1
mov r0, r5
pop {r3, r4, r5, r6, r7, pc} @EPILOG

@ END CODE MODIFICATION
.L3:
mov r0, #0 @ R0 = 0
pop {r3, r4, r5, pc} @ EPILOG

.L4:
mov r0, #1 @ R0 = 1
pop {r3, r4, r5, pc} @ EPILOG

.size fibonacci, .-fibonacci
.end
11 changes: 9 additions & 2 deletions lab-2/mutex.s
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,13 @@
.type lock_mutex, function
lock_mutex:
@ INSERT CODE BELOW

ldr r1, =locked
.L1:
ldrex r2, [r0]
cmp r2, #0
strexeq r2, r1, [r0]
cmpeq r2, #0
bne .L1
@ END CODE INSERT
bx lr

Expand All @@ -19,7 +25,8 @@ lock_mutex:
.type unlock_mutex, function
unlock_mutex:
@ INSERT CODE BELOW

ldr r1, =unlocked
str r1, [r0]
@ END CODE INSERT
bx lr
.size unlock_mutex, .-unlock_mutex
Expand Down
2 changes: 1 addition & 1 deletion lab-3/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ QEMU_CMD = qemu-arm -g 1234 -L /usr/arm-linux-gnueabihf ./fibseq &
CMD = yes 9 | $(call QEMU_CMD) && sleep 1
qemu: fibseq
yes 7 | $(call QEMU_CMD)
arm-none-eabi-gdb -x gdbscript fibseq
arm-none-eabi-gdb fibseq
30 changes: 30 additions & 0 deletions lab-3/Makefile~
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
CC = arm-linux-gnueabihf-gcc
CFLAGS = -O0 -Wall -g
LDFLAGS = -fno-stack-protector

objects = fibseq.o fib.o

default: fibseq

.PHONY: default clean qemu

fibseq: $(objects)
$(CC) $(LDFLAGS) -o $@ $^

fib.o: fib.s
fibseq.o: fibseq.c

%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $<

%.o: %.s
$(CC) -c $(CFLAGS) -o $@ $<

clean:
rm -f $(objects) fibseq

QEMU_CMD = qemu-arm -g 1234 -L /usr/arm-linux-gnueabihf ./fibseq &
CMD = yes 9 | $(call QEMU_CMD) && sleep 1
qemu: fibseq
yes 7 | $(call QEMU_CMD)
arm-none-eabi-gdb -x gdbscript fibseq
44 changes: 17 additions & 27 deletions lab-3/fib.s
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,25 @@
.type fibonacci, function

fibonacci:
@ ADD/MODIFY CODE BELOW
@ ADD/MODIFY CODE BELOW
@ PROLOG
push {r3, r4, r5, lr}

@ R4 = R0 - 0 (update flags)
@ if(R0 <= 0) goto .L3 (which returns 0)

@ Compare R4 wtih 1
@ If R4 == 1 goto .L4 (which returns 1)

@ R0 = R4 - 1
@ Recursive call to fibonacci with R4 - 1 as parameter

@ R5 = R0
@ R0 = R4 - 2
@ Recursive call to fibonacci with R4 - 2 as parameter

@ R0 = R5 + R0 (update flags)

pop {r3, r4, r5, pc} @EPILOG
push {r3, r4, r5, r6, r7, lr}

mov r4, r0 @counter
mov r5, #0
sub r5, r5, #1 @previous
mov r6, #0
add r6, r6, #1 @result
.L1:
sub r4, r4, #1
add r7, r5, r6 @r7 = sum = previous + result
mov r5, r6
mov r6, r7
cmp r4 ,#-2
bgt .L1
mov r0, r5
pop {r3, r4, r5, r6, r7, pc} @EPILOG

@ END CODE MODIFICATION
.L3:
mov r0, #0 @ R0 = 0
pop {r3, r4, r5, pc} @ EPILOG

.L4:
mov r0, #1 @ R0 = 1
pop {r3, r4, r5, pc} @ EPILOG

.size fibonacci, .-fibonacci
.end