ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:59.52KB ,
资源ID:33115      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/33115.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言程序设计课程设计.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言程序设计课程设计.docx

1、汇编语言程序设计课程设计一、实验目的1.熟练掌握call、ret的原理及应用2.熟练掌握子程序的框架、进行模块化程序设计3.掌握参数与结果的传递、批量数据传递等问题的解决方法二、实验内容及要求(一)综合程序设计:利用实验10中的三个子程序,将power idea公司的数据按照下图所示的格式在屏幕上显示出来,要求计算人均收入并显示出来。power idea公司的数据如下:assume cs:codesgdata segment db 1975,1976,1977,1978,1979,1980,1981,1982,1983 db 1984,1985,1986,1987,1988,1989,1990

2、,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 endstable segment

3、 db 21 dup(year summ ne ?) table ends要求:(1)给出该设计过程或算法(2)在代码中必要的地方给出相应注释(3)最终显示结果。三、实验解答过程及结果(1)该题目的第一段db型年份数据是以字符串储存的,不适合后续的操作,所以先用ice子程序把年份数据转化为word型数据。接下来循环开始,先调用dtoc1子程序,把第一年(1975)的word型年份数据转化为字符串储存在es中,再调用show_str函数在屏幕缓冲区显示出来。接着调用dtoc2子程序和show_str子程序把第一年的收入在同一行显示出来。再接着调用dtoc1子程序和show_str子程序把第一年的

4、雇员数在同一行显示出来,最后计算平均收入,同样调用两个子程序显示出来。不停地循环,循环21次,把所有的数据都显示出来,输入程序结果,程序完结。(2)代码及数据如下:assume cs:codesgdata 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 345

5、980,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 endstable segment db 21 dup(year summ ne ? ) table endsstack segment db 1024 dup(0)stack ends codesg segmentstart:mov ax,

6、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 ax,1975 ;初始化,dh为输出时的行数 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

7、call dtoc2 pop dx pop ax push cx mov dl,8 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 pop

8、dx pop ax push cx mov dl,26 mov cl,00000111b call show_str pop cx ;这两段输出平均收入 add si,4 add bx,2 inc dh inc ax loop so ;循环21次,增加参数 mov ax,4c00h int 21h;名称:ice;功能:在ds:si开始,以“数据”“0”的格式用新数据替换旧数据(即年份字符串);参数:(ax)=word型的数据,es:si指向字符串的首地址;返回:无;说明:把字符串的年份转化为word型数据,并以0结尾,方便dtoc1函数的调用 ice:push bx mov ds:si,ax

9、mov bx,0 mov ds:si+2,bx pop bx ret;名称:dtoc1 ;功能:将一个word型数转化为字符串,数应不大于65535 ;参数:(ax)=word型的数据,es:si指向字符串的首地址 ;返回:es:si放此字符串,以0结尾;说明:因为ds放了数据段,为免混淆,把字符串放在es里,下面的函数也相同dtoc1:push cx push bx push dx mov dx,0 push di push si mov di,0 cir1:mov cx,10 div cx add dx,30h mov bx,dx push bx inc di mov dx,0 mov c

10、x,ax jcxz ow jmp short cir1 ow:mov cx,di s:pop bx mov es:si,bx inc si loop s pop si pop di pop dx pop bx pop cx ret ;名称:dtoc2 ;功能:将一个dword型数转化为字符串,数不应大于FFFFFFFFFFFFFFFF ;参数:(ax)=dword型的数据的低16位,(dx)=dword型的数据的高16位,es:si指向字符串的首地址 ;返回:es:si放此字符串,以0结尾dtoc2:push cx push bx push si push di mov di,0 cir2:m

11、ov cx,10 call divdw add cx,30h mov bx,cx push bx inc di mov bx,dx add bx,ax mov cx,bx jcxz ox jmp short cir2 ox:mov cx,di s8:pop bx mov es:si,bx inc si loop s8 pop di pop si pop bx pop cx ret ;名称:divdw ;功能:除法,被除数32位,除数16位,商32位,余数16位,不会溢出 ;参数:(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数 ;返回:(dx)=商高16位,(ax)=商低16

12、位,(cx)=余数divdw:push bx push ax mov ax,dx mov dx,0 div cx mov bx,ax pop ax div cx mov cx,dx mov dx,bx pop bx ret;名称:show_str;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串;参数:(dh)=行号(125),(dl)=列号(180),(cl)=颜色,es:si指向字符串的首地址;返回:无show_str:push di push si mov di,0 push ax push dx dec dh dec dl ;这里采用习惯上的叫法,放在显示缓冲区最开头就是1行

13、1列 mov al,160 ;1行80个字符,一个字符2个字节 mul dh add dl,dl ;一个字符2个字节 mov dh,0 add dx,ax add di,dx ;这几行是为了计算字符串首的偏移地址 mov ah,cl ;字符的高位保存属性,低位保存数据 push cx change:mov cl,es:si mov ch,0 jcxz ok mov al,es:si push es push ax mov ax,0b800h ;显示缓冲区的空间为B8000HBFFFFH mov es,ax pop ax mov es:di,ax ;输出到缓冲区 pop es inc si add di,2 jmp short change ok:pop cx pop dx pop ax pop si pop di ret codesg endsend start(3)结果如图:四、实验总结通过这次实验,我学会了call和ret指令的用法,学会了编写子程序以及调用各个子程序,组成一个大程序。我发现,汇编的子程序,就跟c语言的函数差不多。在实验的过程中,我学会了编写更加复杂的程序,懂得了更多的汇编知识,在汇编语言的学习上又有了新的进步。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1