一、实验目的

掌握比较综合性的汇编程序设计流程,以及多分支情况下程序的设计技巧。

二、实验内容

设计程序统计学生数学成绩。分别归类90-99分、80-89分、70-79分、60-69分及60分以下,并将各段的人数及成绩存入对应的内存单元中,并在屏幕上显示。

三、程序清单

CRLF    MACROMOV     DL,0DHMOV     AH,02HINT     21HMOV     DL,0AHMOV     AH,02HINT     21H
ENDMDATA    SEGMENT                         ;数据段,成绩区
DATA1   DB      89H,92H,74H,85H,96H,73H,62H,78HDB      49H,59H,97H,66H,84H,81H,79H,67HDB      90H,88H,76H,82H,71H,69H,84H,81HDB      79H,65H,94H,86H,76H,82H,75H,83H
DA90    DB      16 DUP (0)              ;首字节为人数,随后为成绩
DA80    DB      16 DUP (0)
DA70    DB      16 DUP (0)
DA60    DB      16 DUP (0)
DA50    DB      16 DUP (0)
KKK     EQU     DA90 - DATA1            ;总人数
DATA    ENDSCODE    SEGMENT
MAIN    PROC    FARASSUME  CS:CODE,DS:DATA,ES:DATA
START:  PUSH    DSSUB     AX,AXPUSH    AXMOV     AX,DATAMOV     DS,AXMOV     ES,AXLEA     SI,DATA1                ;SI 指向成绩表首MOV     CX,KKK                  ;循环数(总人数)送 CX
LOOP1:  MOV     AL,[SI]                 ;将成绩按字节送入ALCMP     AL,90HJNC     KK90                    ;成绩 >= 90 转CMP     AL,80HJNC     KK80                    ;成绩 >= 80 转CMP     AL,70HJNC     KK70                    ;成绩 >= 70 转CMP     AL,60HJNC     KK60                    ;成绩 >= 60 转LEA     DI,DA50                 ;不及格区首地址送 DIJMP     TTT
KK60:   LEA     DI,DA60                 ;60分区首地址送 DIJMP     TTT
KK70:   LEA     DI,DA70                 ;70分区首地址送 DIJMP     TTT
KK80:   LEA     DI,DA80                 ;80分区首地址送 DIJMP     TTT
KK90:   LEA     DI,DA90                 ;90分区首地址送 DI
TTT:    MOV     BL,[DI]                 ;BL = 存放人数地址INC     BL                      ;该段人数+1MOV     [DI],BL                 ;存该段人数MOV     AL,[SI]XOR     BH,BHMOV     [DI+BX],AL              ;成绩存入该段INC     SI                      ;修改地址指针LOOP    LOOP1LEA     SI,DA90CALL    DISPL                   ;显示 90 - 99分人数及成绩LEA     SI,DA80CALL    DISPL                   ;显示 80 - 89分人数及成绩LEA     SI,DA70CALL    DISPL                   ;显示 70 - 79分人数及成绩LEA     SI,DA60CALL    DISPL                   ;显示 60 - 69分人数及成绩LEA     SI,DA50CALL    DISPL                   ;显示 60分以下人数及成绩RETDISPL   PROC    NEAR                    ;子程序:显示某段人数及成绩MOV     BL,[SI]                 ;取人数MOV     AL,BLMOV     CL,10CBW                             ;符号扩展指令,AL的内容扩展到AH,形成AX中的字。;如果AL的最高有效位是0,则AH = 00,AL的最高有效位为1,则AH = FFH。AL不变。(即将AL的符号位移至AH)DIV     CL                      ;8位除法,被除数放在AX中,除数为8位在CL中,;AL存储除法操作的商(即十位),AH存储除法操作的余数(即个位)MOV     DX,AXADD     DL,30H                  ;将十位加30H转换为ASCII码,后面类似MOV     AH,02                   ;调用INT 21H中断的2号功能进行显示输出,输出字符存在DL中INT     21H                     ;显示十位MOV     DL,DHADD     DL,30HMOV     AH,02INT     21H                     ;显示个位MOV     DL,20H                  ;空格的ASCII码MOV     AH,02INT     21H                     ;显示空格
DISP1:  INC     SI                      ;指向下一单元MOV     DL,20HMOV     AH,02INT     21HMOV     DL,[SI]                 ;取成绩MOV     CL,04ROL     DL,CLAND     DL,0FHADD     DL,30HMOV     AH,02INT     21H                     ;显示十位MOV     DL,[SI]AND     DL,0FHADD     DL,30HMOV     AH,02INT     21H                     ;显示个位DEC     BLJNZ     DISP1CRLF                            ;回车换行RET
DISPL   ENDPMAIN    ENDP
CODE    ENDSEND     START

