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

下载本文档

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

文档简介

1、汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131姓名学号实验组实验时间指导教师肖敏成绩实验项目名称实验五:8086汇编语言子程序程序设计熟悉子程序的设计方法对汇编源程序进行汇编、链接,在Debug环境下完成调试与运行。1、熟悉子程序的结构及注意事项2、掌握子程序的设计、调试方法1、硬件:微型计算机1台2、 软件:MASM软件实验一、使用子程序设计编程实现求数组ARY元素之与:编辑下面的源程序到文件Iab5、asm中:CODE SEGMENTORG 100HASSUME CS:CODE,DS:CODE,SS:CODEMAIN PROC FARMOV AX,CO

2、DEMOV DS,AXMOV TABLE ,OFFSET ARYMOV TABLE+2,OFFSET COUNTMOV TABLE+4,OFFSET SUMMOV BX,OFFSET TABLECALL PROADDMOV AX,4C00HINT 21HMAIN ENDPPROADD PROC NEARPUSH AXPUSH CXPUSH SIPUSH DIMOV SI,BXMOV DI,BX+2MOV CX,DIMOV DI,BX+4XOR AX,AXNEXT:ADD AX,SIADD SI,2LOOP NEXTMOV DI,AXPOP DIPOP SIPOP CXPOP AXRETPROA

3、DD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW ?TABLE DW 3 DUP(?)CODE ENDSEND MAIN使用相应的文本编辑器建立文件LAB5 asm,内容如上所示。二、生成可执行文件:1、汇编:C:masm masm Iab5;2、连接:C:masm link Iab5;EH卷埒庁,矣令操于将tMlaeio Asss-eniblei*iorh 5 _ RdCCZ Mllei*osof Chjei*lav/ Llnkox*U gi*ie: dh 3 - 60Ro口斗AzLmht: Mlicrosofifc Coimo 19UJ

4、Al丄J. r.srht;3 rcaeruedL.Run F11hLict File HUL.MAPI:IpIJFhai Iqg L L B J *LINK warn直n? L4021 = no 3tach scfrrvGiit三、请写出此程序中的变量 ary,cou nt,sum的EA,并判断此程序的功能:四、用debug调试此程序时,第一条指令的段内EA就是多少?此程序数据段内偏移地址 为0的字单元数据为多少?其对应的机器指令就是什么?L ;加载程序文件Iab5、exeR ;查瞧IP与CS寄存器的内容D DS:0 ;查瞧当前数据段内偏移地址为0的字单元数据U;查瞧机器指令D: nasbll

5、debuU02;eBlBU02:eO291402:00001CK-015E DK=0e0O SP=O0OOSS-1412 US 1412 IP 0100BP=O0O0 SI=GM0 DI=0OOONV UP fcJ PL NZ NH PO MLCD20II9f00?n0FE IDrod69050E8A1)3肪H17orF400-01ni冊fl?FFFFFFFFFi卜卜卜卜PFHFFFFF汗FFFFnFBIS05et118000214 FFFFFFFr00刖00閃HHllfi伽finUH的pm加朋uhwnOHHR刖CD21CBeg00oe000e-ee00ee00202026刖:4I汕2076-

