微机原理上机

  • 格式:doc
  • 大小:790.52 KB
  • 文档页数:31

微机原理上机实验报告

4.37 (上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:

数据1

数据2

……

算法流程图:

调试问题、心得体会:

通过这道题,熟悉了流程图画法,掌握了产生随机数,“冒泡法”排序,子函数编写调用等的基本过程,尤其对于中断调用,并利用ASCII码回显和对课本字节型数据“冒泡法”排序改进为字形排序的过程,是我受益匪浅。并且亲身实践了源程序的汇编、调试也连接。

问题:将字节型冒泡法直接应用于该题,导致出错,该题存储的是字型数据!

原因在于只是排列的AL中的数值,并不是产生的随机数!

同时对于字型与字节型在运算类指令中的应用还是有误,以及其他的一些小错误,应加以改善!

运行结果:

程序代码:

STACK SEGMENT STACK 'STACK'

DW 100H DUP(?)

TOP LABEL WORD STACK ENDS

DATA SEGMENT

BUFFER LABEL WORD

X=17

REPT 100

X=(X+80)mod 43

DW X

ENDM

BUF DW 100 DUP(?)

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,100

LEA SI,BUFFER

LEA DI,BUF

L1:

MOV AX,[SI]

INC SI

INC SI

MOV [DI],AX

INC DI

INC DI

LOOP L1

MOV CX,100

DEC CX

LEA SI,BUFFER

PUSH CX

ADD CX,CX

ADD SI,CX

POP CX

L2:

PUSH CX

PUSH SI

L3:

MOV AX,[SI]

CMP AX,[SI-2]

JAE NOXCHG XCHG AX,[SI-2]

MOV [SI],AX

NOXCHG:

SUB SI,2

LOOP L3

POP SI

POP CX

LOOP L2

MOV CX,100

LEA SI,BUFFER

L4:

MOV AX,[SI]

CALL DISPAX

ADD SI,2

CALL XIAOYU

CALL XUHAO

CALL DAYU

CALL DISPCR

LOOP L4

MOV AH,4CH

MOV AL,0

INT 21H

DISPAX PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

PUSH DI

MOV BX,10

MOV CX,3

L7:

XOR DX,DX

DIV BX

MOV [DI],DX

INC DI

INC DI

LOOP L7

MOV CX,3

L8:

DEC DI

DEC DI

MOV AL,[DI]

ADD AL,30H

MOV AH,02 MOV DL,AL

INT 21H

LOOP L8

POP DI

POP DX

POP CX

POP BX

POP AX

RET

DISPAX ENDP

DISPCR PROC NEAR

PUSH AX

PUSH DX

MOV AH,2

MOV DL,0AH

INT 21H

MOV AH,2

MOV DL,0DH

INT 21H

POP DX

POP AX

RET

DISPCR ENDP

XIAOYU PROC NEAR

PUSH AX

PUSH DX

MOV AH,02

MOV DL,3CH

INT 21H

POP DX

POP AX

RET

XIAOYU ENDP

XUHAO PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH SI

MOV CX,100

MOV BX,AX

LEA SI,BUF

L5:

CMP BX,[SI]

JZ L6 ADD SI,2

LOOP L5

L6:

MOV AX,101

SUB AX,CX

CALL DISPAX

POP SI

POP CX

POP BX

POP AX

RET

XUHAO ENDP

DAYU PROC NEAR

PUSH AX

PUSH DX

MOV AH,02

MOV DL,3EH

INT 21H

POP DX

POP AX

RET

DAYU ENDP

CODE ENDS

END START

4.38 (上机题)按同余法产生一组随机数N(1

Total

A:

B:

C:

D:

E:

F:

算法流程图 :

调试问题、心得体会:

通过该问题,进一步练习了通过流程图分析设计程序的功能,掌握了随机数产生,子函数调用,分支程序,循环程序,中断调用等过程,进行了调试,找出了数值无法转化为十进制并显示的问题,原因在于未定义临时存储单元。最后进行了汇编,链接等,得到了最终结果。

问题1:NUMEER(用来存储各等级人数)存储单元清零后,忘记让DI再次指向其首地址,也就是各成绩等级的人数并未存入NUMBER,因此显示的都是0

改正后得到正确结果!

问题2:直接照搬课本数值转换子程序,未定义临时存储单元DECIMAL,导致编译出错,出现语法错误!

改正后得到正确结果!

运行结果:

程序代码:

STACK SEGMENT STACK 'STACK'

DW 100H DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

BUFFER LABEL BYTE

X=17

REPT 225

X=(X+97)mod 50 DB X

ENDM

BUF DB 45 DUP(?)

NUMBER DW 6 DUP(?)

TOTAL DB 54H,6FH,74H,61H,6CH

LETTER DB 41H,42H,43H,44H,45H,46H

DECIMAL DB 5 DUP(?)

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

LEA SI,BUFFER

LEA DI,BUF

MOV CX,45

L1:

PUSH CX

MOV CX,5

XOR AX,AX

L2:

MOV BL,[SI]

MOV BH,0

ADD AX,BX

ADD AX,50

INC SI

LOOP L2

POP CX

MOV BL,5

DIV BL

MOV [DI],AL

INC DI

LOOP L1

LEA SI,BUF

LEA DI,NUMBER

MOV CX,6

MOV AX,0

L3:

MOV [DI],AX

INC DI