四、实验过程

1.用编辑器建立源文件D101-4.ASM

2.用汇编程序MASM.EXE对源文件进行汇编,产生目标文件,再用连接程序LINK产生可执行文件

3.使用调试工具DEBUG进行程序调试
先用U命令反汇编,以便了解指令地址。显示结果如下,具体调试结果见第五部分。

五、实验结果分析

1.程序调试及结果
使用U命令查看汇编指令,可以看到共有32个成绩需要统计。

使用-d ds:0查看成绩内存区存放情况,使用-G 12指令执行到从成绩内存区读取成绩指令,可以看到第一个成绩为89,如下

使用-t指令单步运行程序,因为第一个成绩为89,所以在第一次比较时跳转不成立,在第二次比较时跳转成立,跳转到KK80标号处,如下

使用-g 51指令执行到将该成绩存入80分区内存地址段,再使用-d ds:0进行查看成绩区内存情况,可以看到此时80分区人数已经变为1,且此人成绩为89,如下

依次类推,将源地址指针SI进行加1,指向下一个成绩(字节),再进行循环操作,按照比较、跳转、取相应分区首地址、人数累加、存放成绩的流程进行操作,按照该流程循环成绩总数32次以后,成绩区内存如下

由上图可以看出,90分以上有5人,80-90分有0B(11)人,70-80分有9人,60~70分有5人,不及格成绩有2人,分别为49分和59分。

最后,再调用显示子程序DISPL对各分区人数及成绩进行打印,该子程序采用SI寄存器进行传参,参数为相应分区首地址,其内部核心思想为利用除法和调用INT 21H中断分别显示人数、成绩的十位和个位,如下。

至此,整个实验完成。

2.分析总结

首先,本次实验的重点在于掌握成绩的读取、判断分区、存放以及寄存器的调整,其中有个小技巧就是通过人数的增加刚好可以索引到当前成绩应该存放的位置,该小技巧的使用使得程序简洁明了,值得在今后的编程中借鉴。此外,本实验用到了变址寄存器寻址,应该对该部分加以理解。

其次,该实验中碰到几个比较生疏的指令,如符号扩展指令CBW,其功能是将AL的内容扩展到AH,形成AX中的字;如果AL的最高有效位是0,则AH = 00,AL的最高有效位为1,则AH = FFH。AL不变,也就是将AL的符号位移至AH中。程序中在显示数据时,通过8位除法指令DIV来分别依次显示人数、成绩的十位和个位;对于8位除法操作,其被除数放在AX中,除数为8位在CL中,最终结果是AL存储除法操作的商(即十位),AH存储除法操作的余数(即个位)。此外,该实验也用到了INT 21H中断的2号功能进行显示输出,其参数输出字符存在DL中,该显示操作也比较方便,后续可以借鉴。

