我得到一个大小为X的数组,我应该按升序排序。 数组保存在内存中,大小相同。我也应该将数字保存在内存中(例如:0050 - 4; 0051 - 3程序必须变为0050 - 3; 0051 - 4)
我在这方面遇到了麻烦,因为我的老师不是那么好,我们只有大约3个小时的大会。 任何人都可以帮我解决问题的机器代码吗? 我知道如何比较这2个数字,只是无法理解如何将它们保存在新位置并继续检查整个数组。
对不起,如果英语不好或我无法表达自己。 提前致谢, 马里奥
答案 0 :(得分:2)
以下是我尝试将最简单的冒泡排序实现转录为8080/8085汇编语言。
C实现中的第一个稍微适应8080的指针限制作为参考:
int list[N];
bool out_of_order;
void sort(void) {
do {
int *ptr = list;
int len = N - 1;
out_of_order = 0;
do {
int first, second;
first = *ptr;
++ptr;
second = *ptr;
if(first > second) {
--ptr;
*ptr = second;
++ptr;
*ptr = first;
out_of_order = 1;
}
--len;
} while(len);
} while(out_of_order);
}
现在为汇编代码。忍受我,我习惯了Z80语法。
sort: LXI BC,list ;ptr = list
MVI D,N-1 ;len = N-1
MVI E,0 ;out_of_order = 0
inner: LDAX BC ;first = *ptr
MOV H,A
INX ;++ptr
LDAX BC ;second = *ptr
CMP H ;if(first > second)
JNC noswap
DCX BC ;--ptr
STAX BC ;*ptr = second
INX BC ;++ptr
MOV A,H ;*ptr = first
STAX BC
LDI E,1 ;out_of_order = 1
noswap: DCR D ;--len
JNZ inner ;while(len)
DCX E ;while(out_of_order)
JP sort
RET
请注意,与C版本不同,它只比较无符号的8位整数,因为8080与16位算术竞争并且没有溢出标志。哦,我并非非常无聊,无法挖出汇编程序和模拟器,所以这些都是完全未经测试的。