汇编语言子程序程序设计_第1页
汇编语言子程序程序设计_第2页
汇编语言子程序程序设计_第3页
汇编语言子程序程序设计_第4页
汇编语言子程序程序设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-. z.汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131*实验组实验时间指导教师肖敏成绩实验工程名称实验五:8086 汇编语言子程序程序设计实验目的熟悉子程序的设计方法实验原理对汇编源程序进展汇编、,在Debug环境下完成调试和运行。实验内容1、熟悉子程序的构造及考前须知2、掌握子程序的设计、调试方法实验环境1. 硬件:微型计算机1台2. 软件:MASM软件实验步骤实验一. 使用子程序设计编程实现求数组ARY 元素之和:编辑下面的源程序到文件lab5.asm 中:CODE SEGMENT ORG 100HASSUME CS:CODE,DS:CODE,SS:

2、CODEMAIN PROC FAR MOV A*,CODE MOV DS,A* MOV TABLE ,OFFSET ARY MOV TABLE+2,OFFSET COUNT MOV TABLE+4,OFFSET SUM MOV B*,OFFSET TABLE CALL PROADD MOV A*,4C00H INT 21HMAIN ENDPPROADD PROC NEAR PUSH A* PUSH C* PUSH SI PUSH DI MOV SI,B* MOV DI,B*+2 MOV C*,DI MOV DI,B*+4 *OR A*,A*NE*T:ADD A*,SI ADD SI,2 LOO

3、P NE*T MOV DI,A* POP DI POP SI POP C* POP A* RETPROADD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW TABLE DW 3 DUP()CODE ENDS END MAIN使用相应的文本编辑器建立文件LAB5.asm,内容如上所示。二. 生成可执行文件:1.汇编:C:masm masm lab5;2.连接:C:masm link lab5;三. 请写出此程序中的变量ary,count,sum 的EA,并判断此程序的功能:四. 用debug 调试此程序时,第一条指令的段内EA 是多少此程序数据

4、段内偏移地址为0 的字单元数据为多少其对应的机器指令是什么L ;加载程序文件lab5.e*eR ;查看IP 与CS 存放器的内容D DS:0 ;查看当前数据段内偏移地址为0 的字单元数据U ;查看机器指令实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串源程序如下data segmentstr db display string,0data endscode segmentassume cs:code,ds:datastart:mov a*,datamov ds,a*mov dh,8mov dl,21mov cl,3mov si,offset strcall

5、show_strmov a*,4c00hint 21h;-show_str proc nearpush a*push c*push d*push espush sipush dimov a*,0b800hmov es,a*dec dhmov al,160mul dhadd dl,dlmov dh,0 ;计算显示在屏幕位置add a*,d*mov di,a*mov ah,cl*:mov cl,ds:simov ch,0jc*z f mov al,clmov es:di,a*inc siinc diinc dijmp *f:pop dipop sipop espop d*pop c*pop a*r

6、et show_str endp;-code endsend start实验三:编写一个子程序,实现将word 型数据以十进制形式显示出来源程序如下:assume cs:codedata segmentdb 10 dup(0)data endsstack segmentdb 16 dup(0)stack endscode segmentstart:mov a*, datamov ds, a*mov a*, stackmov ss, a*mov sp, 16mov d*, 0c1hmov a*, 76f3hmov si, 0call dwtocmov dh, 8mov dl, 3mov cl,

7、2call show_strmov ah, 01hint 21hmov a*, 4c00hint 21h; 子程序:dwtoc; 功能:将dword型数据转变成表示十进制的字符串,字符串以0结尾; 参数:(a*) = dword 型数据的低16位;(d*) = dword型数据的高16位;ds:si 指向字符串首地址; 返回:无dwtoc:mov c*, 0push c*s_dwtoc:mov c*, 10; 除数call divdw; 余数在c*中add c*, 30hpush c*; 保存余数的ASCII形式; 判断是否商为0,如果上下16位都为0,则返回mov c*, d*jc*z ok

8、_d*z; 高位不为0,则直接跳回,继续执行运算jmp short s_dwtoc; 商的高位为0ok_d*z:mov c*, a*jc*z ok_a*zjmp short s_dwtoc; 商的低位为0ok_a*z:; 赋值到 ds:simov d*, si; 保存si,si为字符串的首地址loop_dtoc:pop c*mov ds:si, cljc*z end_dwtocinc sijmp short loop_dtocmov si, d*end_dwtoc:mov si, d*retdtoc:; 先把一个0放进堆栈,在后面s2从堆栈中取出的时候,可以根据c*为0跳转mov c*, 0p

9、ush c*s1_dtoc:mov d*, 0mov c*, 10div c*mov c*, d*; d*余数add c*, 30hpush c*; 保存在堆栈mov c*, a*; a*为商,当商为0的时候,各位的值就已经得到了,就可以跳出循环jc*z ok1_dtocjmp short s1_dtocok1_dtoc:mov ch, 0s2_dtoc:; 从堆栈中取出pop c*jc*z ok2_dtocmov ds:si, clinc sijmp short s2_dtocok2_dtoc:retshow_str:push a*push b*push c*push d*push espu

10、sh si; 计算好字串开场显示的地址Y = 160*行数-1 + 列数*2-2, B800 : Y; 循环将参数里的字串写进显卡内存,并检测到0就返回; b* = 160*行数-1mov bh, dhsub bh, 1mov al, 160mul bhmov si, a*; si 为根据行数算出来的偏移值; a* = 列数*2-2mov bl, dlmov al, 2mul blsub a*, 2; 根据列数算出来的偏移值add si, a*; 行数和列数的和存在SI中了mov a*, 0b800hmov es, a*mov b*, si; 将si 的值保存在b*中,b*为显存显示偏移值mo

11、v si, 0; 题目要求。mov dl, cl; 保存字体颜色属性mov ch, 0s:mov cl, ds:simov es:b*, cljc*z okmov es:b*+1, dlinc siadd b*, 2jmp short sok:pop sipop espop d*pop c*pop b*pop a*ret; 子程序:divdw; 要求:进展不会除法溢出的除法运算,被除数为dword,除数为word,结果为dword; 参数:(a*) = 被除数dword型的低16位;(d*) = 被除数dword型的高16位;(c*) = 除数; 返回:(d*) = 结果的高16位;(a*)

12、= 结果的低16位;(c*) = 余数divdw:mov b*, a*; 缓存a*被除数的低16位mov a*, d*; a* = H,被除数的高16位mov d*, 0div c*; a* 为商,d*为余数 = rem(H/N) * 65536push a*; 结果的商,也就是最后要放在d*中的mov a*, b*; d*为 rem(H/N) * 65536, 为高16位,a*为低16位,再进展一次除法运算div c*; a* 为商最后结果的低位,d*为余数为最后结果,应赋给c*mov c*, d*pop d*retcode endsend start实验结果实验一:变量ary,count,sum 的EA分别是00140,00154,00156此程序的功能是数列求和实验二:实验三:实验总结这次实验,感觉难度最大的就是做2个子程序的设计,在网上向好友请教了N回!还犯了一些低级的错误,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论