微机原理实验报告一 字符串排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

更改后为从小到大排序,空格显示在数列最前,可以清楚辨识。

相关文档
最新文档