北航微机原理实验1报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一字符串排序
实验时间:2015.11.21 实验编号:同组同学:无一、实验背景
本实验可以实现对任意长度字符串的进行从小到大的排序并回显到屏幕上。
二、实验原理
本实验的采用的实验原理主要是冒泡法
原理图如下:
三、预习思考题的实验验证分析
预习思考题的实验分析验证(包括程序代码以及程序的执行结果)已经在预习报告中做出回答,在此不再进行赘述。
四、实验过程与结果
1、实验过程:(1)双击计算机桌面上的TPC-2003实验系统配套的软件;
(2)新建一个源程序,在当前运行环境下,选择菜单栏中的“文件”菜单,菜单下拉后选择“新建”,会弹出新建窗口,选择新建表单中的“ASM”,点击“确定”,新建汇编程序;
(2)根据题目要求设计程序,并将其输入到软件界面上;
(3)保存新建的源程序;
(4)点击“汇编”的快捷键,编译调试窗口中显示出汇编结果,程序没有错误;
(5)打开命令提示符操作界面,将生成的可执行文件拖入到其中,回车即可运行该程序;
(6)对程序是否达到实验要求进行实验验证。
2、实验结果:本实验达到了以下要求
1、利用INT 21H的1号功能,从键盘输入任意长度的字符串,以回车符结束;
2、将输入的字符串存放在数据段中;
3、对输入的字符串按ASCII码从小到大排序(ASCII小者占低地址存放);
4、将排好序的字符串利用INT 21H的9号功能显示在微机屏幕上。
实验程序如下:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
STR DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STR
INPUT: MOV AH,1
INT 21H
MOV [SI],AL
INC SI
CMP AL,0DH
JNZ INPUT
DEC SI
MOV BYTE PTR [SI],'$'
DEC SI
MOV BX,SI
ADDR2: MOV CX,BX
MOV SI,OFFSET STR NEXT2: MOV AL,[SI]
CMP AL,[SI+1]
JBE NEXT1
XCHG AL,[SI+1]
MOV [SI],AL
NEXT1: INC SI
LOOP NEXT2
DEC BX
JNZ ADDR2
MOV DX,OFFSET STR
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
运行情况:
输入一行需要排序的字符串,如下图所示
回车,字符串输入结束,输出如下结果:
五、结果分析与实验结论
1、结果分析:
本程序使用了21H的9号管脚进行输出,可以对大多数字符串进行从小到大的排序
因其默认输出结束标志’$’,而’$’的ASCII码较小,故如果比较字符
串大小时字符串中包含’$’,如下图
就会出现输出如下情况
即不能进行排序,故才是需要改成21H的2号功能才是实现输出。
2、实验结论:使用冒泡法可以通过比较ASCII码的大小对字符串进行从大到
小或从小到大的排序。
六、收获、体会及建议
实验中收获主要来源于对实验错误的修改、debug的调试以及老师的提问,个人觉得,老师的提问还是很好的,涉及了很多细节,让我们对于实验
的原理、程序的本质进行了有了更加深刻的认识,收获颇丰。