广州大学学生实验报告
开课学院及实验室:软件工程实验室418B 2013 年 月 日学院 实验课程名称 实验项目名称 计算机科学与教育软件学院 年级/专业/班 陶文正 姓名 学号 成绩 指导老师 微机原理实验 数据排序 一、 实验要求 给出一组随机数,将此组数据排序,使之成为有序数列 二、实验目的 了解数据排序的简单算法。 三、实验说明 有序的数列更有利于查找。本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在 数列的最后面。再进行下一轮比较,找出第二大数据,直到全部数据有序。
四、程序框图
Len equ 10 data segment
Array db 5,2,1,0,2,3,8,6,5,9 Change db 0 data ends
code segment
assume cs:code, ds:data
start proc near
mov ax, data mov ds, ax Sort:
mov bx, offset Array mov cx, Len-1 mov Change, 0 Goon:
mov al, byte ptr [bx] inc bx
cmp al, byte ptr [bx]
jng Next ; 前小后大, 不交换
mov Change, 1 ; 前大后小, 置交换标志 mov ah, [bx]
mov [bx] ,al ; 交换 mov [bx-1], ah Next:
loop Goon
cmp Change, 0 jne Sort
jmp $
code ends
end start
五、实验步骤
(1) 进入Wave6000,输入程序并检查,保存程序。 (2) “编译”程序。
(3) 在指令“jmp $”处设断点。 (4) “全速执行”程序。
(5) 在“数据窗口(MEMOREY)”查看0400H开始的10个单元的内容,记录并分析实验结果。
结果:00 01 02 02 03 05 05 06 08 09
实验结果分析:实验中的jne和jng都是条件跳转语句(<=),通过循环依次比较,Change是前两个数的交换标志
六、总结
刚开始运行程序,不理解代码中为什么要加置交换标志Change。之后,我把Change的语句去掉后,重新编译执行,发现结果也是正确的,但是程序不会停止跳出。然后我单步调试,程序一直循环。仔细想想,才理解了Change语句的真正含义:因为 jne Sort 是条件跳转语句,所以在这之前必须要有条件(cmp Change, 0),当没有前面的数比后面的数大时,Chang为0, cmp Change, 0 成立跳出程序结束