汇编语言程序设计实验报告(7)

2018-12-19 23:36

实验四 求员工年工作量

一、实验目的

本次实验主要达到如下目的:

某单位在计算工作量时采用工作量=工作时间(小时)*系数,计算员工的工作量。其中工种不同其系数也不一样,该单位有很多不同的工种(不大于100)。请从键盘上输入每一位工人一年的工作时间(按小时计算,精确到小数点后一位)以及该工人的工种所对应的系数(精确到小数点后两位),球该单位所有员工(不超过1000人)一年的工作量。

二、实验环境

该试验包括的硬件和软件条件如下: 1、硬件环境

(1)Intel i5 3317U (2)内存4G 2、软件环境

(1)Window XP Professor (2)MASM6.11开发软件

三、实验步骤

1、对上述问题进行分析,写出分析报告及相关算法; 2、写出各个模块的说明; 3、画出各个模块的流程图; 4、画出各个模块之间的调用关系; 5、编写程序实现上述要求。 6、写出满足上述要求的实验报告。

四、实验结果及其分析

1、分析实验要求并写出分析报告计算法:

本程序由三个部分组成:输入部分(包含输入员工数量,输入每位员工的年工作时间和输入每位员工的工种对应的系数);计算该公司所有员工的年总工作量;显示该公司所有员工的年总工作量。

在输入部分,须将十进制数ASCⅡ码转换成二进制数。因为年工作时间和工种可能存在小数,而工作时间的小数一般只有一位,工种系数的小数一般只有两位,所以为了方便计算,将每一位员工的工作时间都乘以10将每一个员工

第 29 页

对应的工种都乘以100,从而去掉小数,做成整数运算。而这种算法是从键盘上一位一位的输入,当遇到小数点就直接去掉小数点,接收下一位数。所以在输入时要注意的是输入的工作时间必须包含一位小数(如351.0),输入的工种系数必须包含两位小数(如65.00)。在计算年总工作量,因为所有员工的年总工作量有可能会超过65535,因此需要采用32位寄存器,从而简化运算的复杂性。在输出年总工作量部分,因为所有员工的工作时间都乘了10,工种系数都乘了100,所以计算出来的年总工作量是实际年总工作量的1000倍,所以应该把小数点放在倒数第3个位置,同时输出小数点后三位。

2、该程序的主要模块及其说明如下: (1).主程序模块

主程序主要实现各模块之间的联系,显示提示信息。 (2).输入及转换模块:input

输入:从键盘上输,可输入整数,也可输入小数 输出:将输出结果保存在DX寄存器中

功能:一位一位的从键盘上接收,将非小数点的每一位数转换为相应其对应的BCD码,并将DX*10后加入DX中。所以当输入的数中含有一位小数是就默认乘了10,含有两位小数就默认乘了100。 (3).计算模块:ctotal 输入:从DX寄存器中获取

输出:输出结果保存在total存储单元中

功能:循环调用input子程序输入工作时间和工种系数,两次调用输入完成后将二者相乘后加入total存储单元中。调用次数为员工的人数。 (4).输出模块:output 输入:total存储单元

输出:tot开始的内存单元,并显示在计算机屏幕上。

功能:将total存储单元的内容转换成十进制数ASCⅡ码形式,并在输出结果的倒数第3位前插入小数点,然后存储在tot开始的存储单元,最后一位一位将结果输出。在输出前将整数前面的0去掉。

第 30 页

3、程序流程框图:

N 结束 图4.1 主程序流程图

Cx减1=0? 开始 ctotal开始 提示输入员工个数 CX num 调用ctotal输入每个员工的工作时间和工种系数, 调用input输入员工工作时间 调用input输入工种系数 调用output显示公司的年总工作量 eax=bx*edx total total+eax Y 返回

调用01H系统功能调用输入一位数送给AL 清零DX input开始 图4.2 ctotal函数流程

N AL=回车? Y Y

返回 将AL中值的十进制数ASCⅡ码转换成二进制DX=DX*10,CH清零,DX=DX+CX AL=?.?? N 图4.3 input函数流程图

第 31 页

Eax=0? N Si减1 倒数2位? Edx清零,eax/ebx后把余数DL送给[si] output开始 Si tot的偏移地址 Eax total N Y si 减1 ,si=?.? Y

Y [si]=0? N

N Y Si=[si] +30H [si]=?.?? si 减1, cx加1 Si加1 Cx减1 Si tot的偏移地址,CX=17

N

图4.4 output函数流程图

CX减1 后=0? 显示,si减1 Y 返回 第 32 页

4、各个模块之间的调用关系如图4.5所示:

图4.5 实验模块层次图

5、实验源代码:

.model small .386p

data segment

msg1 db \

msg2 db 0ah,0dh,\msg3 db 0ah,0dh,\msg4 db 0ah,0dh,\msg5 db 0ah,0dh,'$' num dw 0 time dw 0 total dd 0

tot db 16 dup(0) data ends

stack segment para stack db 20h dup(0) stack ends

code segment

assume cs:code,ss:stack,ds:data start: mov ax,data mov ds,ax lea dx,msg1 mov ah,09h int 21h call input mov num,dx call ctotal lea dx,msg4 mov ah,09h

第 33 页

主程序模块 Ctotal Input Output


汇编语言程序设计实验报告(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:08-09学年高一上学期期末试题(物理1)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: