微机原理程序设计练习 实验报告

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

答:循环使用冒泡法,从后往前,每两个数据比较,较大的上升,分内外两层循环,内循环将剩余数据中最大的向上移位,外循环控制下一次的最大值向上移位,外循环遍历每个数据后结束。

相关文档
最新文档