汇编语言程序设计-课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
1.熟练掌握call、ret的原理及应用
2.熟练掌握子程序的框架、进行模块化程序设计
3.掌握参数与结果的传递、批量数据传递等问题的解决方法
二、实验内容及要求
(一)综合程序设计:利用实验10中的三个子程序,将power idea公司的数据按照下图所示的格式在屏幕上显示出来,要求计算人均收入并显示出来。
power idea公司的数据如下:
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995'
;年份
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd
345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;公司总收入
dw
3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;公司雇员人数
data ends
table segment
db 21 dup('year summ ne ??')
要求:
(1)给出该设计过程或算法
(2)在代码中必要的地方给出相应注释
(3)最终显示结果。
三、实验解答过程及结果
(1)该题目的第一段db型年份数据是以字符串储存的,不适合后续的操作,所以先用ice子程序把年份数据转化为word型数据。接下来循环开始,先调用dtoc1子程序,把第一年(1975)的word型年份数据转化为字符串储存在es 中,再调用show_str函数在屏幕缓冲区显示出来。接着调用dtoc2子程序和show_str子程序把第一年的收入在同一行显示出来。再接着调用dtoc1子程序和show_str子程序把第一年的雇员数在同一行显示出来,最后计算平均收入,同样调用两个子程序显示出来。不停地循环,循环21次,把所有的数据都显示出来,输入程序结果,程序完结。
(2)代码及数据如下:
assume cs:codesg
data segment
db'1975','1976','1977','1978','1979','1980','1981','1982','1983'
db'1984','1985','1986','1987','1988','1989','1990','1991','1992'
db'1993','1994','1995'
;年份
dd
16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd
345980,590827,803530,1183000,1843000,2759000,3753000,4649000,59 37000
;公司总收入
dw
3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
;公司雇员人数
data ends
table segment
db 21 dup('year summ ne ?? ') table ends
stack segment
db 1024 dup(0)
stack ends
codesg segment
start:mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov ax,stack
mov ss,ax
mov sp,1024
mov si,0
mov bx,0
mov dh,5
mov cx,21
so:call ice
push ax
mov ax,ds:[si]
call dtoc1
pop ax
push cx
mov dl,1
mov cl,00000111b
call show_str
pop cx ;这两段输出年份
push ax
push dx
mov ax,ds:[si+84]
mov dx,ds:[si+86]
call dtoc2
pop dx
pop ax
mov cl,00000111b
call show_str
pop cx ;这两段输出收入
push ax
mov ax,ds:[bx+168]
call dtoc1
pop ax
push cx
mov dl,18
mov cl,00000111b
call show_str
pop cx ;这两段输出雇员数
push ax
push dx
mov ax,[si+84]
mov dx,[si+86]
div word ptr ds:[bx+168]
;计算人均收入,结果为16位,保存在ax中call dtoc1