汇编语言实验报告-1~.doc_第1页
汇编语言实验报告-1~.doc_第2页
汇编语言实验报告-1~.doc_第3页
汇编语言实验报告-1~.doc_第4页
汇编语言实验报告-1~.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

实 验 报 告实验课程: IBM-PC汇编语言程序设计 学生姓名: 学 号: 专业班级: 电气信息类III 103班 2011年12月16日目 录-(1)汇编语言程序上机过程2-(2)字符处理程序实验7-(3)子程序实验11-(4)中断程序设计18南昌大学实验报告-(1)汇编语言程序上机过程学生姓名: 学 号: 专业班级: 电103 实验类型:验证 综合 设计 创新 实验日期: 10/21, 10/28 实验成绩: 一、 实验目的熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。了解汇编语言程序的汇编、运行环境。二、 实验内容1 掌握常用的编辑工具软件(如WORD、EDIT)、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 阅读下面程序段。五、 主要实验步骤程序:datasegmentmessagedbThis is a sample program of keyboard and displydb0dh,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,61hjcndcmpal,7ahjandandal,11011111bnd: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检查程序。六、 思考题1、 若在源程序中把INT 21H的H省去,会产生什么现象?代码编译连接均为正常,但是运行时无法输入与输出,也无法退出。2、 把 INT 21H 4CH号功能改为 INT 20H,行不行?更改后,编译链接均正常,输入输出也正常,但是按下ESC退出时会出现错误,错误如下:七、 参考资料IBM-PC汇编语言程序设计汇编语言实验指导书南昌大学实验报告-(2)字符处理程序实验学生姓名: 学 号: 专业班级: 电103 实验类型:验证 综合 设计 创新 实验日期: 11/04, 11/11 实验成绩: 一. 实验目的1熟悉串操作指令的功能与应用;2掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。二实验内容1字符串统计。自STRN开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。2在给定的字符串中,删除重复的字符,其余的字符向前递补。三. 实验要求1认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。2按正常的方法将删除字符程序编成子程序,规定子程序的入口和出口参数。四实验环境PC微机DOS操作系统或 Windows 操作系统MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境五实验步骤1用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。程序每次执行,都能得到不同的结果。实验代码: ;COUNTDC.ASMDATA SEGMENTSTRN DB 80 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXLEA DI, STRNMOV CL, 0AGAIN: MOV AH, 1 INT 21HCMP AL,0DHJZ DONEMOV DI,ALINC DIINC DLJMP AGAINDONE: LEA SI,STRNMOV CH,0MOV BL,0CLDCYCLE:LODSB CMP AL,61HCMP AL,7AHJA NEXTINC BLNEXT: LOOP CYCLEMOV AL,BLMOV AH,0MOV CL,10DIV CL ;十位数在AL中,个位数在AH中XCHG AH,AL ;以下显示两位十进制数MOV DL,AHOR DL,30HINT 21HMOV DL,ALOR DL,30HMOV AH,2INT 21HMOV DL,ALOR DL,30HINT 21HMOV DL,ALOR DL,30HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2删除字符串中重复字符,要求编写一个在同一个字符串中删除字符,并将其余字符向前递补的程序。实验代码: ;DELD.ASMDATA SEGMENTSTRN DB 80 DUP(?)LEN DB ?DATA ENDSCODE SEGMENTASSUME CS: CODE,DS: DATA,ES: DATASTART: MOV AX, DATAMOV DS,AXMOV ES,AXLEA SI,STRNMOV CL,0AGAIN: MOV AH,1INT 21HCMP AL,0DHJZ DONEMOV SI,ALINC SIINC CLJMP AGAINDONE: MOV CH,0MOV LEN,CLREPEAT: PUSH SIPUSH CX ;CX为内循环记数PUSH CX ;DX为外循环记数POP DXDEC CX JE NEXT1 ;是最后一个字符,不再查找重复字符MOV AL,SICMP AL,0JE NEXT1COMP: INC SI CMP AL,SIJNE GOON ;为非重复字符MOV BUTE PTRSI,0GOON: LOOP COMP ;查出与该字符重复的所有字符,并用0替换NEXT1: POP DXPOP SIDEC DXJNZ REPEAT ;对所有重复字符都进行查找 LEA SI,STRN ;删除重复字符MOV CL,LENMOV CH,0CYCLE: MOV AL,SI CMP AL,0 ;是重复字符吗?JNZ NEXT ;不是,查找下一个字符DEC CX ;递补字串长度送CXJZ DONE ;若是最后字符不递补CALL DELE ;删除该空字符并递补DEC SI ;对递补子串从头处理NEXT: INC SILOOP CYCLEMOV AH,4CHINT 21HDELE PROCPUSH SIPUSH CXCLDMOV DI,SI ;空字符处为目的首址INC SI ;下一个地址为源串首址REP MOVSBPOP CXPOP SI RETDELE ENDPCODE ENDSEND START六思考题编写程序,在一个字符串中查找匹配字符。南昌大学实验报告-(3)子程序实验学生姓名: 学 号: 专业班级: 电103 实验类型:验证 综合 设计 创新 实验日期: 11/18, 11/25 实验成绩: 一、 实验目的1. 掌握主程序与子程序之间的调用关系及调用方法;2. 掌握子程序调用过程中近程调用与远程调用的区别;3. 掌握通过堆栈转送参数的方法。二、 实验内容1. 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。2. 编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符”b”的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符”b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。三、 实验环境PC微机DOS操作系统或 Windows 操作系统MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境四、 实验要求1. 第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。2. 第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。3. 第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。4. 预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图; 熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。五、 主要实验步骤1. 编辑、汇编两个源程序,生成相应的可执行文件(.EXE)2. 用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。3. 检查程序执行的结果是否正确。实验内容1流程图: 主程序子程序HEXASC子程序DISP实验内容1结果:实验内容2流程图: 主程序子程序实验内容2结果:实验内容1代码:DATA SEGMENTBUF DB 0ABH,0CDH,0DEH,01H,02H,03HDB 3AH,4BH,5CH,6FHDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA BX,BUFMOV CX,0AHLOP:MOV AL,BXCALL HEXASCINC BXLOOP LOPMOV AH,4CHINT 21HHEXASC PROC NEARPUSH CXPUSH AXMOV DL,ALMOV CL,4SHR DL,CLCALL DISPPOP AXMOV DL,ALAND DL,0FHCALL DISPPOP CX RETHEXASC ENDPDISP PROC NEARCMP DL,9JBE NEXTADD DL,7NEXT:ADD DL,30HMOV AH,2INT 21HRETDISP ENDPCODE ENDS END START实验内容2代码:DATASEGMENTCHARDB bBUF DB 50H,?,50H DUP(?)DATAENDSMCODESEGMENTASSUME CS:MCODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUFMOV AH,10INT 21HMOV DL,0AHMOV AH,2INT 21HLEA SI,BUFMOV CL,SI+1MOV CH,0INC SIINC SIMOV AL, CHARMOV AH,0PUSH SI PUSH CXPUSH AXCALL FAR PTR CHECKPOP AXPUSH AXMOV DL,ALMOV CL,4SHR DL,CLCMP DL,9JBE J1ADD DL,7J1:ADD DL,30HMOV AH,2INT 21HPOP AXMOV DL,ALAND DL,0FHCMP DL,9JBE J2ADD DL,7J2:ADD DL,30HMOV AH,2INT 21H MOV AH,4CHINT 21HMCODEENDSSCODESEGMENTASSUME CS:SCODECHECKPROC FARPUSH BPMOV BP,SPMOV SI,BP+10MOV CX,BP+8MOV AX,BP+6XOR AH,AHAGAIN:CMP AL,SIJNE NEXT1INC AHNEXT1:INC SILOOP AGAINMOV AL,AHMOV BP+10,AXPOP BPRET 4CHECKENDPSCODEENDSEND START六、 思考题分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。答:在近程调用中CS值不变,而在远程调用中CS值发生改变;近程调用中SP+2,远程调用中SP+4。七、 参考资料IBM-PC汇编语言程序设计汇编语言实验指导书南昌大学实验报告-(4)中断程序设计学生姓名: 学 号: 专业班级: 电103 实验类型:验证 综合 设计 创新 实验日期: 12/02, 12/09 实验成绩: 一、 实验目的1、 掌握中断程序设计方法。2、 熟悉并且掌握BIOS 和DOS中断的调用方法。二、 实验内容1、 编写一个程序,重写INT9H号中断,改为扫描键盘后将按下的按键的键值转化为两位的十六进制数显示到屏幕上。2、 编写一个程序,重写INT1CH中断,改为每间隔一段时间在屏幕上显示字符“The bell is ring!”并鸣叫一声。三、 实验要求1、 学习DOS基本命令EDIT、MASM、LINK、Debug等汇编语言工具。2、 在做实验前要编写实验内容要求的程序,实验课时上机调试、修改、完善。四、 实验环境1、 编辑工具:EDIT软件2、 汇编用具:MASM 、LINK3、 调试工具:DEBUG 或 NotePad+五、 实验步骤1、 输入源程序,汇编并连接此程序,修改语法错误,直到生成可执行文件。2、 运行程序,查看实验结果。3、 实验结果:a) 实验内容1:b) 实验内容2:4、 实验代码:a) 实验内容1:CODE SEGMENT ASSUME CS:CODE, DS:CODE, SS:CODESTART: JMP GO DW 100 DUP(?)TOS EQU THIS WORD OLDIP DW ? ;用于存放原INT9中断向量(即中断服务程序入口地址)中的偏移值OLDCS DW ? ;用于存放原INT9中断向量(即中断服务程序入口地址)中的段值GO: MOVAX,CS MOVDS,AX MOV SS,AX MOV SP,OFFSET TOS MOVAL,9H ;取原中断向量 MOVAH,35H INT21H MOV OLDCS,ES ;存原中断向量段址 MOV OLDIP,BX ;存原中断向量偏移量 PUSHDS MOV DX, OFFSET MYINT9;新INT9中断向量的偏移量送DX MOV AX, SEG MYINT9 MOV DS, AX ;新INT9中断向量的段值送DS MOV AL, 9H MOV AH, 25H INT 21H ;新INT9的中断向量写入中断向量表 POP DS IN AL,21H AND AL,11111101B OUT 21H,AL ;确保中断屏蔽寄存器没有屏蔽键盘中断 STI NEXT: JMP NEXT ;主程序死循环 MOV AH,4CH INT 21H MYINT9PROCFAR PUSH AX PUSH DX STI IN AL,60H TEST AL,80H JNZ EXIT ;如果接受的扫描码最高位为0,表示按下键,否则是释放键,这里只考虑按下键。 MOV BL,AL MOV DL,AL SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL,9 JBE L ADD DL,7 L: ADD DL,30H MOV AH,2 INT 21H ;输出扫描码字节的高4位(1位十六进制数) MOV DL,BL AND DL,0FH CMP DL,9 JBE LL ADD DL,7 LL: ADD DL,30H MOV AH,2 INT 21H ; 输出扫描码字节的低4位(也是1位十六进制数) MOV AH,2 MOV DL,0AH INT 21H MOV DL,0DH INT 21H ;显示回车换行 EXIT: MOV AL,20H OUT 20H,AL POP DX POP AX IRETMYINT9ENDPCODEENDSENDSTARTb) 实验内容2:DATA SEGMENTCOUNT DW 1MESS DB The bell is ring!, 0DH,0AH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, ES: DATASTART: MOVAX,DATA MOVDS,AX MOVAL,1CH;取中断向量 MOVAH,35H INT21H PUSHES;存

温馨提示

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

评论

0/150

提交评论