一、实验目的和要求
掌握循环语句LOOP语句、条件转移、无条件转移语句的使用等。
二、实验内容和原理
设在以EXAMSTU为首址的存区中依次存放着某考区245个理科生的七门成绩,现要统计每个考生的总成绩,并将其存放在该考生单科成绩之后的两个单元。试编出完成这一任务的程序。
三、实验环境
实验室提供硬件环境。软件环境:WINDOWS98/2000、MASM.EXE、LINK.EXE等。
四、算法描述及实验步骤
一个循环结构常常难以解决实际应用问题,所以引入了多重循环。这些循环是一层套一层的,因此又称为循环的嵌套。
(1)内层循环必须完全包含于外层循环内,不允许循环结构交叉。
(2)转移指令只能从循环结构内转出或可在同层循环内转移,而不能从一 个循环结 构外转入该循环结构内。
绘制流程图如下所示:
1、 启动WINDOWS记事本,编写汇编源代码。
2、 编写代码:
3、调试、编译:
编译、连接、调试运行,并启动DEBUG调试源代码。
C:\ masm chp3.asm<CR>
C:\ link chp3.obj<CR>
-d: 0<CR>
结果如下:
五、实验结果
结果正确、编译、保存,达到实验要求。
六、总结
通过本次实验,让我们掌握了汇编语言的循环程序设计、并学会了如何将运行结果在终端上显示的方法,虽然这种方法有点比较麻烦,不过至少学会了一种方法、源代码的编写、编译、连接、调试等的方法。
附录:
DATA SEGMENT
EXAMSTU DB 01,75,82,84,92,78,49,85,00,00
DB 02,65,78,90,85,61,42,87,00,00
DB 03,68,73,86,84,62,47,85,00,00
DB 04,65,74,85,83,74,46,89,00,00
DB 05,68,77,98,84,60,46,82,00,00
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MOV AX,DATA
MOV DS,AX
BEGIN: LEA SI,EXAMSTU ;设置地址指针
MOV BL,5 ;设置外循环计数器
LOOP2: MOV CX,7 ;设置内循环计数器
XOR AX,AX
INC SI ;跳过准考证号
LOP1: ADD AL,[SI] ;累加
ADC AH,0
INC SI ;修改地址指针
LOOP LOP1 ;CX-1<>0,则继续累加
MOV WORD PTR[SI],AX ;存总分
INC SI
INC SI
DEC BL
JNZ LOOP2 ;BL-1<>0则求下一个考生总分
MOV AH,4CH ;以下两条指令是利用DOS INT 21H ;功能调用,正常终止程序
CODE ENDS
END BEGIN