在《See MIPS Run》的Chapter 9 Reading MIPS Assembly Language中,提到到这样一段代码:
We’ll use the same example as in Chapter 8: an implementation of the C library function strcmp(). But this time we’ll include essential elements of assembly syntax and also show some hand-optimized and -scheduled code. The algorithm shown is somewhat cleverer than a naïve strcmp() function; we’ll start with this code—still in C—in a form that has all the operations separated out to make them easier to play with, as follows:
int strcmp (char *a0, char *a1) { char t0, t1; while (1) { t0 = a0[0]; a0 += 1; t1 = a1[0]; a1 += 1; if (t0 == 0) break; if (t0 != t1) break; } return (t0 - t1); }
图片版的原文在此:
不是很懂t0 = a0[0];t1 = a1[0];
这个为什么放在while循环里。。。这样难道不是每次循环都从首字符开始了么。。。那么怎么完成字符串的比较呢?
还要一个疑问是。。。if (t0 == 0)
难道不应该是if (t0 =='\0')
么。。。
1. Don’t forget that there are
a0 += 1;
anda1 += 1;
, so that the address will step backwards according to the type of the array, and the values obtained bya0[0]
anda1[0]
will also Changes with the value in the step address. Additionally, this implementation could be simpler.2,
if (t0 == 0)
In the ASCII code table, char '