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

下载本文档

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

文档简介

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

2、NTORG 100HASSUME CS:CODE,DS:CODE,SS:CODEMAIN PROC FARMOV AX,CODEMOV 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 A

3、X,SIADD SI,2LOOP NEXTMOV DI,AXPOP DIPOP SIPOP CXPOP AXRETPROADD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW ?TABLE DW 3 DUPCODE ENDSEND MAIN使用相应的文本编辑器建立文件LAB5.asm内容如上所示。二.生成可执行文件:1. 汇编:C:masm masm Iab5;2. 连接:C:masm link lab5;p : 711档齐叭cth5PMliM|osof t CR Mkaupo Assrenililei* Uefm 覺口rm 5 - RfiCo

4、pyi*lsflit CO Mllei*osof tr Corp A9 8XX98S19 8 7 dPl 11j*esei*ve dObject F lleritiHie F 1i1j5 - OBJ 1 s11 $17 i ny I NHTd. TaST 1 #s*o 百石-*ioF 静 yonusi tNUL VCRF1 s* 41b-492 Uftcs s yntbo 1 s pac c frets UaLi*ri in g Eiio jlcU& fepoi-sA 1黑忍石利,T irilk 1 a1i5rllcroeof CR Oveplav/ ILlnkex* U ei*s ion 3

5、 _ 60 Gom/rrlit: MlicrosoF 1; C!orp 19831987- All r.grht;3 rcacrwcdL.Run FllLlet Filo NUL.MAPioo L L B J *LilHK s wairnindebuq JaLS.ewePlftX=O0OBK-0000CH=015EDK=0006SP=060eBP=O0O9 51=6000 DI=0OOObs-uyts UH2SS-U12CS-1412IP-D1O0NV UP fcJ PL MZ HH PO ML1412:6169B812UMOVAHs1412-n ds:o14O2:0dOCD 20ri91ao

6、 9H0e io ro4163050E8At)3i:i- !:os or17fljas orF400-01 81ni沏02FFFFFFFF FI-卜卜卜卜FF Fl-FFF卜十卜汗FFFF嘗nFRIS1402:6000OS er打18 000214 FF FFFFFr00断盹0014O?:H04Bns HiiIfiflO OH册oe-fle 00丽UMHOOfrifrltion vn ta :H02:e050CD 21CBeg00 060000 -00 牝oeeo0020201IWI-l-4B9a!ll9!F1402;BEJ6t)刖:4I?0?6-0H RD?H1402:(30 曲20 202

7、6202H224-00 00的OUUUeb a i * i_ll 1H81214MUVHX.14121412:0163BED8MOVDS,fiH1412:H1CC/W6b8HUUlMUVWORD PTRlKLb81n0UHL412:0WftC7065fi0154OlMOVJORD PTR(015A1O1541412:(3111MOVWORD PFRI0L5C1,0161612:0117BB58H1MOVBX 血 581412:fill ftE805S0CALI01221412:011)B8H0&CMOVnxcoe实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串

8、源程序如下data segme ntstr db display stri ng,0 data endscode segme ntassume cs:code,ds:data start: mov ax,data mov ds,ax mov dh,8 mov dl,21 mov cl,3 mov si,offset str call show_str mov ax,4c00h int 21hJshow_str proc n ear push ax push cx push dx push es push si push di mov ax,0b800h mov es,ax dec dh mov

9、 al,160 mul dh add dl,dl mov dh,0 ;计算显示在屏幕位置 add ax,dx mov di,ax mov ah,clx: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 dxpop ex pop ax ret show_str endpcode endsend start实验三:编写一个子程序,实现将 word型数据以十进制形式显示出来 源程序如下:assume cs:codedata segme n

10、tdb 10 dup(O)data endsstack segme ntdb 16 dup(0)stack endscode segme ntstart: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, 4c00hint 21h; 子程序:dwtoc;功能:将dword型数据转变成表示十进制的字符串,字符串以0结尾;参

11、数:(ax) = dword型数据的低16位;(dx) = dword 型数据的高16位;ds:si指向字符串首地址;返回:无dwtoc:mov cx, 0push cxs dwtoc:mov cx, 10;除数call divdw;余数在ex中add ex, 30hpush ex;保存余数的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:

12、;赋值到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的时候,各位的值

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

14、b bh, 1mov al, 160mul 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:simov es:bx, cljcxz okmov es:bx+1, dlinc siadd bx,

15、2jmp short 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) *

16、 65536 push 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此程序的功能是数列求和F|iC-ori .sym bo 11 1 ImwMAIMCODEloo-1FARFRO ADDCubEQQ1Z2-1NEARNEXTU皿E;00132-丄LABELARYCUDE001402VARCOUNTC:门口咆;001E42VARSUM2VARCODETABLECODEOO l 5SsVAR1实验二:価 errulartor screen (30x25 chars)实 验 结 果display 亏七rinm实验三:Sffr emulator screen (80x25 charsj126788

温馨提示

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

最新文档

评论

0/150

提交评论