From 94701da52e7f25f93e148193dc79209120545cf8 Mon Sep 17 00:00:00 2001 From: gn02596703 Date: Wed, 6 Aug 2014 20:25:32 +0800 Subject: [PATCH 1/5] Update fib.s --- lab-1/fib.s | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lab-1/fib.s b/lab-1/fib.s index 14c6734..7242c95 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -15,19 +15,24 @@ fibonacci: @ R4 = R0 - 0 (update flags) @ if(R0 <= 0) goto .L3 (which returns 0) - + subs r4, r0, #0 + ble .L3 @ Compare R4 wtih 1 @ If R4 == 1 goto .L4 (which returns 1) - + cmp r4, #1 + beq .L4 @ R0 = R4 - 1 @ Recursive call to fibonacci with R4 - 1 as parameter - + add r0, r4, #4294967295 + bl fibonacci @ R5 = R0 @ R0 = R4 - 2 @ Recursive call to fibonacci with R4 - 2 as parameter - + mov r5, r0 + sub r0, r4, #2 + bl fibonacci @ R0 = R5 + R0 (update flags) - + adds r0, r5, r0 pop {r3, r4, r5, pc} @EPILOG @ END CODE MODIFICATION From 93a693d746e2250b6d65c7150533a98a3985f0bf Mon Sep 17 00:00:00 2001 From: gn02596703 Date: Wed, 6 Aug 2014 20:27:26 +0800 Subject: [PATCH 2/5] Update fib.s --- lab-1/fib.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab-1/fib.s b/lab-1/fib.s index 7242c95..3d4ae3f 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -23,7 +23,7 @@ fibonacci: beq .L4 @ R0 = R4 - 1 @ Recursive call to fibonacci with R4 - 1 as parameter - add r0, r4, #4294967295 + sub r0, r4, #1 bl fibonacci @ R5 = R0 @ R0 = R4 - 2 From dfcb3363fe1c17dc3507e64dab0ce95f03782e7a Mon Sep 17 00:00:00 2001 From: gn02596703 Date: Wed, 6 Aug 2014 20:44:16 +0800 Subject: [PATCH 3/5] Update mutex.s --- lab-2/mutex.s | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lab-2/mutex.s b/lab-2/mutex.s index d23565d..983fdf4 100644 --- a/lab-2/mutex.s +++ b/lab-2/mutex.s @@ -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 @@ -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 From 8d26c1f460ff9610dbe4e697d7866c907b44d566 Mon Sep 17 00:00:00 2001 From: gn02596703 Date: Tue, 12 Aug 2014 21:54:11 +0800 Subject: [PATCH 4/5] Update fib.s MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 將 fibonacci 改成non-recursive 把 r4當作counter 每次執行 都將 r4 - 1 若仍大於等於 -2 (跑到 -1 )就branch回去迴圈 --- lab-1/fib.s | 47 +++++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/lab-1/fib.s b/lab-1/fib.s index 3d4ae3f..fa29c2e 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -9,40 +9,27 @@ .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) - subs r4, r0, #0 - ble .L3 - @ Compare R4 wtih 1 - @ If R4 == 1 goto .L4 (which returns 1) - cmp r4, #1 - beq .L4 - @ R0 = R4 - 1 - @ Recursive call to fibonacci with R4 - 1 as parameter - sub r0, r4, #1 - bl fibonacci - @ R5 = R0 - @ R0 = R4 - 2 - @ Recursive call to fibonacci with R4 - 2 as parameter - mov r5, r0 - sub r0, r4, #2 - bl fibonacci - @ R0 = R5 + R0 (update flags) - adds r0, r5, r0 - 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 From dcade0be6ceea62a0f24a3250dec9bd0f50556a6 Mon Sep 17 00:00:00 2001 From: gn02596703 Date: Thu, 14 Aug 2014 11:50:16 +0800 Subject: [PATCH 5/5] Non recursive --- lab-1/fib.s | 2 -- lab-3/Makefile | 2 +- lab-3/Makefile~ | 30 ++++++++++++++++++++++++++++++ lab-3/fib.s | 44 +++++++++++++++++--------------------------- 4 files changed, 48 insertions(+), 30 deletions(-) create mode 100644 lab-3/Makefile~ diff --git a/lab-1/fib.s b/lab-1/fib.s index fa29c2e..5acf6e0 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -29,7 +29,5 @@ fibonacci: pop {r3, r4, r5, r6, r7, pc} @EPILOG @ END CODE MODIFICATION - - .size fibonacci, .-fibonacci .end diff --git a/lab-3/Makefile b/lab-3/Makefile index 2d0e91d..c708bfc 100644 --- a/lab-3/Makefile +++ b/lab-3/Makefile @@ -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 diff --git a/lab-3/Makefile~ b/lab-3/Makefile~ new file mode 100644 index 0000000..2d0e91d --- /dev/null +++ b/lab-3/Makefile~ @@ -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 diff --git a/lab-3/fib.s b/lab-3/fib.s index 14c6734..5acf6e0 100644 --- a/lab-3/fib.s +++ b/lab-3/fib.s @@ -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