合工大语言程序设计试验报告_第1页
合工大语言程序设计试验报告_第2页
合工大语言程序设计试验报告_第3页
合工大语言程序设计试验报告_第4页
合工大语言程序设计试验报告_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

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

文档简介

1、合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:*号:*姓名:*目录实验一3实验二7实验三12实验四22实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。2、掌握8086/8088的寻址方式及多字节数据的处理方法。二.实验内容1、利用DEBUG程序中的“E命令,将两个多字节数“003F1AE7H和“006BE5c4H分别送入起始地址为DS:0200H和DS:0204H两个单元中。2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在D

2、S:0208H单元中。要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。三.实验过程和程序实验内容一:eds:0200E71A3F00eds:0204C4E56B00实验内容二:(1)直接寻址方式MOVAX,0200MOVBX,0202ADDAX,0204ADCBX,0206MOV0208,AXMOV020A,BX(2)寄存器间接寻址方式MOVSI,0200HMOVDI,0204HMOVBX,0208HMOVAX,SIMOVDX,SI+2ADDAX,DIADCDX,DI+2MOVBX,AXMOVBX+2,DX四.实验

3、结果(包括必要的截图)实验内容一:输入数据:t:XMASMDEBUG32-Urrsinn1.0-Copyright.(ClLflrrtnnCnmputinj1啊4CPU=4M,RealMode,Id/Step=AZOdisabled-ES:6E00E73Y00-ES:0EGKC4E56E00显示数据:C:SMASMDEBU632Debug3Z-Itersion1.6-Copyright(C)LarsonComputing1羽4CPU=486,RealMode,Id/Step=GH0E,AZOdisabledEDS:0Z0OE71A3F3ED3;配04C4E56B的-DES:Q2001C8B:位

4、tX)E71A3F06C4Eb6HOtHABRBt0(J00GOg.7.l)ek.*.+1C0B:GE1O960000OGGO00090-008电0900000000*DuplirateLine*)*1CBB:GE700000000GGOQ0900-00G0000000Q00000实验内容二:(1)直接寻址方式程序段编辑:0?3F:0100movaxj1020G1073F:01O3moubx.猊猊073F:010?addm随明0I73F:01BadcM.IGEQfe073F:Q10FMOVQ2G81,ax0?3F:0112a0EGa(bx073F;O116反汇编:FJ?3F:O10OA1090

5、EHOUAxaezoei0?3F:01038B1EGEQZMOUBX-6E呢0?3F:010?G3Q&04Q2ADDAX,0204JW3F:O10B131EQ6GGADCRX/QZGE973F:01GFA3G882MOU0208,A*0?3F:0112891E0A02HDUtQEQAJ.BX073F:G11600G0ADDrBX*SIl,ALn?3F:0UHADDIBXtSIliALn?3F:011A6000ADDIBXtSIJfAL073F:611C3400XDRAL,000?3F:611EZEcs:073F:Q11FG7POPES运行:结果在DS:0208单元中为00AB00ABH卜g=1

6、600116PiX-OOADBX-OOADpS=0f?3FES=073F073F:91160000CX-0000DX-00003r-O0FDDP-000031-0000DI-OOGGSS=G)73FCSM973FIF=116ADDBXtSH.ALNUUPEIPLMZACPOMCDS:OQAB=00-d0208Q?3F:0E0O073F:0E1000073F:GEZD00073F:GZ30000?3F:GE4000073F:O250000?3F8673F:ee?000073F;00000GO000GOO00G00006606006GO0000GO弧00oeee00eeoeeOI0IOI0I0I0

7、IGM0I-s*ru-wA一ooao&oi。e010010101。eleloe(0clclCMNCMBS*oee6旧66Gel3561GIGIeGI5-BM9N3loo0IGioflo0_o0G01010101010101QBeoeeeeeA00000O-0-。ae-QG-oGolB0l0lGN0lf)lGGeGeGoo-646IB6IGIGI0161-0-*0-e_IJ。G-o80IOI0I00IeGGe10eeGMGN。GN3。GNGl(2)寄存器间接寻址方式程序段编辑:O*?3F:01tl0novsi?3F:01fnwivdi.004EV73F;01G6nnvbx.GSeefr73F:O

