汇编语言实验指导(柯栋梁)_第1页
汇编语言实验指导(柯栋梁)_第2页
汇编语言实验指导(柯栋梁)_第3页
汇编语言实验指导(柯栋梁)_第4页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编语言实验报告书专业班级学号姓名指导教师安徽工业大学计算机学院实验一汇编运行环境及方法、简单程序设计一、实验目的:1、熟练汇编语言运行环境和方法。2、了解如何使用汇编语言编制程序。3、熟悉 DEBUG 常用的命令的使用方法。4、会使用 DEBUG 命令调试程序。二、实验内容:1、比较两个字符串STRING1和 STRING2所含的字符是否相同, 若相同,则输出 MATCH,不相同则输出NOMATCH。2、学会对汇编语言程序进行汇编、连接和运行。3、学会用 DEBUG中的 D命令, E 命令, R命令, G命令, F 命令,U命令, A 命令以及 T 命令。1功能:两个字符串 STRING1和

2、 STRING2所含的字符是否相同,若相同,则输出 MATCH,不相同则输出 NOMATCH。在数据段定义二个字符串string1 和 string2,另外还有二个提示信息 mess1和 mess2,通过字符串比较LEASI,string1LEADI,string2CLDMOVCX,25REPZcmpsb2如果相等利用9 号功能调用输出match,否则输出 no match2.调试步骤:3.程序代码和执行结果 ;datasegSEGMENTstring1 DB'Move the cursor backward.'string2 DB'Move the cursor ba

3、ckward.'mess1 DB'Match.',13,10,'$'3mess2 DB'No match.',13,10,'$'datasegENDScodeSEGMENTmain PROC FARASSUMECS:code,DS:dataseg,ES:datasegstart:PUSHDSSUBAX,AXPUSHAXMOVAX,datasegMOVDS,AXMOVES,AXLEASI,string1LEADI,string2CLDMOVCX,25REPZcmpsbJZmatchLEADX,mess2JMPSHORT di

4、spmatch:LEADX,mess14disp:MOVAH,09INT21hRETmain ENDPcode ENDSENDstart运行结果:实验二循环程序设计已知学生成绩,求每个学生的名次一、实验目的:1、熟悉循环、 DOS 功能调用等基本的程序结构。2、熟悉多重循环结构及算法技巧。3、熟练使用DEBUG 常用命令查看程序运行结果,以及通过修改代码或数据来改变程序运行结果。5二、实验内容:设有十个学生成绩分别是88,75,95,63,98,78,87,73,90和60分。试编制一个程序,求每个学生的名次。1.功能:通过双重循环实现:对于数组的每个元素(学生成绩 ),查找数组中比该元素值大

5、的元素个数I ,则 I-1 即为该学生的名次,并将名次依次保存在以rank 为首地址的字数组中。2调试:可以看到 rank 中存入的名次结果: 4,3,2,1,8,7,6,5data segmentgrade DW82h,84h,87h,90h,55h,66h,77h,80hrank DW8 DUP(?)3.程序代码和执行结果 :data endscode segment6assume cs:code,ds:datamain proc farpush dsmov ax,0push axmov ax,datamov ds,axlea si,grademov cx,10OUTLOOP:push c

6、xmov bx,01hlea di,grademov ax,simov cx,9INLOOP:cmp ax,dijge NEXTinc bxNEXT:add di,27loop INLOOPmov WORD PTRsi+rank,bxadd si,2pop cxloop OUTLOOPretmain endpcode endsend main实验三分支程序设计从键盘输入月份数值,显示月份的英文字母一、实验目的:1、熟悉分支、 DOS 功能调用等基本的程序结构。2、使用 DEBUG 的 A 命令、 E 命令以及 R 命令修改内存中程序代码、数据以及寄存器的内容,使得程序输出不同的结果。8二、实验

