南昌大学2014级-汇编语言设计实验.doc_第1页
南昌大学2014级-汇编语言设计实验.doc_第2页
南昌大学2014级-汇编语言设计实验.doc_第3页
南昌大学2014级-汇编语言设计实验.doc_第4页
南昌大学2014级-汇编语言设计实验.doc_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

实 验 报 告实验课程: 汇编语言程序设计实验 学生姓名: 学 号: 专业班级: 计科 2016年1月15日 目 录(二号宋体)一、 实验一 初级程序的编程与调试二、 实验二 汇编语言程序上机过程3、 试验三 分支程序试验4、 试验四 循环程序设计实验5、 试验五 子程序试验 南昌大学实验报告学生姓名: 学 号: 专业班级: 计科 实验类型: 验证 综合 设计 创新 实验日期: 11.13 实验成绩: 实验1 初级程序的编写与调试实验(一)一实验目的1熟悉DEBUG命令;学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应该试用一下;2掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算; 3熟悉数据传送指令、算术运算指令、逻辑指令、循环指令的使用。4掌握简单的汇编语言程序编写与调试。二实验内容1 内存操作数及各种寻址方式使用;2 求累加和程序;3 多字节加法程序;4 数据串搬家程序;5 段寄存器概念及字符串传送指令练习。三实验要求1仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;2阅读数据传送指令、算术运算指令、逻辑指令、循环指令的使用方法3用DEBUG的有关命令调试本实验中的求累加和程序、多字节加法程序、程序段四实验环境PC微机;DOS操作系统或 Windows 操作系统;MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境。五实验步骤1内存操作数及各种寻址方式使用MOVAX,1234 (立即寻址方式)MOV1000,AX (寄存器寻址方式) MOVBX,1002(立即寻址方式)MOVBYTE PTR BX,20MOVDL,39(立即寻址方式)INCBXMOVBX,DL(寄存器寻址方式)DECDLMOVSI,3(寄存器寻址方式)MOVBX+SI,DL(基址变址寻址方式)MOVBX+SI+1,DL(基址变址寻址方式)MOVWORD PTRBX+SI+2,2846(基址变址寻址方式)步骤: (1) 用A命令键入上述程序,并用T命令逐条运行。(2) 每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。注意D命令显示结果中右边的ASCII字符及双字节数存放法。第一条第二条第三条第四条第五条第六条第七条第八条第九条第十条第十一条第十二条2求累加和程序:程序:MOVBX,1000MOVCX,10SUBAX,AXLOP: ADDAL,BXADC AH,0INCBXJ:LOOPLOPINT 3步骤:(1) 用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替; (2) 用命令N AA 将此程序命名为文件AA(文件名可任取); (3) 用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址; (4) 用命令W 100将此程序存到AA命名的磁盘文件中; (5)用命令Q退出DEBUG; (6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序;若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入; (7) 用E命令在内存地址1000H处键入16个数字;(8) 用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值;(9) 用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错;(10) 重复G、J与T,再检查AX是否正确;(11) 用G命令使程序运行到结束,检查AX值是否正确。3多字节加法程序程序:MOVDI,1000MOVCX,8MOVSI,2000CLCLOP: MOVAL,SIADCDI,ALINCSIINCDILOOPLOPINT20步骤:(1) 用命令键入此程序(2) 用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。4数据串搬家程序(1)用A命令键入下列程序:MOVSI,1000MOVDI,1500MOVCX,0FHLOP:MOVAL,SIMOVDI,ALINCSIINCDIDECCXJNZ LOPINT 20(2) 用A命令DB伪指令在1000H键入下列字符串:IBM_PC COMPUTER(3)用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。5自编程序用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同多字节加法程序,调试并做记录。六实验报告要求1各项实验记录,可以用截图或文字进行说明。2要求你修改的程序的清单(修改后)和调试记录,源程序请添加适当的注释。3自编程序原稿及调试后修正稿,写出原稿错在那里。七简答题1MOVBYTE PTRBX,20 MOVWORD PTRBX+SI+2,2846上述指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。2用G命令运行多字节加法程序,并用D命令检查其结果(存放在哪里?),是否正确?3将多字节加法程序中的INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试一试。4数据串搬家程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。答:1.不行,2.对,G命令将程序执行完后,D后面加上所要查的地址即可;存放到【1000】3.行,改int3后则停留在dos界面,没有区别;若不加指令,则可行4.不能,改为1015H8、 实验总结 熟悉各个命令,了解并熟练掌握使用方法。南昌大学汇编语言程序设计实验报告学生姓名: 学 号: 专业班级: 计科 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 实验2 汇编语言程序上机过程一实验目的熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。了解汇编语言程序的汇编、运行环境。 二实验内容1掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;2伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;3利用的INT 21H的1号功能实现键盘输入的方法;三实验要求1仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;2了解利用的INT 21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法;3阅读下面程序段。四实验环境PC微机DOS操作系统或 Windows 操作系统MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境五实验步骤1、按步骤完成下列程序的编译、连接、运行及调试等过程:datasegmentmessagedbThis is a sample program of keyboard and displaydb0dh,0ah,Please strike the key!,0dh,0ah,$dataendsstacksegmentpara stack stackdb50 dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovdx,offset messagemovah,9int21hagain:movah,1int21hcmpal,1bhjeexitcmpal,61hjcdisplaycmpal,7ahjadisplayandal,11011111bdisplay:movdl,almovah,2int21hjmpagainexit:movah,4chint21hcodeendsendstart实验步骤:1用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为ASM。2用MASM对源文件进行汇编,产生OBJ文件和LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3用TYPE命令显示1产生的LST文件。4用LINK将OBJ文件连接成可执行的EXE文件。5在DOS状态下运行LINK产生的EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。6.将程序修改,使得用户键入除小写字母以外的其他字符(除ESC键),输出提示信息“Illegal character is striked,Please input again!” ,并要求重新输入。.5.6.2.下面程序任务是完成查表求一个十以内整数的平方,程序有错误,请进行纠正并调试运行。DATA SEGMENT TABLE DB 0,1,4,9,16,25,36,49,64,81 HEX DW 5 ;待查的整数 RESULT DW ?DATA ENDSCD SEGMENT ASSUME CS:CODE, DS:DATSTART: MOV AX, DATA MOV DS, AX MOV BX, TABLE MOV AX, HEX ADD BX, AX MOV AX, BX MOV RESULT, AX MOV AH, 4CH INT 21HCD ENDS END START实验步骤1、 将该文件存成.asm文件,将其生成可执行文件。2、 编译该程序,找出错误。并纠正。3、 连接、运行看程序是否能得到正确结果。若不行,用Debug加载该可执行文件,单步调试,观察各寄存器变化及RESULT单元的值。找出问题。4、 重复汇编语言程序的上机过程,使程序能正确得到结果。5、 修改源程序,选用换码指令XLAT完成本程序相同的功能。6、 补充此程序的输入和输出功能。使得程序能任意输入数据,平方值也能以十进制显示在屏幕上。1. 2. 第七行:ASSUME CS:CD CODE, DS:DATA 第十行:lea bx.table3.4.5.Lea bx,table Mov ax,hex Xlat Mov result,ax Mov ah,4ch Int 21h6. data segment table db 0,1,4,9,16,25,36,49,64,81 hex dw ? result dw ? message db 0dh,0ah,Error! db 0dh,0ah,$ data ends cd segment assume cs:cd,ds:data start: mov ax,data mov ds,ax mov ah,01 int 21h push ax mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h pop ax cmp al,39h ja down cmp al,30h jb down sub ah,01 sub al,30h lea bx,table xlat mov bx,sp step1: mov dx,0 mov cx,10 div cx push dx cmp ax,0 ja step1 step2: pop ax add ax,30h mov dl,al mov ah,02h int 21h cmp sp,bx ja step2 jmp exit down: lea dx,message mov ah,09 int 21h exit: mov ah,4ch int 21h cd ends end start六实验报告要求汇编,连接及调试时产生的错误,其原因及解决办法,要求你修改的程序的清单(修改后)和调试记录;各实验中的关键数据截图。七简答题1若在源程序中把INT 21H的H省去,会产生什么现象?2把 INT 21H中4CH号功能改为 INT 20H,行不行? 答:1.提示错误 2.行,八实验小结 南昌大学实验报告学生姓名: 学 号: 专业班级: 计科 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 实验3 分支程序实验一实验目的1 掌握单分支、双分支、多分支程序的设计方法;2 掌握利用DEBUG或CODEVIEW修改参数、检查结果的方法;1 熟悉汇编语言源程序的编辑、汇编、连接及调试过程。二实验内容1猜数程序,预设一数字字符M,从键盘输入一个数字字符N,判断:若N M 则显示“TOO SMALL”;否则显示“YOUR ARE RIGHT” datasegmentmessage db 0dh,0ah,please intput a number from 0 to9:$str1 db 0dh,0ah,TOO BIG$str2 db 0dh,0ah,TOO SMALL$str3 db 0dh,0ah,YOU ARE RIGHT$M db 33hN db ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hmov ah,1int 21hmov N,alcmp al,20hje exitcmp al,Mja s1jb s2mov dx,offset str3mov ah,9int 21hjmp starts1:mov dx,offset str1mov ah,9int 21hjmp starts2:mov dx,offset str2mov ah,9int 21hjmp startexit:mov ah,4chint 21hcode endsend start 给M赋值3,若N M 则显示“TOO SMALL”;否则显示“YOUR ARE RIGHT”2 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示“IT IS A DIGITAL”;若为A-Z或a-z字符,均显示“IT IS A LOWCASE LETTER”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。datasegmentmessage db 0dh,0ah,please intput:$str1 db 0dh,0ah,IT IS A DIGITAL$str2 db 0dh,0ah,IT IS A LOWCASE LETTER$str3 db 0dh,0ah,please intput$data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axbegin:lea dx,str3mov ah,9int 21hmov ah,1int 21hcmp al,0dhje exitcmp al,1jb begincmp al,9jb s1cmp al,Ajb begincmp al,Zjb s2cmp al,ajb begincmp al,zjb s2jmp begins1:lea dx,str1mov ah,9int 21hjmp begins2:lea dx,str2mov ah,9int 21hjmp beginexit:mov ah,4chint 21hcode endsend start3 预留字符串口令,输入口令串与预留密码串比较。若匹配则显示“MATCH”,否则显示“NOMATCH!,PROGRAM TERMINATED!”data segmentpassword db kiddingstr1 db 0dh,0ah,match$str2 db 0dh,0ah,nomatch!program terminated!$str3 db 0dh,0ah,please input:$data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov bx,offset passwordmov bx,0hlea dx,str3mov ah,9hint 21hmov cl,0hmov ch,0hinput:mov ah,1hint 21hinc clcmp al,0dhje judgecmp cl,1hje compareinc bxcompare:cmp al,passwordbxje inputinc chjmp inputjudge:cmp cl,1hje exitcmp cl,8jne nomatchcmp ch,0hjne nomatchmatch:lea dx,str1mov ah,9hint 21hjmp startnomatch:lea dx,str2mov ah,9hint 21hjmp startexit:mov ah,4chint 21hcode endsend start4 上述程序1、2、3分别完成后请编写一个程序来实现简单的程序菜单显示。(采用地址跳跃表法实现)显示一个菜单要求用户从下表中选择:(1) GUESS NUMBER GAME (对应程序1)(2) CHAR SELECTION PROGRAM(对应程序)(3) PASSWORD PROGRAM(对应程序)(4) PRESS “ESC” TO QUIT用户作出选择13时,显示输出要执行操作的名字,如“Your selection is 1,the program will execute GUESS NUMBER GAME!”然后转向相应的程序去执行,执行结束前进行退出的判断,显示一个提示信息“will you continue program really?(Y:N)”要求用户从键盘键入字符,若是“Y”键,则继续程序的执行,若是“N”键,则返回到菜单。若用户选择4,要求程序显示提示信息“Please press ESC key to exit!”,并能按要求正确退出。datasegmenttable dw opt1;dw opt2dw opt3dw opt4menudb 0dh,0ah,the menudb 0dh,0ah,(1)guess number gamedb 0dh,0ah,(2)char selection programdb 0dh,0ah,(3)password programdb 0dh,0ah,(4)press escto quit$str1db 0dh,0ah,your selection is 1,the program will execute guess number game!$str2db 0dh,0ah,your selection is 2,the program will execute char selection program!$str3db 0dh,0ah,your selection is 3,the program will execute password program!$str4db 0dh,0ah,will you continue program relly?$message db 0dh,0ah,please intput a number from 0 to9:$guess1db 0dh,0ah,too biger$guess2 db 0dh,0ah,too small$guess3db 0dh,0ah,you are right$mdb 33hndb ?char1db 0dh,0ah,it is a bigital$char2db 0dh,0ah,it is a lowcase letter$char3db 0dh,0ah,please input:$password db kiddingthir1 db 0dh,0ah,match$thir2 db 0dh,0ah,nomatch!program terminated!$thir3 db 0dh,0ah,please input:$data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea si,tablelea dx,menumov ah,9hint 21hmov ah,1hint 21hand al,0fhmov ah,0hdec axshl ax,1hadd si,axj:jmp startopt1:lea dx,str1mov ah,9hint 21hmov dx,offset messagemov ah,9int 21hmov ah,1int 21hmov N,alcmp al,20hje jcmp al,Mja a1jb a2mov dx,offset guess3mov ah,9int 21hjmp continuea1:mov dx,offset guess1mov ah,9int 21hjmp continuea2:mov dx,offset guess2mov ah,9hint 21hjmp continueopt2:lea dx,str2mov ah,9hint 21hlea dx,str3mov ah,9int 21hmov ah,1int 21hcmp al,0dhje startsicmp al,1jb opt2cmp al,9jb b1cmp al,Ajb opt2cmp al,Zjb b2cmp al,ajb opt2cmp al,zjb b2jmp opt2b1:lea dx,char1mov ah,9hint 21hjmp continueb2:lea dx,char2mov ah,9hint 21hjmp continueopt3:lea dx,str3mov ah,9hint 21hmov bx,offset passwordmov bx,0hlea dx,thir3mov ah,9hint 21hmov cl,0hmov ch,0hinput:mov ah,1hint 21hinc clcmp al,0fhje judgecmp cl,1hje compareinc bxcompare:cmp al,passwordbxje inputinc chjmp inputjudge:cmp cl,1hje tablebxcmp cl,8jne nomatchcmp ch,0hjne nomatchmatch:lea dx,str1mov ah,9hint 21hjmp continuenomatch:lea dx,str2mov ah,9hint 21hjmp opt3opt4:lea dx,str4mov ah,9hint 21hmov ah,1hint 21hcmp al,1bhje exitcontinue:lea dx,str4mov ah,9hint 21hmov ah,1hint 21hcmp al,Yje yescmp alyje yescmp al,Nje tablebxcmp al,nje tablebxyes:jmp tablesiexit:mov ah,4chint 21hretmenu endpcode endsend start三实验要求1编写实验内容要求的四个程序; 2熟悉源程序汇编、连接命令的使用方法。3认真完成上述习题,采用DEBUG或CODEVIEW进行调试,编辑实验方案,运行程序,并调试程序,写出正确结果以及遇到的问题和解决方法。4实验过程请认真记录,并对结果进行分析写出实验体会或意见。四实验环境PC微机DOS操作系统或 Windows 操作系统MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境五实验步骤1 用EDIT或其它编辑软件,编写.ASM源程序, 2对其进行汇编及连接,产生.EXE文件。3. 在MS-DOS下运行这两个.EXE文件。4对.EXE文件进行调试运行。(1)用DEBUG调试运行,学会通过命令R、U、D等命令观察数据变化,学会T、G命令来实现程序的单步或断点调试调试。(2)用CODEVIEW调试运行,学会使用该集成环境中的各个窗口综合观察寄存器、内存单元等变化,学会使用功能键进行单步或断点调试。六实验报告要求1画出四个程序的流程图,若要独立编写程序,应列出相应的程序清单。程序中应有相应的注释信息。2在报告中说明本实验是如何利用DEBUG或CODEVIEW进行调试的。3编辑实验方案,运行程序,并调试程序,写出正确结果以及遇到的问题和解决方法。4实验过程请认真记录,并对结果进行分析,写出实验体会或总结,此部分将作为评价标准之一。七实验记录及程序清单八实验总结 注意跳转范围,学会跳转两次 南昌大学实验报告学生姓名: 学 号: 专业班级: 计科 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 实验4 循环程序设计实验一实验目的1掌握单重循环及多重循环的程序设计方法;2学会针对不同的问题,选用不同的组织循环的方法;3进一步熟悉利用DEBUG程序、CODEVIEW调试程序的方法,并检查和验证结果的正确性。二实验内容1. 已知字数组定义如下:ARRAY DW 12,78,55,4,125,96 MAX DW ? 编制程序求出该ARRAY数组中的最大数放入MAX单元。源代码:data segmentarray dw 12,78,55,4,125,96max dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov si,0mov ax,arraysimov cx,5again:add si,2dec cxjcxz exitcmp ax,arraysija againmov ax,arraysijmp againexit:mov max,axmov ah,4chint 21hcode endsend startMax:7d00把第一个数赋值给max,然后逐个比较,讲比原来的数大的数存入max2. 预留字符串口令,输入口令串与预留密码串比较。若匹配则显示“MATCH!CONGRATULATION”,否则显示“NOMATCH!”,并让用户重新输入,程序能对口令进行测试,但测试次数最多3次,若3次输入密码皆错,给出相应的提示信息,程序退出。 data segmentpassword db kiddingstr1 db 0dh,0ah,match$str2 db 0dh,0ah,nomatch!program terminated!$str3 db 0dh,0ah,please input again:$str4 db 0dh,0ah,the third wrong,so the program will be over:$data endscode segmentassume cs:code,ds:datastack segmentstack endsstart:mov ax,datamov ds,axmov bx,offset passwordmov bx,0hmov di,3lea dx,str3mov ah,9hint 21hmov cl,0hmov ch,0hbegin:cmp di,0hje optopt:lea dx,str4mov ah,9hint 21hmov ah,4chint 21hinput:mov ah,1hint 21hinc clcmp al,0dhje judgecmp cl,1hje compareinc bxcompare:dec dicmp al,passwordbxje inputinc chjmp inputjudge:cmp cl,1hje exitcmp cl,8jne nomatchcmp ch,0hjne nomatchmatch:lea dx,str1mov ah,9hint 21hjmp startnomatch:lea dx,str2mov ah,9hint 21hjmp startexit:mov ah,4chint 21hcode endsend start在分支实验的第三题的基础上增加一个di,比较输入密码和原设定的密码,三次错误给出错误提示,并退出程序3. 有一个首地址为NUM的N字无序无符号整数数组,编制程序采用选择排序法使该数组中的数按照从小到大的次序排序输出。 data segmentnum dw 78,28,49,37,134data endscode sementassume cs:code,ds:datastart:mov ax,datamov ds,axmov di,0hagain:mov si,dinext:mov ax,numdiadd si,2cmp si,16ja exitcmp ax,numsijbe nextxchg ax,numsimov numsi,axjmp nextexit:add di,2cmp di,16jb,

温馨提示

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

最新文档

评论

0/150

提交评论