还剩7页未读,继续阅读
文本内容:
学院:计算机科学与技术专业:计算机科学与技术汇编语言程序设计实验报告班级:计科131姓名学号实验组实验时间指引教师肖敏成绩实验项目名称实验五:8086汇编语言子程序程序设计实验熟悉子程序的设计措施目实验对汇编源程序进行汇编、链接,在De bug环境下完毕调试和运营原理实验
1、熟悉子程序的构造及注意事项
2、掌握子程序的设计、调试措施内容实
1.硬件:微型计算机1台验
2.软件MASM软件环境实验一.使用子程序设计编程实现求数组ARY元素之和编辑下面的J源程序到义献lab
5.asm中实CODE SEGME NTORG1OOH验ASSUME CSCODE,DS:CODE,SS:CODE环.MAIN PROCFARMOV AX,CODE节MOV DS,AXMOV TABLE,OFFS ETARYMOVMOTVABTLAEB+L2,E+O4F,FSOEFFTSECTOUSNUTMMO VBX,OFFSET TABLECALLPROAD DMOV AX,4COOHIN T21HMAIN ENDPPROADDPROC NEARPUSHAXPUS HCXPUSH SIPUSHDIMOV SI,[BX]MOV DI,[B X+2]MOV CX,[DI]MOV II,[BX+4]XOR AX,AXNEXTAD DAX,[SI]ADD SI,2LOOP NEXTMOV[DI],AXPOP DIPOPSIPOP CXPOP AXRETPROADD ENDPARYDW1,2,3,4,5,6,7,8,9,10COUNT DW10SUM DWTABLE DW3DU PCODE ENDSEND MAIN使用相应的文本编辑器建立文献LAB
5.asm,内容如上所示二.生成可执行文献
1.汇编C:\ma sm masm1a b5;
2.连接C:\masm link1a b5;团B苣理员命令提示符、D\masmS0masm lab5Mici*osof tR Ma.c voAssembler*Uei*s ion
5.00Copyright;C Micr*osoF t Corp1981—1985,
1987.All i*ic htsr*esei*ued-Object Filename[labS.OBJ]Source listingf[NUL.LST]CKOSS-vef eveneeCNUL.CRF]
50348.415492Bytes symbolspace Fi*ee0Warning Eii*oi*s0Seuei*e Ei*i*oi*s D\fnasni50link labSMicrosoftR OuexlayLinke i*Uei*s ion
3.60Copyright;C MiciosoftCorp1983—
1987.A11i*ic}its reserved.Run File[LAB
5.EXE1List FileNUL.MAPILibi*a.i*±es[.LI BlLI NKnaming L4021no stacksegment三.请写出此程序中的变量ary,count,sum的EA,并判断此程序的功能四.用debug调试此程序时,第一条指令的J段内EA是多少此程序数据段内偏移地址为0的字单元数据为多少?其相应的机器指令是什么?-L;加载程序文献1ab
5.exe-R;查看IP与CS寄存器的内容-D DS:0;查看目前数据段内偏移地址为0的字单元数据-U;查看机器指令OB告理员:命令提示符-debug Iab5,exeD:\masm50debug lab
5.exe-L-RAX=0000BX=0000CX=015E DX=0000SP=0000BP=0000SI=0000DI=0000DS=1402ES=1402SS=U12CS=1412IP=0100NV UPEI PLNZ NAPO NC1412:0100B81214MOV AX,1412-D DS:01402:0000CD20FF9F009A F0FE-1D F04F03050E8A
03....
0..1402:0010050E1703050E F40D-0101010002FF FF FF1402:0020FF FF FF FF FF FF FF FF-FFFFFFFFB213EB49二1402:0030050E140018000214-FFFFFFFF000000001402:00400500000000000000-00000000000000001402:0050CD21CB0000000000-0000000000202020:匚1402:00602020202020202020-00000000002020201402:00702020202020202020-0000000000000000•-U1412:0100B81214MOVAX,14121412:01038ED8MOV DS,AX1412:0105C70658014001MOV WORDPTR[01581,01401412:010B C7065A015401MOV WORDPTR[015A1,01541412:0111C7065C015601MOV WORDPTR[015C],01561412:0117BB5801MOV BX,01581412:011A E80500CALL01221412:0110B8004c MOVRX,4C00实验二:编写一种子程序,实目前屏幕的指定位置,用指定颜色,显示一种用0结尾的J字符串源程序如下d ata segmentstr dbdi splay string7,0da t a endsc o de s egme ntas sumecs:c o de,ds:data start:mov a x,da ta mo v ds,a xmo vdh,8mov dl,21mov cl,3mov s i,o ffset str callshow_s tr mov a x,4c00h int21hsho w_s tr pr oc near pusha x push c xpu shd xpus hes pus h sipush dimo v a x,0b800h mov e s,ax dec d h mov al,160m u1dhadd dl,d1mov dh,0;计算显示在屏幕位置add a x,d x mov di,ax mov a h,c1x:mov cl,d s:[si]mov ch,0jcxz fmov al,cl move s:[d i],a xi n c siin cdi in cd ijm px f:pop dipop sip op espo pdx popc Xp op a x ret showstre n dp codee nd s end sta rt实验三:编写一种子程序,实现将word型数据以十进制形式显示出来源程序如下assume cscode datas egmentdb10du p0d atae ndss tac ks egmen tdb16dup0s tacke ndscodese gmentstart mova x,d atamov ds,a xmova x,st ac kmo v ss,axmov sp,16mo vdx,0cl hmov ax,76f3hmov si,0call dw t ocmov dh,8mo vdl,3mov c1,2c al1sho w_smov ah,01hin t21hmovax,4cOOhint2Ih;子程序:dw toe;功能:将d wo rd型数据转变成表达十进制的字符串,字符串以0结尾;参数ax二dword型数据日勺低16位;d x=dword型数据日勺高16位;ds:s i指向字符串首地址;返回无d wto cmov c x,0push c xs_d wtoc:mov cx,10;除数call div dw;余数在cx中add ex,3Ohpush ex;保存余数区IA SC II形式;判断与否商为0,如果高下16位都为0,则返回mov cx,dxjexz o k_d xz;;高位Mo,则直接跳回,继续执行运算jmp short s_dwto c;商的高位为0ok dx zmov cx,axa jexz ok_a xz jmp short s dwt o cAA;商H勺低位为0ok_a x;赋值到ds:[si]c mov d x,si;保存si,s i为字符串口勺首地址a loop_dt oc ZApop cxmov ds:[s i],cla jcxz enddw tin cs iAA OCAjmp shortloop_dtocmo vsi,dxend_dwt oca m ovsi,dxa r etdtoc a;先把一种0放进堆栈,在背面s2从堆栈中取出日勺时候,可以根据ex为0跳转a mov ex,0pu sh c-sl_dt oca movdiv cxX Adx,O mo vex,10mo vex,d x;d x余数add cx,30hpush ex;保存在堆栈movex,a x;a x为商,跳出循环jexz o kl_dto c当商为0欧I时候,各位口勺值就已经得到了,就可以jmp_dt och,0sho rts1_d cokld toc从mo vAAs2_toc:n*堆栈中取出a popc XA jcxzok2_dt OCA movds[si],I incs iCAjmp shorts2_dtocok2__d toc:r etA sho w__strpush axA push bxAp ushc pushA XAdx-Apu sh espushsi;计算好字串开始显示的地址Y=160*行数-1+列数*2-2,B800:*(行数-1mov bh,dha subbh,1丫
④;循环将参数里的字串写进显卡内存,并检测到0就返回a;bx=160moval,160mul bha值movsi,ax;si为根据行数算出来日勺偏移A;a x=列数*2-2A mov bl,2;根据列数算出来的偏移值a d1A moval,24mul b1A sub ax,;行数和a dd si,ax列数的和存在SI中了movax,0b800he moves,axmov bx,si;将si时值保存在bx中,bx为显存显示偏移值movsi,0;题目规定movd1,cl;保存字体颜色属性a mov ch,O sa movcl,ds[si mov es:[bx],c1jexzokmo ves:[bx+1],d1inc sicadd bx,2a jmp shortok:SApop sipopespop dxApopp opbxCXApop axre t;子程序:divdwa;规定:进行不会除法溢出的除法运算,被除数为dword,除数为word,成果为dworda;参数ax二被除数d wrd型的J低16位;dx=被除数dword型的高16位a;ex=除数;返回dx=成果日勺高16位ax=成果的H氐16位a;ex=余数■Mi vdw:movb x,ax;缓存ax-----------------被除数的低16位a movax,dx;ax=H,被除数的高16位movd x,0div cx;ax为商,d x为余数=remH/N*65536a pushax;成果的商,也就是最后要放在dx中H勺movax,bx;dx为remH/N*65536,为高16位,ax为低16位,再进行一次除法运算a divcx;ax为商最后成果的低16位,dx为余数为最后成果,应赋给exm ovcx,d popdx retXAcodeend send start实验一:变量ar y,c ount,s um日勺E A分别是00140,00154,00156此程序的功能是数列求和|mycode.com.symbol-ic!■事本1「1回文件F漏辐E格式查看V都助HMAIN00100-1FARCODEPROADD00122-1NEARCODENEXT00132-1LABELCODEARY001402VARCODECOUNT001542VARCODESUM2VARCODETABLE001582VARCODE实验二:实验成果display stringemulatorscreen80x25chars实验三:6€ft emulatorscreen80x25chars12678899实这次实验,感觉难度最大的就是做2个子程序的设计,在网上向好友请教了N回!验还犯了某些低档日勺错误,如将16位的寄存器的J内容传送到字符型数字串里去,这很明总显是不对欧J,在逆序时寄存器的高16位会直接把正常的数字字符冲掉,尚有就是将当我直接将字型单元的内容传送字型单元时,编译器会报错,但是提示是它背面的指令错误转换后的数字串日勺末尾如果不是0日勺话,在调用输出子程序时会浮现BUG,于是又在转换子程序里加了条指令,在第一次转换出来后,在数字串H勺末尾添加一种终结标志0指引教师忌签名年月见日。
个人认证
优秀文档
获得点赞 0