8 /* unsigned char *asma(unsigned char *s)
11 for (i=0; i<16; i++) {
13 c += (c>=’A’ && c<=’Z’) ? ’a’-’A’ : 0;
19 Schreiben Sie diese Funktion in Assembler unter Verwendung von pcmpgtb. Dabei ist folgende Äquivalenz hilfreich:
20 (c>=’A’ && c<=’Z’) ? ’a’-’A’ : 0;
22 ist (bei Verwendung von Überlauf-Arithmetik) äquivalent zu
23 min(’Z’+1+min_t-’A’ > c+min_t-’A’ ? 0xff : 0, ’a’-’A’)
25 wobei min_t der minimale Wert des Datentyps ist, den der Vergleich behandelt (bei pcmpgtb also -128). Zusätzlich zu dem oben genannten dürften die Befehle pminub, paddb, und psubb nützlich sein. */
29 #speicheradresse des pointers zeigt auf 16*8 feld = 128bit
39 .section .eh_frame,"a",@progbits
59 .long .LEFDE1-.LASFDE1
61 .long .LASFDE1-.Lframe1
67 .ident "GCC: (Debian 4.3.2-1.1) 4.3.2"
68 .section .note.GNU-stack,"",@progbits