isa: stefans sample
authorMartin Perner <martin@perner.cc>
Wed, 27 Oct 2010 15:04:35 +0000 (17:04 +0200)
committerMartin Perner <martin@perner.cc>
Wed, 27 Oct 2010 15:51:19 +0000 (17:51 +0200)
2_isa/src/palindrom.c [new file with mode: 0755]
2_isa/src/palindrom.s [new file with mode: 0755]

diff --git a/2_isa/src/palindrom.c b/2_isa/src/palindrom.c
new file mode 100755 (executable)
index 0000000..e065673
--- /dev/null
@@ -0,0 +1,19 @@
+/* palindrom checker */
+
+u8 palindrom(u8* str, u8 len) {
+       u8 *str1, *str2;
+       if (len == 0) { 
+               return 0;
+       }
+       str1 = str; 
+       str2 = str + len - 1;
+
+       while (str1 < str2) {
+               if (*str1 != *str2) { 
+                       return 0;
+               }
+               str1++;
+               str2--;
+       }
+       return 1;
+}
diff --git a/2_isa/src/palindrom.s b/2_isa/src/palindrom.s
new file mode 100755 (executable)
index 0000000..8094db3
--- /dev/null
@@ -0,0 +1,35 @@
+; palindrom checker
+
+; r1 = str addr
+; r2 = str len (u8)
+
+       ldi r0, 0
+
+       cmp r1, 0
+       retzs           ; return 0 if strlen = 0
+
+       add  r4, r1, r2 ; set r4 to end address
+       subi r4, 1
+
+       cmp  r1, r4     ; if strlen = 1 return 1
+       brancheq- end
+
+schleife:
+
+       ldb  r5, r1
+       ldb  r6, r4
+
+       cmp  r5, r6
+       retnq           ; return 0 when palindrom not satisfied
+
+       addi r1, r1, 1
+       subi r4, r4, 1
+
+       cmp  r1, r4
+
+       branchlt+ schleife
+
+end:
+
+       ldi  r0, 1
+       ret