+
+/* unsigned char *asma(unsigned char *s)
+{
+ int i;
+ for (i=0; i<16; i++) {
+ unsigned char c=s[i];
+ c += (c>=’A’ && c<=’Z’) ? ’a’-’A’ : 0;
+ s[i] = c;
+ }
+ return s;
+}
+
+Schreiben Sie diese Funktion in Assembler unter Verwendung von pcmpgtb. Dabei ist folgende Äquivalenz hilfreich:
+(c>=’A’ && c<=’Z’) ? ’a’-’A’ : 0;
+
+ist (bei Verwendung von Überlauf-Arithmetik) äquivalent zu
+min(’Z’+1+min_t-’A’ > c+min_t-’A’ ? 0xff : 0, ’a’-’A’)
+
+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. */
+ #clear %xmm1