微机原理实验4:统计学生成绩相关推荐

  1. 实验3-7 统计学生成绩 (15 分)

    实验3-7 统计学生成绩 (15 分) 本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布.百分制成绩到五分制成绩的转换规则: 大于等于90分为A: 小于90且大于等于80为B: 小于80 ...

  2. 南邮微型计算机实验,南邮 微机原理 微型计算机与接口技术 微机原理实验.doc...

    南邮 微机原理 微型计算机与接口技术 微机原理实验.doc (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分  ;FILEMENT:E ...

  3. 二进制转化成ascll_微机原理实验-二进制到ASCII码转换

    广州大学学生实验报告 开课学院及实验室:实验中心 电子信息楼 2013 年 11 月 4 日 学 院 机电 年级.专 业.班 姓名 学号 实验课程名称 微机原理实验 成绩 实验项目名称 二进制到 AS ...

  4. 微型计算机实验考试答案,华中科技大学微机原理实验考试题库与答案.doc

    华中科技大学微机原理实验考试题库与答案 复习题(后面附有全部代码) 1.用74LS244设计一个输入接口.从输入端口读入开关状态(高表示'1',低表示'0'),以十进制形式在CRT显示器上显示输入结果 ...

  5. 微型计算机原理实验程序,微机原理 实验程序

    微机原理实验答案 1.已知有20个8位二进制数,存放在以1000H开始的存储区域内.试编写一个完整的汇编语言程序,统计其中的正数.负数.零的个数并存在1014H开始的存储区内. STACK SEGME ...

  6. 微型计算机上机报告,微机原理实验报告范文

    摘要:利用2014年6月福建省地震局进行的人工爆破实验的50 Hz超高频GPS观测数据,采用快速预报星历以及事后精密星历,对观测的数据分别进行准实时和事后精密处理.结果显示高频GPS在差分处理模式下, ...

  7. 微型计算机原理实验,微机原理实验总结(共5篇)

    微机原理实验总结 不知不觉,微机原理与接口技术实验课程已经结束了.回想起来受益匪浅,主要是加深了对计算机的一些硬件情况和运行原理的理解和汇编语言的编写汇编语言,对于学习机电工程的自动控制和计算机都是很 ...

  8. 微型计算机原理实践报告,(微机原理实验报告).doc

    (微机原理实验报告) 实验报告 课程名称 微机原理与接口(技术) 专 业 通信工程 班 级 通信1301B 学 号 1334140157 学 生 姓 名 刘欢 黄淮学院信息工程学院 实验报告一 实验名 ...

  9. c语言pta按等级统计学生成绩,第九周作业

    6-1 按等级统计学生成绩 (20 分) 本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数. 函数接口定义: int set_grade( struct student *p, in ...

  10. 第12章实验1:学生成绩管理系统V5.0(c语言)

    第12章实验1:学生成绩管理系统V5.0 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).参考学生成绩管理系统V4.0,定义结构体类型,用结构体数组作函 ...

最新文章

  1. CV算法复现(分类算法6/6):MobileNet(2017年V1,2018年V2,2019年V3,谷歌)
  2. 数据库操作——多表查询
  3. ConvertUtil-数据类型转换的工具类
  4. 喂,你连用户模型都不懂还当产品?来,妹纸我手把手教你
  5. redis实战之使用redis实现排行榜
  6. CodeForces 1058C C. Vasya and Golden Ticket
  7. ASP.NET Core分布式项目实战(详解oauth2授权码流程)--学习笔记
  8. 原来每天喝它有助于大脑开发?
  9. 这可能是最好的RxJava 2.x 入门教程学习系列
  10. anki 新的卡片类型_Anki 常用操作方法合集(一)常用操作1
  11. js与设计模式----简单工厂
  12. Altium Designer18学习
  13. 计算机按键音乐葫芦娃,Arduino学习笔记—超简单制作音乐(播放葫芦娃)
  14. 开源网络准入系统(open source Network Access Control system)
  15. 计算机工作室名字大全,设计工作室名字(精选300个)
  16. 壁纸|锁屏和桌面套图壁纸,一套的,给手机来个套餐
  17. 湖南对口升学计算机专科学院,湖南省计算机对口升学的大学有哪些
  18. java对接海康威视SDK(win64、linux64),处理播放实时流转码,按时间回放功能,附海康威视最新3.0摄像头监控web端实例+插件
  19. dart后端之jaguar基础配置
  20. uedit使用技巧2

热门文章

  1. Spring3国际化和本地化
  2. 玩! 框架+ Google Guice
  3. 从CLI监视OpenJDK
  4. 当集合a为空集时a的取值范围_高中数学必修一第一章集合分节练习和章末测试题含答案[1] 2...
  5. 御用导航提示页面_UI网站导航设计知识与五个知识案例
  6. 众智日照分析软件_飞时达CAD日照分析计算软件FastSUN V14.0.1发布升级
  7. Java中常用集合类对比_集合比较
  8. HH SaaS电商系统的商品发货策略设计
  9. petalinux 配置_澧县高压管道工厂化配置专业销售
  10. python的仿真效果好吗_Python SimPy 仿真系列 (1)