uP:Palindrom
Z Wiki Rafał (ert16) Trójniak
Spis treści |
Temat zadania
Napisać program testujący (w C) oraz funkcję (w ASM) sprawdzającą czy łancuch znakow bedacy argumentem jest palindromem (1 - tak, 0 -nie). Wielkosc znakow nie jest istotna
Deklaracja fkcji:
long is_palindrome( char *s );
Kody źródłowe
main.c
#include <stdlib.h> long is_palindrome( char *s ); int main() { char * dobry1 = "abcba", * dobry2 = "abba", * dobry3 = "aBba", * zly = "abc"; long t1=is_palindrome(dobry1) ,t2=is_palindrome(dobry2) ,t3=is_palindrome(zly) ,t4=is_palindrome(dobry3) ; printf("Testy:\n" "\tdobry1:%ld\n" "\tdobry2:%ld\n" "\tdobry3:%ld\n" "\tzly:%ld\n" ,t1 ,t2 ,t4 ,t3 ); return 0; }
asm.s
.data printstr: .asciz "%s , %d\n" .text .type is_palindrome, @function .global is_palindrome is_palindrome: #Prolog pushl %ebp mov %esp, %ebp movl 8(%ebp), %ecx movl %ecx, %esi nextcharLen: lodsb and %al , %al jnz nextcharLen mov %esi, %edx dec %edx dec %edx # %ecx jest ustawiony na pierwszy znak # %edx jest ustawiony na ostatni znakw str xor %eax, %eax xor %ebx, %ebx nextcharCheck : movb (%ecx), %al inc %ecx call toLower mov %al, %ah movb (%edx), %al dec %edx call toLower cmp %al, %ah jne fail cmp %ecx, %edx jg nextcharCheck success: xor %eax, %eax inc %eax jmp finish fail : xor %eax, %eax finish: #epilog mov %ebp, %esp popl %ebp ret # podprocedura zmieniająca na małą literę jeśli konieczne toLower: cmpb $'A', %al jb end cmpb $'Z', %al ja end xorb $0x20, %al end : ret
Odpowiedź programu
Testy: dobry1:1 dobry2:1 dobry3:1 zly:0