微机原理上机
- 格式: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