一种常见的写法就是用 push pop 来做:
但栈空间通常是有限的,因此处理不了太长的字节集。
如果需要处理很长的字节集,就需要使用别的方法,比如:
它对应下面的伪代码:
p = addressOf(bytes);
q = p + bytes.length - 1;
len = bytes.length / 2;
while (len--)
{
swap(p++, q--);
}
其中 bytes 表示字节集变量,其内部格式类似于:
struct _Bytes {
int num;
int length;
char buff[length];
};
看到这里,聪明的你可能已经发现了,len 这个变量实际上是可以取消掉的:
p = addressOf(bytes);
q = p + bytes.length - 1;
while (p < q)
{
swap(p++, q--);
}
把它写成汇编后,就得到了如下的代码: