微机原理实验报告
班级:XXXXX 姓名:XXXX 学号:20XXXX
XXXXX大学 信息科学与技术学院 信息工程系
实验一汇编语言程序设计-(具体题目)
一、实验目的(根据实际情况修改):
1、熟悉MASM编译环境,了解程序的汇编方法; 2、熟悉常用汇编指令,学习汇编程序设计方法;
3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式; 4、了解冒泡法原理,学习多重循环的编程方法。
二、实验内容:
编写程序,用冒泡法实现将数据段内9,8,7,6,5,4,3,2,1按照由小到大的顺序重新排列。
三、程序流程图和程序代码
1、流程图
2、代码与注释(代码不能和指导书完全一样,写出注释,写出寄存器尤其是DS的值)
data segment
buf1 db 8,7,6,5,4,3,2,1 data ends code segment
assume cs:code,ds:data
start: mov ax,data //传送数据段data mov ds,ax
mov dx,7 //dx放外循环7次 L3: mov cx,dx //cx放内循环7次
lea si,buf1 //将db里的数据传送到si L2: mov al,[si]
cmp al,[si+1] //比较[si]与[si+1] jb L1 //[si]<[si+1],跳转到L1 xchg al,[si+1] //[si]>[si+1],两两交换 mov [si],al
L1: inc si //si减1 loop L2 //循环L2
dec dx //外循环减1,没减到0则跳转到L3 jnz L3 //入内循环,计数初值 mov ah,4ch int 21h code ends end start
四、调试过程及遇到的问题 1、程序执行截图
2、调试用到的命令 -U命令:查看数据段地址;
-d命令:查看运行前后存储器内容; -g命令:运行程序;
-t命令:查看运行前后寄存器和存储器内容。 3、遇到的问题及解决办法
问题:运行程序后,数据1在存储器地址末尾没变。 解决方法:暂未解决! 五、思考题
1、n个数冒泡法排序共需要多少次循环?
答:n(n-1)/2次。
2、循环嵌套时总循环次数和内外循环次数是哪种数学关系?编写内外循环嵌套的双重循环程序,实现100次内循环,300次外循环。
答:总循环次数=内循环次数*外循环次数;
六、心得体会
通过实际模拟操作,加深了对CPU的理解,更好的理解编程语言,本次实验较为简单,我独立按时完成。在试验的编程过程中,弄清了DOSBox的使用方法,以及冒泡法排序的计算。实验过程遇到了程序调试和代码不熟的问题,在同学帮助下,弄懂了每行代码的作用,经调试,发现挺简单的。因此,我了解了在程序执行过程中,DS寄存器的值是根据实际数据段的地址分配的,并且不能和代码段重复。