我刚开始学习如何用汇编语言编写程序。我遇到过一些编写基本SORT算法的方法,但是他们有一些我不知道/不支持使用的命令。
我需要编写一个程序,对从最小到最大的一系列数字进行排序。
到目前为止,我的思维过程是我会添加索引1的索引0和2s补码,如果累加器是正数,则将其分支以便它将索引0存储在其他地方,将索引1存储在索引0,然后取在指数0之前存储在其他地方并将其放在索引1处。增加指数直到完成更多操作。所以基本上我猜是冒泡。
我的问题是我真的不了解内存如何解决,索引和这样的工作。我还没有学到很多不同的ASC指令。我想我们已经学会了基础16,正如我老师所说的那样。
所以我想,汇编语言中最基本的冒泡排序形式是什么?
为了完全清楚,这里是我应该回答的两个问题。我想我是否可以做我能做的第一个。
位置#H50包含指向整数表中第一个条目的地址。该表也在内存中,第一个条目是表中的条目数,不包括其自身。将最大值和最小值整数分别存储在内存位置MAX和MIN。
按顺序递增n个条目表中的条目。
另外,#H50表示ORG 50对吗?
答案 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
希望这有帮助。