uP:Nadmiar

Z Wiki Rafał (ert16) Trójniak

Spis treści

Temat zadania

Napisać program testujący (w c) oraz funkcje w gas, usuwającą ze stringa nadmiarowe spacje, oraz przekształcającą znaki w taki sposób, aby każdy podciąg zaczynał się od dużej litery.

Deklaracja:

char * convert_string(char *s)

Kody źródłowe

asm.s

.text
.type  convert_string, @function
#long binomial_coefficient(long n, long k);
.global convert_string
convert_string:
	pushl %ebp
	mov %esp, %ebp
 
# przenoszenie adresu stringa do %esi
	movl 8(%ebp), %ecx
	movl %ecx, %esi
 
#Szacujemy długość stringa
	xor %ebx, %ebx
	xor %eax, %eax
nextcharLen:
	lodsb
	cmp $' ', %al
	jne nextcharCount
	cmp %al, %ah
	je nextcharLen
nextcharCount:
	mov %al, %ah
	inc %ebx
	test $0xff , %al
	jnz nextcharLen
# Wywołujemy malloc
	pushl %ecx
	pushl %ebx
	call malloc
	popl %ebx
	popl %ecx
#Rozpoczynamy kopiowanie
 
	pushl %eax
	movl %ecx, %esi
	movl %eax, %edi
	movb $' ',%ah
mvchar:
#Pobieramy znaczke
	lodsb
# Sprawczamy czy spacja
	cmp $' ', %al
	jne mvcharCount
# Sprawdzamy czy kolejna spacja w serii
	cmp %al, %ah
	je mvchar
mvcharCount:
# Powiększamy pierwsze litery
	cmp $' ', %ah
	jne mvcharAction
	cmpb $'a', %al
	jb mvcharAction
	cmpb $'z', %al
	ja mvcharAction
	xorb $0x20, %al
# Przenosimy znaczek
mvcharAction:
	stosb
	mov %al, %ah
	and %al , %al
	jnz mvchar
	popl %eax
 
finish :
	mov %ebp, %esp
	popl %ebp
	ret

main.c

#include <stdio.h>
char * convert_string(char *s);
char * krotki;
char *cstr ="ala  ma kota  Benka"; 
int main()
{	
	printf("before=%s\n",cstr);
	krotki = convert_string(cstr);
	printf("krotki=%s\n",krotki);
	return 0;
}

Odpowiedź programu

before=ala  ma kota  Benka
krotki=Ala Ma Kota Benka
Osobiste