大学课程汇编语言的实验报告-.pdf
《大学课程汇编语言的实验报告-.pdf》由会员分享,可在线阅读,更多相关《大学课程汇编语言的实验报告-.pdf(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验报告实验课程:学生姓名:学号:专业班级:电气信息类III班2011 年 12 月 20 日1目录(1)汇编 语 言 程序 上 机 过 程.2(2)字符 串 处 理程 序 实 验.6(3)子程 序 实 验.13(4)中断 程 序 实验.21(5)C+调 用 汇 编子 程 序.252南昌大学实验报告-(1)汇 编 语言 程 序 上 机 过 程学生姓名:学号:专业班级:实验类型:验证 综合 设计 创新实验日期:2011.11.12/13实验成绩:一、实验目的熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。了解汇编语言程序的汇编、运行环境。二、实验内容1 掌握常用的编辑工具软件(如WORD、E
2、DIT)、MASM 和LINK 的使用;2 伪指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;3 利用的 INT 21H的1号功能实现键盘输入的方法;三、实验环境PC 微机DOS 操作系统或Windows 操作系统MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境四、实验要求1 仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;2 了解利用的 INT 21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法;3 阅读下面程序段。五、主要实验步骤
3、程序:datasegmentmessagedbThis is asample program of keyboard and displydb0dh,0ah,Pleasestrike the key!,0dh,0ah,$dataendsstack segmentparastack stackdb50 dup(?)stack endscode segmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovdx,offset messagemovah,9int21hagain:movah,13int21hcmpal,1bhjeexi
4、tcmpal,61hjcndcmpal,7ahjandand al,11011111bnd:movdl,almovah,2int21hjmp againexit:movah,4chint21hcode endsendstart实验步骤:1 用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为ASM。2 用 MASM 对源文件进行汇编,产生OBJ 文件和 LST 文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3 用 TYPE 命令显示1 产生的 LST 文件。44 用 LINK 将 OBJ 文件连接成可执行的EXE 文件。5 在 DOS 状态下运行LINK 产生的
5、 EXE 文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按 ESC 键可返回DOS。若未出现预期结果,用DEBUG 检查程序。5六、思考题1、若在源程序中把INT 21H的H省去,会产生什么现象?代码编译连接均为正常,但是运行时无法输入与输出,也无法退出。2、把 INT 21H4CH号功能改为INT 20H,行不行?更改后,编译链接均正常,输入输出也正常,但是按下ESC 退出时会出现错误,错误如下:七、参考资料IBM-PC 汇编语言程序设计汇编语言实验指导书6南昌大学实验报告-(2)字 符 串 处 理 实 验学生姓名:学号:专业班级:实验类型:
6、验证 综合 设计 创新实验日期:2011.11.20/21实验成绩:_一.实验目的1熟悉串操作指令的功能与应用;2掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。二实验内容1字符串统计。自STRN 开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。2在给定的字符串中,删除重复的字符,其余的字符向前递补。三.实验要求1认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。2按正常的方法将删除字符程序编成子程序,规定子程序的入口和出口参数。四实验环境PC 微机DOS 操作系统或Windows 操作系统MASM.
7、EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境五实验步骤1.用 1 号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。程序每次执行,都能得到不同的结果。;COUNTDC.ASMDATASEGMENTSTRNDB 80 DUP(?)DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DI,STRNMOV CL,07AGAIN:MOV AH,1INT 21HCMP AL,0DHJZDONEMOV DI,ALINC DIINC CLJMP AGAINDONE:LEA SI,STRNMOV
8、 CH,0MOV BL,0CLDCYCLE:LODSB CMP AL,61HMP AL,7AHCJA NEXTINC BLNEXT:LOOP CYCLEMOV AL,BLMOV AH,0MOV CL,10DIV CLXCHG AH,ALPUSH AXMOV DX,0DHMOV AH,2INT 21HMOV DX,0AHMOV AH,2INT 21HPOPAXMOV DL,AHORDL,30HMOV AH,2PUSHAXINT 21HPOPAXMOV DL,AL1ORDL,30H1INT21HPOPAXMOV DL,AL8OR DL,30HMOV AH,2INT 21HMOV AH,4CHINT
9、 21HCODEENDSEND START编译源程序:如下,发现地29 行有错误。用 EDIT 命令找到错误地方,并进行修改,如下图所示:修改后保存程序,重新编译:9重新编译后程序没有错误,用反汇编查看指令代码:如下图所示:运行程序,验证程序设计结果的正确性。从键盘上输入字符串“ADKJjkdjfljdeowekdjg”,共二十个字符,其中小写字母十六个,显示结果如下:由运行结果可知,程序运行正确,实现了设计要求。实验 2 课参考教材第五章练习10 的解法,但要编写一个在同一个字符串中删除字符,并将其余字符向前递补。删除字符串中重复字符的源程序清单:REPEAT:PUSH SI PUSH CX
10、PUSH CX;CX 为内循环计数POPDX;DX为外循环计数DECCXMOVAL,SICMP AL,0JENEXT1;若为空字符,则跳过COMP:DEC SICMP AL,SIMOV BYTE PTRSI,0GOON:LOOP COMP;查出与该字符重复的所有字符,并用0NEXT1:POPDXPOPSIDEC SIDEC DXMOV CX,DXJNZ REPEAT;对所有重复字符都进行查找LEA SI,STRN;删除重复字符;DELD.ASMDATASEGMENTSTRNDB 80 DUP(?)LENDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES
11、:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,STRN1MOV CL,0AGAIN:MOV AH,1 INT 21HCMP AL,0DHJZDONEMOV SI,ALINC SIINC CLJMP AGAINDONE:MOV CH,0MOV LEN,CLDEC SIMOV BYTE PTR SI+1,$10MOV CL,LENMOV CH,0CYCLE:MOV AL,SIINC CLCMP AL,0;是重复字符吗?JNZ NEXT;不是,查找下一个字符DEC CX;递补子串长度送CXJZALLDONECALL DELE;删除该空字符并递补DEC
12、SINEXT:INC SI LOOP CYCLEALLDONE:MOVDL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HLEA DX,STRNMOV AH,9INT 21HMOV AH,4CHINT 21HDELEPROCPUSH SIPUSH CXCLDMOV DI,SI;空字符处为目的首址INC SI;下一个地址为源串首址REP MOVSBPOPCXPOPSIRETDELEENDPCODEENDSENDSTARTPOPSIRETDELEENDPCODEENDSEND START编译源程序,检查程序的正确性,如下图所示:11源程序在27 行有错误,有
13、提示的消息可知,此处需要用到变址或基址寄存器,用EDIT 命令找到错误的地方,并改正:修改程序保存再编译以检查是否还有错误:有上图编译可知,程序修改正确,接下来连接成目标程序:此处是寄存器直接寻址,把cl的值送给标号为LEN 存储单元,所以应去掉”12生成的目标程序名为DELD.EXE用反汇编命令查看程序代码:运行程序,检验程序设计的正确性:执 行 程 序,输 入 字 符 串”DKJKLDKEIOWEJDLJAHNVL”,根 据 编 写 要 求,显 示 的 结 果 为“KIOWEDJAHNVL“,既删除字符串中重复的字符。如上图所示。13南昌大学实验报告-(3)子 程 序 实 验学生姓名:学号
14、:专业班级:实验类型:验证 综合 设计 创新实验日期:2011.12.8/15实验成绩:一、实验目的1.掌握主程序与子程序之间的调用关系及调用方法;2.掌握子程序调用过程中近程调用与远程调用的区别;3.掌握通过堆栈转送参数的方法。二、实验内容1.将 BUF 开始的 10 个单元中的二进制数转换成两位十六进制数的ASCII 码,在屏幕上显示出来。要求码型转换通过子程序HEXAC 实现,在转换过程中,通过子程序DISP 实现显示。2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符”b”的个数.子程序的参数是字符串的首地址TABLE,字符串长度N 及字符”b”.
15、子程序返回字符”b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。三、实验环境PC 微机DOS 操作系统或Windows 操作系统MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境四、实验要求1.第一个实验程序用子程序的近程调用实现。由于在调用HEXASC 子程序时,子程序又调用了 DISP 子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS 值是不变的。2.第二个程序是利用远调用的方法调用子程序的。在远调用情况
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 课程 汇编语言 实验 报告
限制150内