发布于 2012-07-28 22:25:30
4楼
既然N侠想把这个排序程序封装成一个子程序,我建议进一步对循环体做一下优化。
基于这样的前提:排序是对word进行,因此一次就可把队列中的一对数取进来比较,需要交换时,再交叉存下去。
设AC1中存放指针,循环体如下:
LD SM0.0
MOVD *AC1, LD10 // 取进一对相邻的数
LDW< LW10, LW12 // 大值冒上来,小值沉下去
MOVW LW12, *AC1 // 若上面条件成立,交叉存回
+I 2, AC1
MOVW LW10, *AC1
NOT
+I 2, AC1 // 若上面没有交换发生,地址+2
下面的写法是等效的,就是指针只在一个地方增加:
LD SM0.0
MOVD *AC1, LD10 // 取进一对相邻的数
LDW< LW10, LW12 // 大值冒上来,小值沉下去
MOVW LW12, *AC1 // 若上面条件成立,交叉存回
LD SM0.0
+I 2, AC1
ALD
MOVW LW10, *AC1