微机原理实验报告一 字符串排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字符串排序实验报告
一,实验目的:
⑴学习利用系统功能调用的“INT 21H”进行字符的输入、字符串的显示方
法,熟悉排序相关指令及方法。
⑵掌握汇编语言的编写、编译、连接及运行方法。
二,实验内容:
(1)利用INT 21H的1号功能,从键盘输入任意长度的字符串,以回车符结束;
(2)将输入的字符串存放在数据段中。
(3)对输入的字符串按ASCⅡ码从小到大排序(ASCⅡ码小者占低地址存放)。(4)将排好序的字符串利用INT 21H的9号功能显示在微机屏幕上。
三,实验流程图:
四,实验结果:
程序运行时,从键盘上输入包含数字、大、小写字母的字符串,回车后,屏幕上显示字符ASCⅡ码从小到大排列的结果。
五,实验总结:
通过实验,首先,我进一步理解学习了冒泡法排序的具体过程:冒泡法的外层循环次数等于其排序总数减一,每层内循环次数等于外循环总数减去已执行的次数。第二,在编写程序时,如若程序太长,最好将一段反复使用的程序段编成子程序,在主程序中反复调用即可。第三,在使用INT 21H 的各种功能时,要注意将功能号值付给AH,并需正确使用入口、出口参数。
最后,堆栈段、数据段使用时要特别注意,堆栈段必须重新定义,程序中使用数据段时也要对数据段进行重新定义,否则程序将产生错误。
六,实验程序:
初始程序:
STACK SEGMENT STACK
DB 100 DUP(0)
STACK ENDS
DATA SEGMENT
A D
B 0AH,0DH,'$'
STRING 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 STRING
NEXT:MOV AH,1
INT 21H
MOV [SI],AL
INC SI
CMP AL,0DH
JNE NEXT
MOV BX,SI
SUB BX,2
NEXT3:MOV CX,BX
MOV SI,OFFSET STRING
NEXT2:MOV AL,[SI]
CMP AL,[SI+1]
JAE NEXT1
XCHG AL,[SI+1]
MOV [SI],AL
NEXT1:INC SI
LOOP NEXT2
DEC BX
JNZ NEXT3
MOV DX,OFFSET A
MOV AH,9
INT 21H
MOV DX,OFFSET STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
运行后为从大到小排序,导致在键盘输入空格后,空格位于序列最后,无法辨别。更改后程序:
STACK SEGMENT STACK
DB 100 DUP(0)
STACK ENDS
DATA SEGMENT
A D
B 0AH,0DH,'$'
STRING 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 STRING
NEXT:MOV AH,1
INT 21H
MOV [SI],AL
INC SI
CMP AL,0DH
JNE NEXT
MOV BX,SI
SUB BX,2
NEXT3:MOV CX,BX
MOV SI,OFFSET STRING
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 NEXT3
MOV DX,OFFSET A
MOV AH,9
INT 21H
MOV DX,OFFSET STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
更改后为从小到大排序,空格显示在数列最前,可以清楚辨识。