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
--- /dev/null
+.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
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