订购8位数字的数组 - 汇编8085

时间:2013-12-23 14:30:31

标签: arrays sorting assembly numbers

我得到一个大小为X的数组,我应该按升序排序。 数组保存在内存中,大小相同。我也应该将数字保存在内存中(例如:0050 - 4; 0051 - 3程序必须变为0050 - 3; 0051 - 4)

我在这方面遇到了麻烦,因为我的老师不是那么好,我们只有大约3个小时的大会。 任何人都可以帮我解决问题的机器代码吗? 我知道如何比较这2个数字,只是无法理解如何将它们保存在新位置并继续检查整个数组。

对不起,如果英语不好或我无法表达自己。 提前致谢, 马里奥

1 个答案:

答案 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位算术竞争并且没有溢出标志。哦,我并非非常无聊,无法挖出汇编程序和模拟器,所以这些都是完全未经测试的。