7、内容:从键盘输入月份值,如(1-12),显示月份的英文名称('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC')。1.功能:从键盘输入月份( 112)则输出对相应的月份的英文字母,使用 DOS 系统功能调用实现从键盘输入月份数值(可能是一位也可能是二位 ),将月份值的ASCII 转换成数值,根据此数值确定月份英文名

8、在字符串数组montab 中的位置,将该位置连续三个字节拷贝到 alfmon 单元中,再通过 DOS 系统功能调用显示 alfmon 为起始的字符串。通过分支结构,首先判断输入字符的个数1还是 2,CMP act,0JEexit;Convert ASCII to binary:MOV AH,30hCMP act,2JEtwoMOV AL,monJMP conv条件跳转到对应的标号处one two;2.调试 :93.程序框图 :开始输入月份Act=0.1.2?0EXIT转换成月份输出结束4.写出源程序清单和执行结果:10data SEGMENTthree DB3mess DB'month

9、?',13,10,'$'alfmon DB13,10,'?',13,10,'$'montabDB'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'error DB 'ERROR,INPUT AGAIN PLEASE!',13,10,'$

10、' monin LABEL BYTEmax DB3act DB?mon DB3 DUP(?)data ENDScode SEGMENTASSUME CS:code,DS:data,ES:datamain PROC FARPUSH DSSUB AX,AXPUSH AXMOV AX,data11MOV DS,AXMOV ES,AXSTART:LEA DX,messMOV AH,09INT 21h;Show Input Month MessageLEA DX,moninMOV AH,0ahINT 21h;accept keyboard inputCMP act,0JEexit;Convert

11、 ASCII to binary:MOV AH,30hCMP act,2JEtwoMOV AL,monJMP convtwo:MOV AL,mon+1MOV AH,monconv:XOR AX,3030h;clear ASCII 3's12CMP AH,0;MOnth01-09?JZloc ;Yes-bypassSUB AH,AH;no-clear AHADD AL,10;correct for binaryloc:LEA SI,montabDEC ALMUL threeADD SI,AXMOV CX,03CLDLEA DI,alfmon+2REP movSbLEA DX,alfmon

12、MOV AH,09INT 21hJMP STARTEXIT:RETmain ENDPcode ENDSEND main135.体会与意见: 在屏幕上从当前光标位置开始显示一个字符串:MOVDX,OFFSETSTRING取字符串的首地址MOVAH,09H;系统调用功能号送AHINT 21H此调用的入口参数为内存缓冲区中字符串的首地址,该字符必须以$结尾,出口参数无,调用执行结果是在屏幕上显示一个字符串在编写分支程序时,要尽可能避免编写“头重脚轻”的结构,即:当前分支条件成立时,将执行一系列指令,而条件不成立时,所执行的指令很少。 这样就使后一个分支离分支点较远,有时甚至会遗忘编写后一分支程序。

13、这种分支方式不仅不利于程序的阅读,而且也不便将来的维护实验四子程序设计从键盘输入一个四位十进制无符号数,并将其从屏幕上显示出来一、实验目的:1、熟悉分支、循环、子程序调用、DOS 功能调用等基本的程序14结构。2、掌握子程序调用的参数传递。3、掌握综合程序的编制及调试方法。二、实验内容:从键盘输入一个四位的十进制数 (如 4525D),然后在屏幕上以十六进制形式将其显示出来 (11ADH) 。1程序说明 :从键盘输入一个四位的十进制数,然后在屏幕上以十六进制形式将其显示出来。 十六进制与二进制有很好的对应关系(每 4 位二进制数和 1 位十六进制数存在一一对应关系) ,显示时只需将原二进制数(

14、在 BX 中)每 4 位分成一组,按组求对应的 ASCII 码送显示器即可。ASCII 码与十六进制数字的对应关系为:30H39H 对应数字 09,41H46H 对应数字 AF,从数字 9 到 A,其 ASCII 码间隔了 7H,这一点在转换时要特别注意。为使一个十六进制数能按高位到低位依次显示,实际编程中,我们对先 BX 中的数每次循环左移一组(4 位二进制),然后屏蔽掉当前高 12 位,对当前余下的 4 位(即1 位十六进制数)求其 ASCII 码,要判断它是 09 还是 AF,是前者则加 30H 得对应的 ASCII 码,后者则要加 37H 才行,最后送显示器输出。以上步骤重复4 次,就

