当前位置:文档之家› 微机原理实验2 编程实现循环程序

微机原理实验2 编程实现循环程序

微机原理实验
实验二编程实现循环程序
编程实现:自行定义某班30个学生的某课程成绩(0~100分之间),要求:
统计>=90分、80~89分、70~79分、60~69分、60分以下的人数,结果转为ASCII码显示出来(要求有分数段字符串提示,并每个分数段一行显示)。

结果举例:
>=90:3
80-89:4
70-79:11
60-69:10
<60:2
实验流程图:
程序:
stack segment stack 'stack'
dw 100H dup(0)
stack ends
data segment
BUF DW 62,73,32,74,66,54,71,65,97,98
DW 75,82,81,59,92,85,88,66,61,89
DW 63,98,88,43,39,96,66,45,12,20
COUNT EQU $-BUF ;COUNT的值为BUF所占的字节数STR1 DB '<60:','$'
STR2 DB '60-69:','$'
STR3 DB '70-79:','$'
STR4 DB '80-89:','$'
STR5 DB '>90:','$'
RES DW 30 DUP(?) ;在存储区RES中设置30个初值为0的数据data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax, ax
push ax
mov ax, data
mov ds, ax
START: MOV CX,COUNT/2+1 ;设计数器初值
MOV DI,OFFSET RES ;取RES的首址
MOV SI,OFFSET BUF-2 ;取BUF的首址
LURY: INC SI
INC SI ;修改SI指针
DEC CX ;设循环次数CX
JZ OUTPUT ;循环结束,则转OUTPUT
MOV AX,[SI] ;取BUF中第一个数放到AX寄存器
CMP AX,60 ;将AX中数据和60进行比较
JB LOP1 ;小于60,则转LOP1
CMP AX,70 ;否则,继续与70进行比较
JB LOP2 ;小于70,则转LOP2
CMP AX,80 ;否则,继续与80进行比较
JB LOP3 ;小于80,则转LOP3
CMP AX,90 ;否则,继续与90进行比较
JB LOP4 ;小于90,则转LOP4
CMP AX,100 ;否则,继续与100进行比较
JB LOP5 ;小于100,则转LOP5
LOP1: MOV BX,[DI]
INC BX
MOV [DI],BX ;对小与60的数据计数,并把其放在RES的第一个字节中JMP LURY ;转到LURY
LOP2: MOV BX,[DI+2]
INC BX
MOV [DI+2],BX ;对60-69的数据计数,并把其放在RES的第二个字节中JMP LURY ;转到LURY
LOP3: MOV BX,[DI+4]
INC BX
MOV [DI+4],BX ;对70-79的数据计数,并把其放在RES的第三个字节中
JMP LURY ;转到LURY
LOP4: MOV BX,[DI+6]
INC BX
MOV [DI+6],BX ;对80-89的数据计数,并把其放在RES的第四个字节中
JMP LURY ;转到LURY
LOP5: MOV BX,[DI+8]
INC BX
MOV [DI+8],BX ;对90-99的数据计数,并把其放在RES的第五个字节中
JMP LURY ;转到LURY
OUTPUT: LEA DX,STR1 ;取字符串STR1的首址
MOV AH,9
INT 21H ;输出字符串STR1
CALL DATCH
LEA DX,STR2 ;取字符串STR2的首址
MOV AH,9
INT 21H ;输出字符串STR2
ADD DI,2
CALL DATCH
LEA DX,STR3 ;取字符串STR3的首址
MOV AH,9
INT 21H ;输出字符串STR3
ADD DI,2
CALL DATCH
LEA DX,STR4 ;取字符串STR4的首址
MOV AH,9
INT 21H ;输出字符串STR4
ADD DI,2
CALL DATCH
LEA DX,STR5 ;取字符串STR5的首址
MOV AH,9
INT 21H ;输出字符串STR5
ADD DI,2
CALL DATCH
MOV AH,1
INT 21H
MOV AH,4CH
INT 21H ;返回DOS
datch proc ;数值转换为ASCII码的子程序PUSH DX
PUSH CX
PUSH BX
PUSH AX
XOR DX,DX
MOV AX,[DI]
MOV CX,10
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
POP AX
POP BX
POP CX
POP DX
ret
datch endp
begin endp
code ends
end begin
实验记录:
实验总结:
开始面对循环程序汇编感到很迷茫,在循环程序语言上出现了很多错误,导致运行不了,后来根据运行提示的错误,一步一步改正,慢慢步入正轨,通过这次实验,使我深入了解了“编程实现循环程序”这次
微机实验,提高了分析和解决问题的能力,明白了子程序的一些运用。

相关主题