搜索
您的当前位置:首页正文

编程实现循环程序

来源:意榕旅游网
实验二 编程实现循环程序

编程实现:自行定义某班30个学生的某课程成绩(0~100分之间),要求: 统计优秀(>=90分)、中(60-89分)、不及格(<60分)的人数,结果转为ASCII码显示出来(要求有分数段字符串提示,并每个分数段一行显示)。

流程图: Y 开始 进入循环体 ? <60 N Lop1 <90? Y N 程序如下:

Lop2 输出:Lop3 Quit the program 结束循环 Y N DATCH 转换为ASCII码显示 结束 stack segment stack 'stack' dw 100 dup(0) ;此处输入堆栈段代码 stack ends data segment BUF DW 95,94,93,92,91 DW 89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,61 DW 58,57,58,57,40 ;定义30个数据

STR1 DB '<60:$' ;定义分数段字符串 STR2 DB '60-90:$' STR3 DB '>=90:$'

RES DW 20 DUP(?);在存储区RES中设置15个初值为0的数据 data ends

code segment start proc far

assume ss:stack,cs:code,ds:data push ds sub ax,ax push ax mov ax,data mov ds,ax

MOV CX,30

MOV DI,OFFSET RES;取RES的首址 MOV SI,OFFSET BUF;取BUF的首址 AGAIN: INC SI

INC SI;修改SI指针 CMP CX,0

JZ OUTPUT;循环结束则转OUTPUT

MOV AX,[SI];取BUF中第一个数放到AX寄存器 CMP AX,60;将AX中数据和60进行比较 JB LOP1;小于60,则转LOP1

CMP AX,90;否则,继续与90进行比较 JB LOP2;小于90,则转LOP2 JMP LOP3;否则,则转LOP2

LOP1:

MOV BX,[DI] INC BX

MOV [DI],BX;对小于60的数据计数,并把其放在RES的第一个字节中 LOOP AGAIN

LOP2:

MOV BX,[DI+2] INC BX

MOV [DI+2],BX;对60-89的数据计数,并把其放在RES的第二个字节中 LOOP AGAIN

LOP3:

MOV BX,[DI+4] INC BX

MOV [DI+4],BX;对90-99的数据计数,并把其放在RES的第三个字节中 LOOP AGAIN

OUTPUT:

MOV DX,OFFSET STR1;取字符串STR1的首址 MOV AH,9

INT 21H;输出字符串STR1 CALL DATCH

MOV DX, OFFSET STR2;取字符串STR2的首址 MOV AH,9

INT 21H;输出字符串STR2 ADD DI,2 CALL DATCH

MOV DX, OFFSET STR3;取字符串STR3的首址 MOV AH,9

INT 21H;输出字符串STR3 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 start endp code ends end start 结果截图:

实验分析或经验总结:通过此次实验,对循环程序的设计,对子程序的调用有了更深入的了解。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top