6、efl则2H20202020JU盹HOVAKJ1;121412:6169 U12 01O3 1412 0M15U12;01OS 1412:0m 1412:0H7 5412;eilft 1412:6110B812 毎MDVHX.14128ED8MOVDS.flHMUVWORD P1R4山刘1制070650015461MOVJORD PTH(ei5Al:0154C/06C01S&eiMOVWORD PTR015CL0156BB58A1MOVBX.eiSBE80500CRLL0122B8B0&CHOVAM,4COO1402:0050实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用

7、0结尾的字 符串源程序如下data segme ntstr db display stri ng,0 data endscode segme ntassume cs:code,ds:data sta比mov ax,datamov ds,ax mov dh,8 mov dl,21 mov cl,3mov si,offset str call show_str mov ax,4c00h int 21hshow_str proc n ear push ax push cx push dx push es push sipush dimov ax,0b800hmov es,axdec dhmov al

8、,160mul dhadd dl,dlmov dh,0 ;计算显示在屏幕位置add ax,dx mov di,ax mov ah,cl x: mov cl,ds:si mov ch,0 jcxz f mov al,cl mov es:di,ax inc si inc di inc di jmp x f: pop di pop si pop es pop dx pop cx pop ax ret show_str endp code ends end start实验三:编写一个子程序,实现将word型数据以十进制形式显示出来 源程序如下:assume cs:codedata segme ntdb

9、 10 dup(0)data endsstack segme ntdb 16 dup(0)stack endscode segme ntsta比mov ax, datamov ds, axmov ax, stackmov ss, axmov sp, 16mov dx, 0c1hmov ax, 76f3hmov si, 0call dwtocmov dh, 8mov dl, 3mov cl, 2call show_strmov ah, 01hint 21hmov ax, 4cOOhint 21h; 子程序:dwtoc;功能:将dword型数据转变成表示十进制的字符串,字符串以0结尾;参数:(ax

10、) = dword型数据的低16位;(dx) = dword型数据的高16位;ds:si指向字符串首地址;返回:无dwtoc:mov cx, 0push cxs_dwtoc:mov cx, 10;除数call divdw;余数在cx中add cx, 30hpush cx ;保存余数的ASCII形式;判断就是否商为0,如果高低16位都为0,则返回mov cx, dxjcxz ok_dxz;高位不为0,则直接跳回,继续执行运算jmp short s_dwtoc;商的高位为0ok_dxz:mov cx, axjcxz ok_axzjmp short s_dwtoc;商的低位为0ok_axz:;赋值到

11、ds:simov dx, si ;保存si,si为字符串的首地址loop_dtoc:pop cxmov ds:si, cljcxz en d_dwtoc inc sijmp short loop_dtocmov si, dxen d_dwtoc:mov si, dxretdtoc:;先把一个0放进堆栈,在后面s2从堆栈中取出的时候,可以根据cx为0跳转mov cx, 0push cxs1_dtoc:mov dx, 0mov cx, 10div cxmov cx, dx ; dx 余数add cx, 30hpush cx;保存在堆栈就可以跳出循环mov cx, ax ; ax为商,当商为0的时候

12、,各位的值就已经得到了jcxz ok1_dtocjmp short s1_dtocok1_dtoc:mov ch, 0s2_dtoc:从堆栈中取出pop cxjcxz ok2_dtoc mov ds:si, cl inc sijmp short s2_dtoc ok2_dtoc:retshow_str:push axpush bxpush cxpush dxpush espush si;计算好字串开始显示的地址Y = 160*(行数-1) + 列数*2-2, B800;循环将参数里的字串写进显卡内存,并检测到0就返回;bx = 160*(行数-1)mov bh, dhsub bh, 1mov

13、al, 160 mul bhmov si, ax ; si为根据行数算出来的偏移值;ax =列数 *2-2mov bl, dlmov al, 2mul blsub ax, 2;根据列数算出来的偏移值add si, ax ;行数与列数的与存在 SI中了 mov ax, 0b800hmov es, axmov bx, si ;将si的值保存在bx中,bx为显存显示偏移值 mov si, 0;题目要求。mov dl, cl ;保存字体颜色属性mov ch, 0s:mov cl, ds:si mov es:bx, cljcxz okmov es:bx+1, dlinc siadd bx, 2jmp s

14、hort sok:pop sipop espop dxpop cxpop bxpop axret;子程序:divdw;要求:进行不会除法溢出的除法运算,被除数为dword,除数为word,结果为dword;参数:(ax)= 被除数dword型的低16位; (dx)= 被除数dword型的高16位;(cx)=除数;返回:(dx)=结果的高16位;(ax)=结果的低16位;(cx)=余数divdw:mov bx, ax ;缓存ax被除数的低16位mov ax, dx ; ax = H,被除数的高16位mov dx, 0div cx ; ax 为商,dx 为余数 =rem(H/N) * 65536p

15、ush ax ;结果的商,也就就是最后要放在dx中的mov ax, bx ; dx为rem(H/N) * 65536, 为高16位,ax为低16位,再进行一次除法运算 div cx ; ax为商最后结果的低16位,dx为余数为最后结果,应赋给cxmov cx, dxpop dxretcode endsend start实验一:变量 ary,count,sum的 EA分别就是 00140,00154,00156此程序的功能就是数列求与丿| ttit-V-h实验MAINCODE丄 on-1P AKFRO ADDCCibE.QQ1Z2-1NEARHEX!00132-1LABEL结ARYUWE;2VAR果j COTJNTCUDE001 542VARCODESUM2VARCODETAPJ ,FCODEOOl 582VAR实验砒 errultftor screen (HOk25 cbiar;)display 审tr* 1 ng实验三:实 验 总 结这次实验,感觉难度

温馨提示

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

评论

0/150

提交评论