8、1tyinnvax.tsi1A(73F:G10Bmiudx,Tki-r-23FT73P:Q10ErL1B73F;011OdrtcdK/df+ZJO73r;0113rovFbxlxEM73F:0115“JU:bx+ZJ,lx反汇编:-u073F:0106EE的呢MUUSI,0206973F:0103BF04猊MOUDI,呢04073F:OIO6EBGQQZmu3X0ZfiflO73F:01098BGKMOUAXJSUD73F:010B8B54Q2nouDXjtsi+eeiO?3F:O10E03G5ADDAX,EDI073F:Q11G1355Q2ADC叽DI+MEJ?3F:01138367ruum

9、a附07亚:0115B95702MOUBX+呢LDX073F:O118G0GOADDBX*SIfAL0f?3F:Ollfi0O6GADDIBXtSUALa73F:011C34GoXURAL,00973r:011EEC3:O73F:011F07PDFES运行:结果高字存放在dx中,低字存放在ax中(结果为00AB00ABh)-g=01G001LBftX=0GnDDX-02Q0CX=000DX=OOM3r-0OFDBP=OGOGSI=0200DI=0201DS=6?3FES=073FSS=OT3FCS=er?3FIP=0118MUUFEIPLMZACPOHC073F:G118GOGADDBX+SI

10、LALS:0400=00五.实验体会通过本实验,实践debug程序中的命令,并在debug下调试运行汇编语言源程序。在实践过程中,解决如何把数据录入存储单元、debug命令如何使用等问题后,知道存数据例如1234进存储单元时要3412存,还有掌握了寄存器的寻址方式。实验二汇编语言程序设计(顺序、循环)1 .实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。2 .实验内容1、X、Y、Z、V均为字变量,在X、YZ、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:计算表达式值(V-(X*Y+Z-720)/

11、X;将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有asm子用。如果有,输出Yes;否则,输出No)。3 .实验过程和程序(注:附加题没有做)实验内容一:X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:计算表达式值(V-(X*Y+Z-720)/X;将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。Datasegmentxdwyd

12、wzdwvdwsum1dwsum2dwDataendsCodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovax,ximulymovcx,axmovbx,dxmovax,zcwdaddcx,axadcbx,dxsubcx,720sbbbx,0movax,vcwdsubax,cxsbbdx,bxidivxmovsum1,axmovsum2,dxmovah,4chint21hCodeendsendstart实验内容二:求一个班50名学生成绩的平均值(为了方便,只设置了5个学生数据)datasegmentgradedw90,80,80,

13、70,60斗土匀数76dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axxorax,axmovcx,5movbx,offsetgradeagain:addax,bxaddbx,2loopagainmovcx,5cwdidivcxmovah,4chint21hcodeendsendstart实验内容三:从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串datasegmentbufferdb50dbdb50dup邰)crdb0ah,0dh,$dataendscodessegmentassume

14、cs:codes,ds:datastart:movax,datamovds,axinput:movah,10leadx,bufferint21hleadx,crmovah,9int21houtput:leadx,buffer+2movah,9int21hmovah,4chint21hcodesendsendstart四.实验结果(包括必要的截图)实验内容一:设x=156,y=10,z=220,v=2000,则sum1=0006h,sum2=0004h在ax中看sum1,在dx中看sum2解COSBoxO.74,Cpuspeed3000cyclesFrameskip0,ProqraTi:DEBU

15、G尸1fT71:AA1C13nH而CPX,DX中71:O01EaiE9eoeSUBCX.9ED0G?71:001C83DB06SBBBXOGUJ71:UiJllAlObWHUU-ItG71:GQ2299CUDZBCiSUBnxxx仔打:魄b1BD3SBBex.bx1:的上7世Utt兜1B1UMJHDFTKL阳阳夕/I.瓯liA30eGMOU10GO6L的:O771:G0ZE8916000MOUlOQMLDX0771:CWiiB44CMOU0771:0t134CD21IHT210771:0)36000ADDRXS11,AL6771:0036G0OOADDIKX+SlJ,HLG771:00(3AG

16、OQOADDBXIJ,AL前71:阿40000APF)RX+STKAL(T71:03EG0OOADD0X加1L071:040oooeADDBX)3ILRLoeazIaX=A0A6BX=Q0OfiDX=flWISP=fif)AABP=AfiQOST=eflfiRIH=fiQfiOIPS=0779ES=M60SS-e76FCS=C771IP=603ZMUUPEIPLZRnAPE11C|0?71:0037B44CMOUAH,4C实验内谷二:预先设置的数据求得平均数为76,在ax中查看,即ax=004Ch阕DOSBoxO,74,Cpuspeed3000cyclesFrameskip0,Program:

17、DEBUGhll0771:000B870G?MOUftXi0f?O0771:GOGG8EDBMOUDSiAX0771:OW633C0刈RAX.ftXp771:G9G?附站GHOUCX,00650771:60GfiBBOOOGMOUBX.OOOO0771:GOOD0307ADDAXJBX0771:GOOF83C3GIZADDBXftGE0771:WIEE2F9LOOPeeeo0771:OOHB305OeMOUCX,00650771:001793CUD0771;6HGF?F5IDIUex0771:GO1AB44cMOURH,4c771:始ICCDZ1IHT21Q?1:W1E0000ADDBX*3I

