将 3CH,61H,47H,40H,5DH,4FH,52H,30H,56H,45H等10 个成绩放在程序存储器从20H~29H,编写实验程序,将这10 个成绩按照由大到小的顺序排列,仍写入RAM 的30H~39H 单元中
时间: 2023-09-10 17:15:39 浏览: 94
存储管理实验程序
4星 · 用户满意度95%
好的,这是一道排序算法的题目,我们可以使用冒泡排序来解决。
首先,我们需要将存储器中的10个数据读入CPU,然后使用冒泡排序算法对它们进行排序,最后将排好序的数据写回到RAM的30H~39H单元中。
以下是实验程序的汇编代码实现:
```
ORG 100H ;程序加载到100H地址处
MOV CX, 9 ;需要进行9次冒泡排序
MOV SI, 20H ;起始读取地址为20H
MOV DI, 30H ;排序后存储的地址为30H
LOOP1:
MOV BX, SI ;将当前地址保存到BX寄存器中
MOV AL, [SI] ;读取当前地址处的数据
INC SI ;地址指针加1
MOV DX, CX ;将内层循环的次数保存到DX寄存器中
MOV BH, 0 ;设置交换标志为0
DEC DX ;每次循环次数减1
LOOP2:
CMP AL, [SI] ;比较当前数据和下一个数据的大小
JGE SKIP ;如果当前数据大于等于下一个数据,跳过交换
XCHG AL, [SI] ;交换数据
MOV BH, 1 ;设置交换标志为1
SKIP:
INC SI ;指针加1
DEC DX ;循环次数减1
JNZ LOOP2 ;如果内层循环次数不为0,继续循环
CMP BH, 0 ;如果交换标志为0,说明已经排好序,退出循环
JE EXIT
MOV [BX], AL ;将排序好的数据写回到存储器中
MOV [DI], AL ;将排序好的数据写回到RAM的30H~39H单元中
INC DI ;存储地址指针加1
LOOP LOOP1 ;继续循环
EXIT:
MOV [BX], AL ;将最后一个数据写回到存储器中
MOV [DI], AL ;将最后一个数据写回到RAM的30H~39H单元中
HLT ;程序结束
```
这个程序使用了两层循环来实现冒泡排序,外层循环控制排序的次数,内层循环控制每次排序的比较次数。在每次比较过程中,如果当前数据大于下一个数据,就将它们交换。如果没有发生交换,说明已经排好序,可以退出循环。最后将排好序的数据写回到RAM的30H~39H单元中即可。
阅读全文