Rumah > Soal Jawab > teks badan
在《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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<code>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);
}
</code>
图片版的原文在此:
不是很懂 t0 = a0[0];t1 = a1[0];
这个为什么放在while循环里。。。这样难道不是每次循环都从首字符开始了么。。。那么怎么完成字符串的比较呢?
还要一个疑问是。。。if (t0 == 0)
难道不应该是if (t0 =='\0')
么。。。
大家讲道理2017-04-17 13:38:16
1、你别忘了还有 a0 += 1;
和 a1 += 1;
,这样其地址会根据数组的类型向后步进,每次步进后 a0[0]
和 a1[0]
取到的值也会跟着步进地址中的值而变化。另外,这个实现可以更简单。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
2、if (t0 == 0)
在 ASCII 码表中,char '\0' 就是十进制的 0。