18、LAL-g=GO0OGGleiAX=GMCBX=009ADS=077OES=076G0771:GO1AB44cCX=0G06UX=00O0SP=0O00BF=0G0GSI-0GO0BI-0000SS=G7BFCS=9771IP=GQlftNUUPEIFLtCNAPENCHQUMM实验内容三:HDOSBox074,Cpuspeec:JOCOcyclesFrameskid0Program:DOSBOXaflirhscnzxaqgjdfasathrhscnzxaqgjdf己PressanyKeytocnnt五.实验体会通过本实验,将课本上学到的算术运算类指令、变量定义伪指令、存储单元、DOS0AH号

19、功能(字符串输入)和DOS09H功能(字符串输出)等在实验中实现。在实现过程中,解决遇到的问题(符号扩展、定义的数组存储空间地址、字符串如何输入输出等)后,对上述知识有了更深的了解,并掌握实现它。实验三汇编语言子程序设计(分支、子程序)一.实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。3、通过汇编语言了解高级语言的参数传递等知识。二.实验内容1、BL中的只有一位为1。编写程序测试,并输出提示信息“TheXBitis要求:地址表和转移表。2 .编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内

20、存数)。要求通过堆栈(寄存器、内存)传送所有参数。3 .实践CAsm的转换过程。三.实验过程和程序实验内容一:BL中的只有一位为1。编写程序测试,并输出提示信息“TheXBitis1”(1)转移表;转移表,bl左到右1-8位DATASSEGMENTstr1dbthe1bitis1,0dh,0ah,$str2dbthe2bitis1,0dh,0ah,$str3dbthe3bitis1,0dh,0ah,$str4dbthe4bitis1,0dh,0ah,$str5dbthe5bitis1,0dh,0ah,$str6dbthe6bitis1,0dh,0ah,$str7dbthe7bitis1,0dh

21、,0ah,$str8dbthe8bitis1,0dh,0ah,$DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXmovbl,00010000bmovcx,8movsi,0again:shlbl,1jcnextaddsi,3loopagainnext:addsi,offsetjmptablejmpsijmptable:jmpnearptrl1jmpnearptrl2jmpnearptrl3jmpnearptrl4jmpnearptrl5jmpnearptrl6jmpnearptrl7jmpnearptrl8

22、11:leadx,str1jmpoutput12:leadx,str2jmpoutput13:leadx,str3jmpoutput14:leadx,str4jmpoutput15:leadx,str5jmpoutputl6:leadx,str6jmpoutput17:leadx,str7jmpoutput18:leadx,str8output:movah,9int21hMOVAH,4CHINT21HCODESENDSENDSTART(2)地址表;地址表,bl左到右依次是第1-8位DATASSEGMENTstr1dbthe1bitis1,0dh,0ah,$str2dbthe2bitis1,0d

23、h,0ah,$str3dbthe3bitis1,0dh,0ah,$str4dbthe4bitis1,0dh,0ah,$str5dbthe5bitis1,0dh,0ah,$str6dbthe6bitis1,0dh,0ah,$str7dbthe7bitis1,0dh,0ah,$str8dbthe8bitis1,0dh,0ah,$addrtabledwshow1,show2,show3,show4,show5,show6,show7,show8DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXmovbl,0000

24、1000bmovcx,8movsi,0again:shlbl,1jcnextaddsi,2loopagainnext:jmpaddrtablesishow1:leadx,str1jmpoutputshow2:leadx,str2jmpoutputshow3:leadx,str3jmpoutputshow4:leadx,str4jmpoutputshow5:leadx,str5jmpoutputshow6:leadx,str6jmpoutputshow7:leadx,str7jmpoutputshow8:leadx,str8jmpoutputoutput:movah,9int21hMOVAH,4

25、CHINT21HCODESENDSENDSTART实验内容二:编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)(1)堆栈传递参数;z=x*y+x-y,xy、z为有符号数,堆栈传递DATASSEGMENTxdw5ydw2zdwDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXsubsp,2pushypushxcallcalpopzmovbx,zMOVAH,4CHINT21Hcalprocpushbpmovbp,sppushaxpushbxmovax,bp+4movbx,bp+6i

26、mulbxaddax,bp+4adcdx,0subax,bp+6sbbdx,0movbp+8,axpopbxpopaxpopbpret4calendpCODESENDSENDSTART(2)寄存器传递参数;z=x*y+x-y,xy、z为有符号数,寄存器传递DATASSEGMENTxdw5ydw2zdwDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXmovax,xmovbx,ycallcalmovz,axMOVAH,4CHINT21Hcalprocmovcx,aximulbxaddax,cxadcdx,0s

