《汇编语言上机实验指导书.doc》由会员分享,可在线阅读,更多相关《汇编语言上机实验指导书.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、汇编语言程序设计课程实 验 教 学 指 导 书课程编号:XXXXXXX撰写人:刘玮审核人:XXX重庆师范大学涉外商贸学院数学与计算机学院二一三年11月17日前 言一、实验总体目标本课程是计算机专业的专业课。汇编语言是面向机器的程序设计语言,直接使用机器指令编程,要求学生具有较多的计算机硬件知识。 通过本课程的学习,学生应该了解计算机的基本结构,INTEL微处理器的发展和计算机语言及汇编语言的特点。应具有使用宏汇编编写程序的能力,对顺序、分支、循环三大程序结构在汇编语言的实现方法有较好的掌握,对模块化设计技术有进一步的了解。对于可能在将来从事计算机控制工作的学生打下必要的基础。学生还可以对新型主
2、流CPU如Pentium CPU的工作模式及扩充指令有所了解。以跟踪微型计算机新技术的发展,为后续的专业技术课程打下坚实基础。二、适用专业年级专业:计算机科学与技术,网络工程年级:二年级三、先修课程(数字逻辑,计算机组成原理,C语言程序设计,微型计算机与接口技术)四、实验项目及课时分配实验项目实验要求实验类型实验学时项目一汇编程序与汇编器的使用必修验证性2项目二顺序程序设计实验必修设计性2项目三分支结构程序设计必修设计性2项目四循环结构程序设计必修设计性2项目五子程序设计必修设计性2项目六字符处理程序设计必修设计性2项目七输入输出程序设计必修设计性2项目八中断程序设计选修设计性2五、实验总体要
3、求汇编语言是一门实践性很强的课程,只用通过大量的上机实践过程,才能更好的掌握汇编语言程序设计技术。为保证教学效果与质量,以下几点是学好这门课程的必要的要求和注意事项。1、汇编语言程序设计的实验课主要是供学生测试、调试汇编语言程序。2、必须充分重视实验课。实验课是汇编语言程序设计课程的重要组成部分,是理论联系实践的重要环节。通过它,能够培养学生独立分析和解决问题的能力。3、在每个实验之前,学生必须准备好被测程序的有关设计资料(包括程序的基本设计说明、程序流程图、汇编语言程序清单等)、测试数据、测试驱动程序、测试需要的“桩模块”等。4、必须做好实验前的一切准备工作,包括程序测试调试的详细过程安排等
4、。在实验中应严格按照预先确定的实验过程进行实验,决不允许在实验过程中准备实验程序、测试数据与测试调试过程计划。凡未做好实验准备者,一律禁止进入实验室。5、应当系统记录实验过程中的现象(通过情况、排除问题的调试过程等),以便写出充实的实验报告。六、本课程的重点、难点及教学方法建议重点:远过程性质的汇编语言子程序的设计;良好程序设计习惯的培养;程序测试-调试能力的培养。难点:开发可被高级语言程序调用的汇编语言子程序;测试数据的设计;调试器命令的熟练使用;汇编语言程序设计能力的提高。建议:学生最好是将在高级语言程序设计课程中已完成的、程序效率受制于硬件资源利用率的综合性程序改用汇编语言程序实现;在实
5、验前系统地“走查”被测程序,并使之成为习惯。七、主要参考书目蔡启先,王智文,黄晓璐,汇编语言程序设计实验指导,北京:清华大学出版社,2008年3月 冯康,范理,王利丽,汇编语言,武汉:武汉大学出版社,2007年5月实验项目一周数: 2 学分:2实验项目:汇编程序与调试器的使用 计划学时:2一、实验作用和目的熟悉DOS操作系统环境下汇编程序的编辑、编译、链接及运行过程,掌握汇编源程序的基本结构,编译运行的基本环境,熟练使用edit.exe或者qe.exe,masm.exe以及link.exe。二、实验内容与步骤1、源程序的编辑:编写一个名字为ABCD.ASM的源程序,该程序的功能是在计算机屏幕上
6、显示一个字符串“HELLO!”2、源程序的汇编:C:MASM ABCD.ASM3、目标文件的链接:LINK ABCD.OBJ4、可执行文件的调试。三、实验环境条件个人计算机:40台Win32操作系统MS DOSMASM 6.0及其以上版本的汇编程序及其配套的80X86汇编程序开发环境。四、实验报告要求1、总结用EDIT或者QE编辑源程序的方法。2、说明源程序的连接、汇编过程3、分析运行结果。4、按要求写出完整的实验报告(必须列出程序清单)。五、实验注意事项预习80X86微处理的结构预习程序发展的三个阶段预习汇编源程序的基本框架六、思考题编译后的OBJ文件和连接后的EXE文件的本质区别是什么?实
7、验项目二周数: 2 学分:2实验项目:顺序程序设计实验 计划学时:2一、实验作用和目的掌握顺序程序设计方法。熟悉数据传送及算术和逻辑运算指令的用法。学会在PC上建立,汇编,连接,调试和运行80X86汇编程序的过程。二、实验内容与步骤1、复习教材中顺序程序结构设计的相关内容2、源程序的编辑:编写一程序计算以下表达式的值。W=(v-(x*y+z-540)/x式中x,y,z,v均为有符号字数据3、汇编,链接并调试运行上述程序三、实验环境条件个人计算机:40台Win32操作系统MS DOSMASM 6.0及其以上版本的汇编程序及其配套的80X86汇编程序开发环境。四、实验报告要求1、列出源程序(加以注
8、释),说明程序的基本结构,并给出程序流程图。2、说明程序中各部分所用的算法以及上机调试中可能遇到的问题。3、分析运行结果。4、按要求写出完整的实验报告。五、实验注意事项注意:win7禁止第三方软件直接写屏,运行结果只能通过debug来查看,具体方法查看书中DEBUG调试相关内容。六、思考题数字在内存中的表示方法以及数制之间的转换。实验项目三周数: 2 学分:2实验项目:分支结构程序设计 计划学时:2一、实验作用和目的掌握分支结构程序的结构。掌握分支结构程序的设计,调试方法熟悉汇编语言的汇编,连接及调试方法二、实验内容与步骤1、预习教材中分支程序设计的相关内容2、源程序的编辑:已知在内存中有一个
9、字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。3、画出流程图,编写程序4、汇编,连接和调试运行程序三、实验环境条件个人计算机:40台Win32操作系统MS DOSMASM 6.0及其以上版本的汇编程序及其配套的80X86汇编程序开发环境。四、实验报告要求1、画出流程图,并用EDIT或者QE编辑源程序(加以注释)。2、说明程序中各部分所用的算法以及上机调试中可能遇到的问题。3、说明源程序的连接、汇编过程4、分析运行结果。五、实验注意事项注意单分支和多分支的结构特征注意无条件跳转和条件跳转的区别六、思考题一个多分支可以用多个单分支来设计实现吗?实验项目四周数: 2
10、 学分:2实验项目:循环结构程序设计 计划学时:2一、实验作用和目的加深对循环结构的理解。掌握循环程序的设计方法。进一步熟悉汇编程序的汇编、连接及调试技术二、实验内容与步骤1、预习循环程序设计的相关内容2、画出流程图,用EDIT或者QE编辑扩展名为.ASM的源程序源程序:在以BUF为首址的字存储区中存放有N个有符号数,采用“冒泡法”将它们按从大到小的顺序排列在BUF存储区中。3、编译、连接生成可执行程序4、运行程序三、实验环境条件个人计算机:40台Win32操作系统MS DOSMASM 6.0及其以上版本的汇编程序及其配套的80X86汇编程序开发环境。四、实验报告要求1、列出源程序(加以注释)
11、。2、说明程序中各部分所用的算法以及上机调试中可能遇到的问题。3、说明源程序的连接、汇编过程4、分析运行结果。五、实验注意事项循环计数器的存放循环的入口和出口六、思考题循环嵌套的次数与循环复杂性的关系?实验项目五周数: 2 学分:2实验项目:子程序设计 计划学时:2一、实验作用和目的学习子程序的定义和调用方法,加深对子程序的了解。学习子程序设计、编写及调试方法。二、实验内容与步骤1、预习教材中与子程序设计相关的内容。2、利用EDIT或者QE编写扩展名为.ASM的源程序:已知3个8位无符号数X、Y、Z,分别存放于BUF、BUF+1和BUF+2存储单元里,计算2X+5Y+8Z,结果送RES和RES
12、+1单元。利用段内调用实现对子程序的调用访问。3、编译和连接源程序4、运行程序三、实验环境条件个人计算机:40台Win32操作系统MS DOSMASM 6.0及其以上版本的汇编程序及其配套的80X86汇编程序开发环境。四、实验报告要求1、列出源程序(加以注释)。2、说明程序中各部分所用的算法以及上机调试中可能遇到的问题。3、说明源程序的连接、汇编过程4、分析运行结果。五、实验注意事项子程序类型与其调用关系子程序调用中的参数传递六、思考题模块化程序设计思想与子程序设计实验项目六周数: 2 学分:2实验项目:字符处理程序设计 计划学时:2一、实验作用和目的学习字符处理的相关指令,加深对这些指令的理
13、解和运用掌握字符处理程序设计、及调试方法。掌握在程序设计中合理利用字符串的尾符。二、实验内容与步骤(4号宋体加粗)1、预习教材中与字符处理设计相关的内容。2、利用EDIT或者QE编写扩展名为.ASM的源程序: 3、编译和连接源程序4、运行程序三、实验环境条件(4号宋体加粗)个人计算机:40台Win32操作系统MS DOSMASM 6.0及其以上版本的汇编程序及其配套的80X86汇编程序开发环境。四、实验报告要求1、列出源程序(加以注释)。2、说明程序中各部分所用的算法以及上机调试中可能遇到的问题。3、说明源程序的连接、汇编过程4、分析运行结果。五、实验注意事项字符在存储器里的保存办法六、思考题
14、字符的运算以及实现方法实验项目七周数: 2 学分:2实验项目:输入输出程序设计 计划学时:2一、实验作用和目的学习输入、输出的相关指令,加深对输入,输出相关指令的理解。掌握输入、输出程序设计编写及调试的方法。加深对输入、输出端口的理解。二、实验内容与步骤1、预习教材中与输入输出设计相关的内容。2、利用EDIT或者QE编写扩展名为.ASM的源程序,实现读取COMS实时钟,并把读到的时、分和秒保存到相应的变量中。3、汇编和连接源程序4、执行生成的可执行三、实验环境条件(4号宋体加粗)个人计算机:40台Win32操作系统MS DOSMASM 6.0及其以上版本的汇编程序及其配套的80X86汇编程序开
15、发环境。四、实验报告要求1、列出源程序(加以注释)。2、说明程序中各部分所用的算法以及上机调试中可能遇到的问题。3、说明源程序的连接、汇编过程4、分析运行结果。五、实验注意事项CMOS时钟端口的设置以及测试六、思考题端口输入输出的原理。实验项目八周数: 2 学分:2实验项目:中断程序设计 计划学时:2一、实验作用和目的学习中断的原理和设置中断向量,加深对中断处理程序的理解。掌握中断的分类、中断向量的设置。会编程实现简单中断。二、实验内容与步骤1、预习教材中有关中断程序设计的内容。2、利用QE编译源程序:编写一个中断处理程序,在主程序运行的过程中,每隔10s响铃一次,同时在屏幕上显示“The b
16、ell is ring!”3、编译和连接源程序,生成可执行程序4、执行可执行程序。三、实验环境条件个人计算机:40台Win32操作系统MS DOSMASM 6.0及其以上版本的汇编程序及其配套的80X86汇编程序开发环境。四、实验报告要求1、列出源程序(加以注释)。2、说明程序中各部分所用的算法以及上机调试中可能遇到的问题。3、说明源程序的连接、汇编过程4、分析运行结果。五、实验注意事项调用一些常见中断处理程序(例如DOS 功能调用-键盘输入和屏幕显示以及常见的BIOS显屏操作)六、思考题中断程序的调用和普通子程序的调用有什么区别?执笔人:刘玮 2012年11月审定人: 年月 教学单位负责人:
17、 年月第二部分 各实验程序参考清单实验一:汇编语言基本操作实验Data segmentS1 db hello!,$Data endsStack segment para stack Db 64 dup(?)Stack endsCode segment Assume cs: code, ds:dataStart: mov ax, data Mov ds, ax Mov ah, 09h Mov dx,offset s1 Int 21h Mov ah, 4ch Int 21hCode ends Ends start实验二:顺序程序设计Data segmentX dw 200Y dw 100Z dw
18、3000V dw 10000W dw 2 dup(?)Data endsCode segmentassume ds: data, cs: codestart: mov ax, data mov ds, ax mov ax, x imul y mov cx, ax mov bx, dx mov ax, z cwd add cx, ax adc bx, dx sub cx, 540 sbb bx, 0 mov ax, v cwd sub ax, cx sbb dx, bx idiv x mov w, ax mov w+2, dx mov ah, 4ch int 21hcode ends end s
19、tart实验三:分支程序设计Data segment Num db 25 Result db ?Data endsCode segment Assume ds:data,cs:codeStart: Mov ax,data Mov ds,ax Mov al,num Cmp al,0h Jge next Neg alNext: Mov result,al Mov ah,4ch Int 21hCode ends End start实验四:循环程序设计.model small.stack.data Buf dw 13,-4,6,9,8,2,11,-8,-6,-20,30 N=($-buf)/2.cod
20、eStart: mov ax,data Mov ds,ax Mov cx,n Dec cxLoop1: mov dx,cx Mov bx,0Loop2: mov ax,buf(bx) Cmp ax,buf(bx+2) Jge next Xchg ax,buf(bx+2) Mov buf(bx),axNext: add bx,2 Loop loop2 Mov cx,dx Loop loop1 Mov ax,4c00h Int 21h End start 实验五:子程序设计Data segmentBuf db 71h,0a4h,9bhRes db 2 dup(?)Data endsStack se
21、gment para stackstackStack db 100 dup(?)Top equ length stapnStack endsCode segment Assume cs:code,ds:data,ss:stackStart: mov ax,data Mov ds,ax Mov ax, stack Mov ss,ax Mov ax,top Mov sp,ax Mov ax,0 Mov word ptr res,ax Lea bx,buf Mov al,2 Call mull Mov al,5 Call mull Mov al,8 Call mull Mov ah,4ch Int
22、21hMull proc Mul byte ptrbx Add word ptr res,ax Mov ax,0 Inc bxMull endpCode ends End start实验六:字符处理程序设计Data segmentString db abcefghil50xyz,0dhResult db ?Cr equ 0dhData endsCode segment Assume cs:code,ds:data,es:dataStart: push ds Mov ax, 0 Push ax Mov ax, data Mov ds, ax Mov es, ax Lea di, string ;
23、获取串的偏移地址 Mov dl, 0 ;置串长度初值为0 Mov al, cr ;串结束标志alAgain: scasb ;搜索串 Je done ;找到结束标志,停止 Inc dl ;串长度加1 Jmp againDone: lea bx, result Mov bx, dl Mov ah, 4ch Int 21hCode ends End start实验七:输入输出程序设计print proc Push dx ;保护现场 Push ax Out dx,al ;向数据端口输出打印数据 Inc dx ;使dx含状态寄存器端口地址print0:xor cx,cx ;1个超时参数单位表示查询655
24、36次print1:in al,dx ;读取状态信息 Mov ah,al ;保存状态信息 Test al,80h ;测是否忙,d7=0,说明打印机不能接收数据 Jnz print2 ;不忙则转print2 Loop print1 ;继续查询 Dec bl ;超时参数减1 Jnz print0 ;未超时,继续查询 And ah,0f8h ;已超时,去掉状态信息中的无用位 Or ah,1 ;置超时标志 Jmp print3 ;转print3print2:inc dx ;不忙,使dx含状态寄存器端口地址 Mov al,0dh ;准备选通命令 Out dx,al ;选通 Mov al,0ch ;准备复
25、位选通命令 Jmp $+2 Out dx,al ;复位选通命令 And ah,0f8h ;去掉状态信息中的无用位print3:xor ah,48h ;是返回状态信息中的有关位符合要求 pop dx mov al,dl ;恢复al寄存器的值 pop dx retprint end实验八:中断程序设计data segmentcount dw 1mess db the bell is ring!,0dh,0ah,$data endscode segmentassume cs:code,ds:data,es:datamain proc farstart: push ds sub ax,ax push
26、ax mov ax,data mov ds,ax mov al,1ch ;取原中断向量 mov ax,35h int 21h push es ;存原中断向量段址 push bx ;存原中断向量偏移量 push ds mov dx,offset ring ;新偏移量送dx mov ax,seg ring mov ds,ax ;新段址送ds mov al,1ch mov ah,25h int 21h ;写入新的中断向量 pop ds int al,21h ;读取中断屏蔽字 and al,b ;允许定时器中断 out 21h,al sti ;开中断 mov di,2000delay: mov si,
27、3000 ;延时(只适用于主频为60mhz左右的计算机)delay1:dec si jnz delay1 dec di jnz delay1 pop dx ;恢复原中断向量 pop ds mov al,1ch mov ah,25h int 21h retmain endpring proc near push ds ;各工作寄存器内容入栈 push ax push cx push dx mov ax,data mov ds,ax sti dec count ;计秒值 jnz exit mov dx,offset mess mov ah,09h int 21h mov dx,100 ;(8048666为此值100h,p42.4g大约为9fffh,其他机型可调试确定此值) in al,61h and al,ofchsound: xor al,02 out 61h,al ;扬声器发声 mov cx,140h ;(8048666为此值140h,p42.4g大约为9fffh,其他机型可调试确定此值)wait1: loop wait1 延时等待 dec dx jne sound mov count,182exit: cli ;关中断 pop dx pop cx pop ax pop ds iret ;中断返回ring endp code ends end start