3_test: two examples to show (sum and strncmp)
authorBernhard Urban <lewurm@gmail.com>
Wed, 3 Nov 2010 22:41:44 +0000 (23:41 +0100)
committerBernhard Urban <lewurm@gmail.com>
Wed, 3 Nov 2010 22:41:44 +0000 (23:41 +0100)
3_test/exectest.sh
3_test/strncmp.s [new file with mode: 0644]
3_test/sum.s

index 8bb844b280cdb21e20aec48afb198fe8f3ce19c5..5d1a60b374b9fbf49d9d46706eac0ae77f7a8bdd 100755 (executable)
@@ -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 <file>|sim <file>"
 esac
 
diff --git a/3_test/strncmp.s b/3_test/strncmp.s
new file mode 100644 (file)
index 0000000..059ca04
--- /dev/null
@@ -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
index b005a0557384eb730e32249f10f8b130d8532979..9a571fcbe7a811b1d8a7f868b87ec43bfe646b14 100644 (file)
@@ -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