15、可以完成 BX 中数以 4 位十六进制的形式显示出来。2.调试:指令地址:153.程序框图:16开始输入无符号数转变成十六进制输出十六进制数结束4.程序代码执行结果:dataSEGMENTmess1 DB'please input number:$'mess2 DB'hexadecimal number is:','$'dataENDScodeSEGMENTmainPROCFARASSUMECS:code,DS:datastart:PUSHDSSUBAX,AXPUSHAXMOVAX,data17MOVDS,AXLEADX,mess1MOVAH,0

16、9INT21hCALLinputCALLcrlfLEADX,mess2MOVAH,09INT21hCALLoutputRETmainENDPinputPROCNEARMOVBX,0NEWCHAR :MOVAH,1INT21hMOVDL,ALSUBAL,30hJLEXIT1CMPAL,39hJGEXIT1CBW18XCHGAX,BXMOVCX,10dMULCXXCHGAX,BXADDBX,AXJMPNEWCHAREXIT1:RETRETinputENDPoutputprocnearmov cl,4mov ch,4rotate:rol bx,clmov al,bland al,0fhadd al,

17、30hcmp al,3ahjlprintadd al,7hprint:mov dl,almov ah,2int 21h19dec chcmp ch,0jne rotatemov dl,'H'int 21hretoutputendpcrlfPROCNEARMOVDL,0ahMOVAH,02hINT21hMOVDL,0dhMOVAH,02hINT21hRETcrlfENDPcodeENDSENDstart205.体会和意见:根据不同的需要,如何把机器数按不同数制形式显示出来的方法,主要是数据转换的方法不同,显示的功能调用指令是一样的,还可以用其他(比如字符串方式)方法调用显示功能。

18、实验五综合程序统计不同成绩段学生的人数(2)一、实验目的:1、掌握分支、循环、子程序调用、DOS 功能调用等基本的程序结构。2、掌握综合程序的编制及调试方法。二、实验内容:设有十个学生成绩分别是76,69,84,90,73,88,99, 63,100 和 80 分。试编制一个子程序,统计低于60 分,6069 分,7079 分,8089 分,9099 分和 100 分的人数,并输出显示统计结果。1.程序说明: 一个子程序,统计低于60 分, 6069 分, 7079分, 8089 分, 9099 分和 100 分的人数,并输出显示统计结果。采用分支结构分别计数,将数据分别存入bh,bl,cl,

19、ch,dl,al 中,21先将 ax,dx,cx,bx 依次压栈,然后依次出栈输出人数。2.调试程序指令地址:查看压栈前各个寄存器内容:22234.程序代码和执行结果:data segmentgrade db 72,69,83,90,75,80,87,99,63,100a db'<60renshu:','$'b db 0ah,0dh,'6070 renshu:','$'c db 0ah,0dh,'7080 renshu:','$'d db 0ah,0dh,'8090 renshu:&#

20、39;,'$'e db 0ah,0dh,'90100renshu:','$'24f db 0ah,0dh,' 100renshu:','$'count db 10data endsstacks segmentstacks endscode segmentassume cs:code,ds:data,ss:stacksmain proc farstart:mov ax,datamov ds,axxor ax,axxor bx,bxxor cx,cxxor dh,dhcall countgradecall output

21、mov ah,4chint 21hmain endp25countgrade proc nearmov di,0io:cmp gradedi,60jb l1cmp gradedi,70jb l2cmp gradedi,80jb l3cmp gradedi,90jb l4cmp gradedi,100jb l5inc aljmp continuel1:inc bhjmp continuel2:inc bljmp continuel3:26inc chjmp continuel4:inc cljmp continuel5:inc dhjmp continuecontinue:inc didec c

