微机原理程序设计练习 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计练习实验报告
一、实验目的
1.熟练掌握汇编语言程序设计的方法及上机步骤。
2.掌握算术运算中,十进制数调整指令的应用。
3.掌握子程序的设计方法。
4.掌握DOS功能的调用方法。
二、实验仪器
586微机 1台
三、实验内容
有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
编程要求及提示:
[1] 参加排序的数据及个数由学生自己定义。
[2] 要将排序前的数组和排序后的数组在屏幕上显示出来。
[3] 实验步骤同内容一。
四、实验源程序
N=20
STACK SEGMENT STACK'STACK'
DW 100H DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
DATABUF DW N
DB N DUP(?)
ORIGINAL DB 13,10,13,10,':$'
ORDERED DB 13,10,13,10,':$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
;随机数据
MOV CX,DATABUF
LEA SI,DATABUF+2
MOV BL,18
MOV AL,13
L:
MOV [SI],AL
INC SI
ADD AL,BL
LOOP L
LEA DX,ORIGINAL
MOV AH,9
INT 21H
CALL DISPAL
;下面给数据排序程序
MOV CX,DATABUF
DEC CX
LEA SI,DATABUF+2
ADD SI,CX ;SI指向数据区末地址L1:
PUSH CX
PUSH SI
L2:
MOV AL,[SI]
CMP AL,[SI-1]
JBE NOXCHG
XCHG AL,[SI-1]
MOV [SI],AL
NOXCHG:
DEC SI
LOOP L2
POP SI
POP CX
LOOP L1
LEA DX,ORDERED
MOV AH,9
INT 21H
CALL DISPAL
EXITPROC:
MOV AH,4CH ;结束程序
MOV AH,1
INT 21H
DISPAL PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
LEA DI,DATABUF+2
MOV CX,20
DISPAL2:
MOV AL,[DI]
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
CALL CHANG
;----------------------------------
MOV AH,2
MOV DL,AL
INT 21H
MOV AL,[DI]
AND AL,0FH
CALL CHANG
;-------------------------------------
MOV AH,2
MOV DL,AL
INT 21H
MOV AH,2
MOV DL,20H
INT 21H ;为了让结果看得清楚,让显示的数用空格空开 INC DI
LOOP DISPAL2
POP DI
POP DX
POP CX
POP BX
POP AX
RET
DISPAL ENDP CHANG PROC NEAR CMP AL,10
JNGE CHANG1 ADD AL,7 CHANG1:
ADD AL,30H
RET
CHANG ENDP CODE ENDS
END START
实验结果
五、问题讨论
1.在以十进制数形式参加运算的程序设计中,应注意那些问题。
2.总结循环程序设计的步骤及方法。
答:循环使用冒泡法,从后往前,每两个数据比较,较大的上升,分内外两层循环,内循环将剩余数据中最大的向上移位,外循环控制下一次的最大值向上移位,外循环遍历每个数据后结束。