From 3901d8ea71d32282333330feaa36ac10d3f5e375 Mon Sep 17 00:00:00 2001 From: Martin Perner Date: Wed, 27 Oct 2010 17:04:35 +0200 Subject: [PATCH] isa: stefans sample --- 2_isa/src/palindrom.c | 19 +++++++++++++++++++ 2_isa/src/palindrom.s | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100755 2_isa/src/palindrom.c create mode 100755 2_isa/src/palindrom.s diff --git a/2_isa/src/palindrom.c b/2_isa/src/palindrom.c new file mode 100755 index 0000000..e065673 --- /dev/null +++ b/2_isa/src/palindrom.c @@ -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 index 0000000..8094db3 --- /dev/null +++ b/2_isa/src/palindrom.s @@ -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 -- 2.25.1