27、ubax,bxsbbdx,0retcalendpCODESENDSENDSTART(3)内存传递参数;z=x*y+x-y,xy、z为有符号数,内存传递DATASSEGMENTxdw5ydw2zdwDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXcallcalMOVAH,4CHINT21Hcalprocmovax,ximulyaddax,xadcdx,0subax,ysbbdx,0movz,axretcalendpCODESENDSENDSTART实验内容三:实践C-ASM的转换过程_TEXTSEGMENT

28、_c$=-32;size=2_b$=-20;size=2_a$=-8;size=2_mainPROC;COMDAT;4:voidmain()pushebpmovebp,espsubesp,228;000000e4Hpushebxpushesipushedileaedi,DWORDPTRebp-228movecx,57;00000039Hmoveax,-0;ccccccccHrepstosd;5:;6:shorta,b,c;7:a=1;moveax,1movWORDPTR_a$ebp,ax;8:b=a+1;movsxeax,WORDPTR_a$ebpaddeax,1movWORDPTR_b$eb

29、p,ax;9:c=a+b;movsxeax,WORDPTR_a$ebpmovsxecx,WORDPTR_b$ebpaddeax,ecxmovWORDPTR_c$ebp,ax10:11:12:xoreax,eaxpopedipopesipopebxmovesp,ebppopebpret0mainENDP_TEXTENDS四.实验结果(包括必要的截图)实验内容一:(1)转移表:设bl=00010000b(2)地址表:设bl=00001000b实验内容二:设x=5,y=2,则z=13(000D),结果在ax(1)堆栈传递参数(结果在bx中查看)(2)寄存器传递参数(结果在ax中查看)(3)内存传递参

30、数(结果在ax中查看)五、实验体会通过本实验,让我更加深入了解地址表和转移表、子程序和从C输出汇编文件等知识,通过实现地址表与转移表加深了对汇编寻址方式的了解;实现子程序,掌握主程序如何调用子程序,及子程序与主程序之间的参数传递方式;用VS实现C-ASM后,对C或C+昭了新的认识。实验四汇编语言高级编程专题1 .实验目的1、汇编语言宏程序设计;2、掌握中断服务子程序的编写。3、汇编语言与高级语言的混编。2 .实验内容1、编写一个宏,求三个数的最小数,原型为:MIN3x,y,z,min2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数3、VC+”编写内联汇编,将字节数组的每个元素

31、高低四位互换。chardbyte口=0x34,0x45,0x56,0x67,0xaf;3 .实验过程和程序1 .编写一个宏,求三个数的最小数,原型为:MIN3x,y,z,minmin3macrox,y,z,minmovax,xcmpax,yjbenextmovax,ycmpax,zjbedonenext:cmpax,zjbedonedone:movmin,axendmDATASSEGMENTxdw2ydw4zdw3mindwDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXmin3x,y,z,minMOVA

32、H,4CHINT21HCODESENDS0-59的秒数。ENDSTART2、挂接1CH中断,正计时60秒后退出。要求屏幕显示INTNOEQU1CHDATASEGMENTOLDISRDW,TIMERDB100COUNTERDW0ISDONEDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,0MOVES,AXxorcx,cx;PROTECTMOVAX,ES:INTNO*4MOVOLDISR0,AXMOVAX,ES:INTNO*4+2MOVOLDISR2,AX;SETNEWISRMOVWORDPTRES:

33、INTNO*4,OFFSETISRMOVWORDPTRES:INTNO*4+2,SEGISR;WAITHEREWAITHERE:CMPISDONE,1JNZWAITHEREEXIT:;RESTOREMOVAX,OLDISR0MOVES:INTNO*4,AXMOVAX,OLDISR2MOVES:INTNO*4+2,AXMOVAX,4C00HINT21HISRPROCFARPUSHDXPUSHAXMOVAX,DATAMOVDS,AXSTI;便于中断嵌套INCTIMER;判断是否输入amovah,0bhint21horal,aljznextMOVAH,8不显示输入的字符INT21HCMPAL,aJN

34、EnextMOVAH,2换行MOVDL,10INT21H;MOVCOUNTER,。;从起一行计时时从0开始计时,注释掉则从起一行继续旧时间计时next:CMPTIMER,10005JBDONEMOVTIMER,0MOVAH,2MOVDL,13INT21H;printtimeMOVAX,COUNTERMOVDL,10DIVDLMOVDH,AHMOVDL,ALMOVAH,2ADDDL,30HINT21Hmovah,2movdl,dhADDDL,30HINT21HincCOUNTERcmpCOUNTER,60JNEDONEMOVISDONE,1DONE:PUSHFCALLDWORDPTROLDISRCLIPOPAXPOPDXIRET;中断返回ISRENDPCODE

温馨提示

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

评论

0/150

提交评论