《汇编语言程序设计》课程教学大纲学时:32 学分:2理论学时:24 实验学时:8面向专业:电科、电信、通信课程代码:B2700009先开课程:C语言程序设计课程性质:必修执笔人:王艳春审定人:陈龙猛、张金政第一部分:理论教学部分一、说明1、课程的性质、地位和任务本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。
掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。
汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。
因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。
通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。
2、课程教学和教改基本要求课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。
通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。
学习这门课程,应达到以下几个要求:①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧;②具有阅读,分析汇编语言程序的能力;③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行过程及debug工具的调试手段。
课堂授课采用多媒体教学,采用由浅入深、循序渐进学习步骤,主要讲解设计思想、实现技巧,通过提问题引导学生思考,提高学生的学习兴趣,从而加深学生对理论课的理解,提高学生的动手能力。
二、教学内容与课时分配第一章基础知识(2学时)1.1 机器语言及汇编语言的产生1.2 汇编语言的组成1.3 存储器1.4 指令和数据1.5 存储单元及CPU对存储器的读写1.6 三大总线1.7 主板、接口卡及各类存储器芯片1.8 内存地址空间教学的重点与难点:指令和数据在内存或磁盘上没有区别;内存地址空间。
建议教学方法:讲授思考题:1. 1个CPU的寻址能力为8KB,那么它的地址总线宽度是多少?2. 8080、8088、80286、80386的地址总线宽度分别为16根、20根、24根、32根,那么它们的寻址能力分别为多少?3. 8080、8088、80286、80386的数据总线宽度分别为8根、8根、16根、16根,则它们一次可以传送的数据为多少字节?4. 在存储器中,数据和程序以什么形式存放?5. 为什么机器语言和汇编语言没有通用性?第二章寄存器(3学时)2.1 通用寄存器2.2 字在寄存器中的存储2.3 几条汇编指令2.4 物理地址、8086CPU给出物理地址的方法2.5 段的概念及段寄存器2.6 代码段及相关寄存器教学的重点与难点:8086CPU给出物理地址的方法;段的概念。
建议教学方法:讲授思考题:1. 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围是?2. 有一个数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻址到此单元,则SA的最小值和最大值分别是多少?3. 执行下面3条指令,CPU修改几次IP?是在什么时候?最后IP的值是?mov ax, bxsub ax, axjmp ax第三章寄存器(内存访问)(3学时)3.1 内存中字的存储3.2 DS和[address]3.3 字的传送3.4 mov、add、sub指令3.5 数据段3.6 栈、CPU提供的栈机制3.7 栈顶超界问题3.8 push和pop指令3.9 栈段教学的重点与难点:对[address]的理解;栈的概念及其实现。
建议教学方法:讲授思考题:1. 在debug中,用“d 0:0 1f”查看内存,结果如下:0000:0000 70 80 F0 30 EF 60 30 E2 00 80 80 12 66 20 22 600000:0010 62 26 E6 D6 CC 2E 3C AB BA 00 00 26 06 66 88下面程序执行前,ax=0,bx=0,写出每条指令执行完后相应寄存器中的值。
mov ax, 1mov ds, axmov ax, [0000] ax=_______mov bx, [0001] bx=_______mov ax, bx ax=_______mov ax, [0000] ax=_______mov bx, [0002] bx=_______add ax, bx ax=_______add ax, [0004] ax=_______mov ax, 0 ax=_______mov al, [0002] ax=_______mov bx, 0 bx=_______mov bl, [000C] bx=_______add al, bl ax=_______2. 补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序复制到20000H-2000FH中。
mov ax, 1000hmov ds, ax_____________________________________________push [0]push [2]push [4]push [6]push [8]push [A]push [C]push [E]3. 补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序复制到20000H-2000FH中。
mov ax, 2000hmov ds, ax_____________________________________________pop [E]pop [C]pop [A]pop [8]pop [6]pop [4]pop [2]pop [0]第四章第一个程序(2学时)4.1 源程序从写出到执行的过程4.2 源程序、编辑源程序、编译、连接4.3 可执行文件的执行4.4 跟踪程序执行教学的重点与难点:编连接程序的正确用法;程序执行过程的跟踪,debug 常用命令建议教学方法:讲授思考题:1. 执行可执行文件时,有一个正在运行的程序将可执行文件加载入内存,这个正在运行的程序是什么?它将程序加载入内存后,如何使程序得以运行?2. 程序运行结束后,返回到哪里?第五章[bx]和loop指令(2学时)5.1 [bx]的含义5.2 loop指令5.3 在debug中跟踪用loop指令实现的循环程序5.4 debug和汇编编译器masm对指令的不同处理5.5 loop和[bx]的联合应用5.6 段前缀及其使用5.7 一段安全的空间教学的重点与难点:理解loop指令的功能,[bx]和loop指令配合使用,编写循环程序。
建议教学方法:讲授思考题:1. 计算ffffh:0000h~ffffh:000bh单元中的数据的和,结果存放在dx中。
第六章包含多个段的程序(1学时)6.1 在代码段中使用数据6.2 在代码段中使用栈6.3 将数据、代码、栈放入不同的段教学的重点与难点:理解程序各个段在内存中的存放。
建议教学方法:讲授思考题:1. 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序。
assume cs: codesgcodesg segmentdw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h start: mov ax, 0mov ds, axmov bx, 0mov cx, 8s: mov ax, [bx]______________add bx, 2loop smov ax, 4c00hint 21hcodesg endsend start2. 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行,栈空间设置在程序内。
完成程序。
assume cs: codesgcodesg segmentdw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987hdw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0start: mov ax, _______mov ss, axmov sp, _______mov ax, 0mov ds, axmov bx, 0mov cx, 8s: push [bx]______________add bx, 2loop smov ax, 4c00hint 21hcodesg endsend start第七章更灵活的定位内存地址的方法(1学时)7.1大小写转换问题7.2用[bx+idata]的方式处理数组7.3 [bx+si]和[bx+di]7.4 [bx+si+idata]和[bx+di+idata]7.5 不同寻址方式的灵活应用教学的重点与难点:理解和掌握各种寻址方式建议教学方法:讲授思考题:1. 用si和di实现将字符串‘welcome to masm!’复制到他后面的数据区中。
assume cs:codesg, ds:datasgdatasg segmentdb ‘welcome to masm!’db ‘’datasg ends2. 将datasg段中每个单词的前4个字母改为大写字母。
datasg段定义如下:datasg segmentdb ‘1. display ’db ‘2. brows ’db ‘3. replace ’db ‘4. modify ’datasg ends第八章数据处理的两个基本问题(2学时)8.1 bx、si、di和bp8.2 寻址方式8.3 指令处理的数据长度8.4 寻址方式综合应用8.5 div指令、伪指令dd、dup教学的重点与难点:理解寻址方式和数据长度的表达;灵活应用各种寻址方式。
建议教学方法:讲授思考题:1. 指出指令错误的原因mov ax, [bx+bp]mov ax, [si+di]mov ax, almov bl, cx2. 用div计算data段中第一个数据除以第二个数据后的结果,商存在第三个数据的存储单元中。
data segmentdd 100001dw 100dw 0data ends第九章转移指令的原理(2学时)9.1 操作符offset9.2 jmp指令9.3 根据位移进行转移的jmp9.4 转移的目的地址在指令中的jmp9.5 转移地址在寄存器中的jmp9.6 转移地址在内存中的jmp9.7 jcxz指令、loop指令9.8 根据位移转移的意义9.9 编译器对转移超界的检测教学的重点与难点:理解jmp指令,掌握各种转移方法建议教学方法:讲授思考题:1. 若要使下面程序中的jmp指令执行后,cs:ip指向程序的第一条指令,在data段中应如何定义数据?assume cs:codedata segment?data endscode segmentatart: mov ax, datamov ds, axmov bx, 0jmp word ptr [bx+1]code endsend start2. 补全编码,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。