From 686ea778babcb0cfc8bb5e3900885398f43fb4a9 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Wed, 3 Nov 2010 23:41:44 +0100 Subject: [PATCH] 3_test: two examples to show (sum and strncmp) --- 3_test/exectest.sh | 10 ++++++++++ 3_test/strncmp.s | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3_test/sum.s | 7 +++---- 3 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 3_test/strncmp.s diff --git a/3_test/exectest.sh b/3_test/exectest.sh index 8bb844b..5d1a60b 100755 --- a/3_test/exectest.sh +++ b/3_test/exectest.sh @@ -30,11 +30,21 @@ runsim() { cd ../3b_sim; ./sim -f ../3_test/$ARG2 } +runasmsim() { + if [ "$ARG2" == "" ]; then + echo "runasm: please provide a assembler file" + exit 1 + fi + ../3a_asm/dtas < $ARG2 > ${ARG2%.s}.dthex + cd ../3b_sim; ./sim -f ../3_test/${ARG2%.s}.dthex +} + case $1 in clean) cleantools;; build) buildtools;; asm) runasm;; sim) runsim;; + asmsim) runasmsim;; *) echo "first argument must be clean|build|asm |sim " esac diff --git a/3_test/strncmp.s b/3_test/strncmp.s new file mode 100644 index 0000000..059ca04 --- /dev/null +++ b/3_test/strncmp.s @@ -0,0 +1,45 @@ +.data +.org 0x40 +calu: + .fill 0x43414c55 + .fill 0x00000000 +test: + .fill 0x54455354 + .fill 0x00000000 + +.text +main: + ldil r1, calu@lo + ldih r1, calu@hi + ldil r2, test@lo + ldih r2, test@hi + ldis r3, 5 + call strncmp + br dummynop + +strncmp: + +ldis r5, 0 ; + +strfor: +ldis r0, 0 ; +ldb r0, 0(r1) +ldb r5, 0(r2) ; r5 = (*b2) +cmpi r3, 0 ; len == 0 +cmpinq r0, 0 ; (*b1) == 0 +cmpinq r5, 0 ; (*b2) == 0 + +ldiseq r0,0 ; +reteq ; + +sub r0, r0, r5 ; diff = (*b1)-(*b2) +cmpi r0, 0 ; diff!=0 +retnq ; +addi r1, r1 ,1 ; ++b1 +addi r2, r2, 1 ; ++b2 +subi r3, r3, 1 ; --len +br strfor ; + + +dummynop: + addi r0,r0,0 diff --git a/3_test/sum.s b/3_test/sum.s index b005a05..9a571fc 100644 --- a/3_test/sum.s +++ b/3_test/sum.s @@ -11,14 +11,13 @@ main: addi r0,r0,100 stw r0, 8(r2) ;103 - addi r0,r0,-53 + addis r0,r0,-53 stw r0, 12(r2) ;50 - addi r0,r0,-10 + addis r0,r0,-10 stw r0, 16(r2) ;40 - ;ldis r1, 5 - ldis r1, 0 + ldis r1, 5 call sum ;r0 sollte 1+3+103+50+40=197 sein br dummynop -- 2.25.1