西电微机原理上机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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:
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 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 的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:90~100,B:80~89,C:70~79,D:66~69,E:60~65,F:60分以下),按下列格式显示: Total <总人数> A: <人数1> B: <人数2> C: <人数3> D: <人数4> E: <人数5> F: <人数6> 算法流程图: