如何用汇编语言编写基本的SORT程序?

时间:2015-02-10 06:06:44

标签: assembly bubble-sort

我刚开始学习如何用汇编语言编写程序。我遇到过一些编写基本SORT算法的方法,但是他们有一些我不知道/不支持使用的命令。

我需要编写一个程序,对从最小到最大的一系列数字进行排序。

到目前为止,我的思维过程是我会添加索引1的索引0和2s补码,如果累加器是正数,则将其分支以便它将索引0存储在其他地方,将索引1存储在索引0,然后取在指数0之前存储在其他地方并将其放在索引1处。增加指数直到完成更多操作。所以基本上我猜是冒泡。

我的问题是我真的不了解内存如何解决,索引和这样的工作。我还没有学到很多不同的ASC指令。我想我们已经学会了基础16,正如我老师所说的那样。

所以我想,汇编语言中最基本的冒泡排序形式是什么?

为了完全清楚,这里是我应该回答的两个问题。我想我是否可以做我能做的第一个。

  1. 位置#H50包含指向整数表中第一个条目的地址。该表也在内存中,第一个条目是表中的条目数,不包括其自身。将最大值和最小值整数分别存储在内存位置MAX和MIN。

  2. 按顺序递增n个条目表中的条目。

  3. 另外,#H50表示ORG 50对吗?

1 个答案:

答案 0 :(得分:0)

如果没有CPU细节,我只能给出一般答案。

某些寄存器可用作索引。寄存器的名称和(在较小程度上)语法因系统而异。例如,如果x寄存器是索引寄存器,并且每个数字都是单个字节:

load   x, NUM_OF_INTEGERS ; *size of integer if your addressing mode doesn't compensate
number_loop:
load   r1, H50,x    ; Read byte at 50+x into r1
cmp    r1, H50-1,x  ; Compare with previous value
bcs    bigger       ; carry set - greater than previous one
    ; Swap H50,x with H50-1,x
    push r1         ; save onto stack (or use a different register if you have one available)
    load r1, H50-1,x; get previous value
    store r1, H50,x ; save it in current position
    pop  r1         ; restore it from stack 
    store r1, H50-1,x ; save it in earlier position
    ; probably want to take note that you've done this somewhere so that you know to do another pass
bigger:
dec    x            ; subtract 1 from index (or 2 or 4 if multi-byte numbers and addressing in your CPU doesn't compensate)
bne    number_loop  ; if index not zero, do it again on the next numbers

希望这有帮助。