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