基于8086用汇编语言实现的十个有符号数的排序(冒泡排序算法,输入为补码,从小到大)
- 格式:doc
- 大小:28.00 KB
- 文档页数:2
提示:在做实验时,我们要自己将代码区和数据区分开,因为8086上没有软件帮我们完成这个任务。
MOV R0,#218 //之所以选择208这个大点的地址,是因为避免将数据写到了代码区LOOP1:IN //将数据读入A
ADD A,#128 //将补码转换为其对应的移码,因为补码本身参与加减不能比较出大
//小,而移码就是将其真值在数轴上平移了2的n次方MOV @R0,A
MOV A,R0
sub a,#1
SUB A,#208 //判断有没有输入完10个数
JZ LOOP2 //输入完数据,跳转
ADD A,#208
MOV R0,A
JMP LOOP1//没有输入完,就跳回接着输入
LOOP2:MOV R0,#9 //9轮循环比较就可以排完序
MOV R1,#209
MOV R2,#210
LOOP4:MOV A,@R2
SUBC A,@R1
JC LOOP3 //若210地址指向的单元中的数比209地址指向的单元中的小,则交
//换
LOOP5:MOV A,R2
ADD A,#1
SUBC A,#219 //判断此轮有没有比较完
JZ LOOP6 //若比较完,就跳到LOOP6,否则继续比较
ADD A,#219
MOV R2,A
JMP LOOP4
LOOP3:MOV A,@R1
MOV 208,A
MOV A,@R2
MOV @R1,A
MOV A,208
MOV @R2,A
JMP LOOP5 //交换完了就跳回
LOOP6: MOV A,R1
ADD A,#1
MOV R1,A
ADD A,#1
MOV R2,A //让R2始终指向的是R1下一个单元
MOV A,R0
SUB A,#1
JZ LOOP7 //判断9轮比较有没有完成,若完成,跳LOOP7,否则,继续比
//较
MOV R0,A
JMP LOOP4
LOOP7: MOV R0,#218
LOOP9: MOV A,@R0 //下面这一段代码就是将数还原,因为原来我们是那人家的移码
//形式来比较的,相信下面这一段就不用多讲了吧ADD A,#128
MOV @R0,A
MOV A,R0
sub a,#1
SUB A,#208
JZ LOOP8
ADD A,#208
MOV R0,A
JMP LOOP9
LOOP8:END