22、ountjnz ioretcountgrade endpoutput proc nearmov ah,0push axpush dxpush cxpush bxlea dx,a;分数小于 60 的人数mov ah,927int 21hpop bxmov dl,bhadd dl,30hmov ah,2int 21hlea dx,b;分数 60 至 69 的人数mov ah,9int 21hmov dl,bladd dl,30hmov ah,2int 21hlea dx,c;分数 70 至 79 的人数mov ah,9int 21hpop cxmov dl,chadd dl,30hmov ah,2

23、int 21hlea dx,d;分数 80 至 89 的人数28mov ah,9int 21hmov dl,cladd dl,30hmov ah,2int 21hlea dx,e;分数 90 至 99 的人数mov ah,9int 21hpop dxmov dl,dhadd dl,30hmov ah,2int 21hlea dx,f;分数 100 的人数mov ah,9int 21hpop axmov dl,aladd dl,30hmov ah,2int 21h29retoutput endpcode endsend start实验六综合程序输入学生成绩,计算学生名次,按学号顺序显示学生名次(

24、2)一、实验目的:1、掌握分支、循环、子程序调用、DOS 功能调用等基本的程序结构。2、掌握综合程序的编制及调试方法。二、实验内容:按学号顺序从键盘输入学生成绩(成绩之间用逗号分隔)保存在成绩数组中,计算每个学生的名次, 并按学号顺序存入内存中名次数组,最后,按学号顺序显示每个学生的名次。1.程序说明:按学号顺序从键盘输入学生成绩(成绩之间用逗号30分隔 )保存在成绩数组中,计算每个学生的名次,并按学号顺序存入内存中名次数组,最后,按学号顺序显示每个学生的名次。设计一个子程序INPUT 接受键盘输入的每个学生成绩,并存入成绩数组。其中 INPUT 子程序调用 DECIBIN 子程序,将每个学生

25、的成绩保存在 BX 寄存器中。当遇到逗号时将BX 内容写入成绩数组,遇到回车表示成绩输入完毕。2、设计 RANKP子程序根据成绩数组计算每个学生名次,并将名次写入名次数组 ( 这部分功能请参考实验二) 。3、设计 OUTPUT 子程序输出名次数组中学生名次,注意要将数值形式的名次转换成ASCII码表示后再显示,此功能通过子程序BINDEC 实现转换。2.调试:指令地址:313. 程序框图:开 始输入成绩计算名次输出成绩结束4. 程序代码和执行结果:dataSEGMENTgrade DW50 DUP(?)rank DW50 DUP(?)count DW?mess1 DB'Grade? $

26、'32mess2 DB13,10,'Input Error!',13,10,'$'mess3 DB'Rank:$'dataENDScodeSEGMENTmainPROCFARASSUMECS:code,DS:datastart:PUSHDSSUBAX,AXPUSHAXMOVAX,dataMOVDS,AXCALLinputCALLrankpCALLoutputRETmainENDP;功能:接受键盘输入的每个学生成绩,并存入grade数组;当遇到逗号时将BX 内容写入成绩数组,遇到回车表示成绩输入完毕。inputPROCNEARLEADX,m

27、ess133MOVAH,09INT21hMOVSI,0MOVcount,0enter:CALLdecibin;dec to binINCcountCMPDL,','JEstoreCMPDL,13JEexit2JNEerrorstore:MOVgradeSI,BXADDSI,2JMPentererror:LEADX,mess2MOVAH,09INT21hexit2:MOVgradeSI,BX34CALLcrlfRETinputENDP根据 grade 数组计算每个学生名次,并将名次写入rank 数组rankpPROCNEARMOVDI,countMOVBX,0LOOP1:MOVAX,gradeBXMOVWORD PTR rankBX,1MOVCX,countLEASI,gradenext:CMPAX,SIJGEno_countINCWORD PTR rankB

温馨提示

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

评论

0/150

提交评论