uP:Odwracanie

Z Wiki Rafał (ert16) Trójniak

Spis treści

Temat zadania

Odwracanie ciągu znaków podanego jako arg funkcji. + funkcja testująca w c

Kody źródłowe

asm.s

.type odwroc, @function
#void odwroc(char * str);
.global odwroc
odwroc:
	pushl %ebp
	mov %esp, %ebp
 
# przenoszenie stringa do %esi
	movl 8(%ebp), %ecx
	movl %ecx, %esi
# Szukamy końca
nextcharLen:
	lodsb
	test $0xff , %al
	jnz nextcharLen
	mov %esi, %edx
	dec %edx
# Traz jesteśmy na null
	dec %edx
# teraz jesteśmy na ostatnim znaku
nextChar:
#Pobieramy
	mov (%edx), %al
	mov (%ecx), %ah
#Składamy spowrotem
	mov %ah, (%edx)
	mov %al, (%ecx)
#Zmieniamy wskaźniki
	inc %ecx
	dec %edx
#Porównujemy i kończymy pętle
	cmp %ecx, %edx
	jg nextChar
 
#pętla odwracania
 
finish :
	mov %ebp, %esp
	popl %ebp
	ret

main.c

#include <stdlib.h>
 
void odwroc(char * str);
int main()
{
	const char *cstr ="ala ma kota"; 
	char *str = malloc(strlen(cstr)+1);
	strcpy(str,cstr);
 
	printf("before=%s\n",str);
	odwroc(str);
	printf("after=%s\n",str);
	return 0;
}

Odpowiedź programu

before=ala ma kota
after=atok am ala
Osobiste