《汇编语言程序设计》 教学大纲

一、汇编语言基础知识(6学时)

1.1 计算机系统概述 (1)
 1.1.1 计算机硬件
 1.1.2 计算机软件
 1.1.3 计算机的程序设计语言
1.2 计算机数据表示 (2)
 1.2.1 数制
    二进制
    十六进制
    二进制、十六进制之间的转换
    二进制、十六进制转换为十进制
    十进制转换成二进制、十六进制
 1.2.2 编码 (3)
    BCD码
    ASCII码
    汉字编码
 1.2.3 有符号数的表示法
    原码
    反码
    补码
 1.2.4 二进制运算
    算术运算
    逻辑运算
1.3 Intel 80x86系列微处理器 (4)
  Intel x86系列CPU的发展过程
  8086基本情况
  80286
  80386
  80486
  Pentium
  PentiumMMX
  Pentium II
  Celeron(赛扬)
  Pentium III
1.4 IBM系列微型计算机系统 (5)
  PC 机硬件
  PC机存储器
  DOS下的汇编语言软件
  DOS下的汇编语言文件
  将一个Hello World程序用EDIT录入,编译,连接并执行。 (6)
  用DEBUG列出8086寄存器,试用其他DEBUG命令。

二、8086指令系统(17学时)

2.1 8086寄存器组 (1)
 2.1.1 8086的通用寄存器
    数据寄存器
    指针寄存器SP, BP
    变址寄存器SI, DI
 2.1.2 标志寄存器
    例题:加法运算对标志的影响
    例题:减法运算对标志的影响
 2.1.3 存储器组织与段寄存器 (2)
    存储器
    存储器的分段
2.2 8086的寻址方式 (3)
 2.2.1 8086的机器代码格式
 2.2.2 立即数寻址
 2.2.3 寄存器寻址
 2.2.4 存储器寻址
    直接寻址
    寄存器间接寻址
    寄存器相对寻址
    基址变址寻址
    相对基址变址寻址
 2.2.5 指令操作数的符号说明 (4)
    通用符号
    指令功能的符号描述
    8086 CPU指令的分类
2.3 数据传送类指令
 2.3.1 通用数据传送指令
    MOV
    例题:容易出错的指令
    XCHG (5)
    XLAT
 2.3.2 堆栈操作指令
    PUSH / POP
 2.3.3 标志传送指令
    LAHF / SAHF
    PUSHF / POPF
 2.3.4 地址传送指令
    LEA
    LDS , LES
 2.3.5 输入/输出指令
    IN, OUT
    例题:通过I/O指令控制PC机扬声器发声
2.4 算术运算类指令 (6)
  汇编语言中的数
  8086指令可以进行的运算
 2.4.1 二进制加 / 减指令
    指令格式
    ADD, ADC, SUB, SBB, CMP
    操作数
    数据类型
    加减指令影响标志
 2.4.2 单目标运算指令
    INC, DEC, NEG
    例题:单目标指令的运算结果及对标志位的影响
 2.4.3 乘指令 (7)
    MUL - 无符号乘
    IMUL - 有符号乘
 2.4.4 除指令
    DIV - 无符号除
    IDIV - 有符号除
 2.4.5 符号扩展指令
    CBW, CWD
    例题:乘除指令练习 (8)
    2.4.6 十进制调整指令
    压缩BCD码
    DAA, DAS
    非压缩BCD码
    AAA, AAS, AAM, AAD
    用DEBUG程序验证程序非压缩BCD除。 (9)
2.5 位操作类指令 (10)
 2.5.1 逻辑运算指令
    求反指令NOT
    与、或和异或指令
    AND, OR, XOR, TEST
 2.5.2 位移指令
    SHL, SHR, SAL, SAR, ROL, ROR, RCL, RCR
    例题:位运算练习 (11)
    对标志位的影响
    例题:位操作综合练习
2.6 串操作类指令 (12)
    MOVS - 串传送指令
    STOS - 串读取指令
    LODS - 串存储指令
    CMPS - 串比较指令
    SCAS - 串扫描指令
    REP, REPZ, REPNZ - 重复前缀指令
2.7 控制转移类指令 (13)
 2.7.1 无条件转移指令
    JMP
    段内与段间转移
    直接与间接转移
 2.7.2 条件转移指令
    Jcc
    判断单个标志位
    用于无符号数比较
    用于有符号数比较
    例题:条件转移练习
    JCXZ
 2.7.3 循环指令 (14)
    无条件循环指令
    LOOP
    条件循环指令
    LOOPZ, LOOPNZ, JCXZ
    例题:循环指令练习
 2.7.4 子程序指令 (15)
    子程序调用指令
    CALL
    RET
 2.7.5 中断指令 (16)
    8086中断类型
    8086的中断过程
    INT, IRET, INTO
 2.7.6 系统功能调用
    单个字符输出
    字符串输出
    单个字符输入
    字符串输入
    系统功能调用--简单的功能调用举例。 (17)
2.8 处理机控制类指令
 2.8.1 标志位操作指令
    CLC, STC, CMC
    CLD, STD
    CLI, STI
 2.8.2 CPU控制指令
    NOP
    段前缀 CS:, ES:, DS:, SS:
    LOCK, HLT, ESC, WAIT
    综合练习


三、汇编语言程序格式(8学时)

3.1 汇编语言的开发过程 (1)
 3.1.1 汇编语言程序的两种格式
    语句格式
    简化和完整的段定义初步
3.1.2 宏汇编程序MASM的安装
   开发环境和开发过程
   EDIT, MASM, LINK, DEBUG
   MASM 6.0的集成开发平台。
   MASM 6.0的安装
3.1.3 汇编程序的命令行开发过程
   MASM 6.0的命令行操作方式
3.1.4 汇编程序的集成开发过程 (2)
   MASM 6.0的集成开发平台操作方式
3.2 参数、变量和标号 (3)
3.2.1 数值型参数
   常数
   数值表达式
3.2.2 变量定义伪指令 (4)
   变量定义伪指令
   DB, DW, DD 等,变量属性
   重复前缀
   标号的定义和属性
   定位伪指令
3.2.3 变量和标号的属性
   用于地址的操作符
   用于类型的操作符
3.3 程序段的定义和属性 (5)
 3.3.1 DOS的程序结构
   EXE程序
   COM程序
 3.3.2 简化段定义的格式
   存储模式伪指令
   段定义伪指令
   程序开始伪指令
   程序终止伪指令
   汇编结束伪指令
 3.3.3 完整段定义的格式 (6)
   完整段定义伪指令
   指定段寄存器伪指令
   段组伪指令
3.4 复杂数据结构 (7)
 3.4.1 结构
   结构类型的说明
   结构变量的定义
   结构变量及其字段的引用
   段、变量和结构的练习
 3.4.2 记录 (8)
   记录类型的说明
   记录变量的定义
   记录变量的引用和记录操作符

四、汇编语言程序设计(11学时)

4.1 顺序程序设计 (1)
  例题:顺序程序练习
4.2 分支程序设计
 4.2.1 利用转移指令实现分支
   单分支程序
   双分支程序
   例题:分支程序练习 (2)
 4.2.2 利用条件控制伪指令实现分支
   用条件伪指令实现分支.IF, .ELSE, .ENDIF (3)
   IF伪指令的表达式
   例题:条件伪指令练习
4.3 循环程序设计 (4)
 4.3.1 利用循环指令和转移指令实现循环
   循环指令: LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ
   例题:冒泡法排序程序
   转移指令: JCXZ、Jxx
 4.3.2 利用循环伪指令实现循环 (5)
   WHILE循环
   UNTIL循环
   循环伪指令: .WHILE, .REPEAT, .UNTIL, .BREAK, .CONTINUE
4.4 子程序设计 (6)
 4.4.1 过程定义伪指令
   过程定义伪指令
   调用和返回指令: CALL, RET
   例题:用过程冒泡法排序程序
 4.4.2 过程的参数传递 (7)
   通过寄存器传送参数
   通过存储器传送参数
   通过堆栈传送参数
 4.4.3 子程序的嵌套、递归与重入 (8)
   嵌套
   利用循环嵌套构成的程序
   递归 (9)
   例题:递归程序例
4.5 宏结构程序设计 (10)
 4.5.1 宏汇编
   宏的定义和调用
   宏的参数
   与宏有关的伪指令
   宏与子程序
 4.5.2 重复汇编
   按参数值重复伪指令
   按参数个数重复伪指令
 4.5.3 条件汇编
   IFxx [ELSE] ENDIF
4.6 模块化程序设计 (11)
   模块化程序开发的要点
   多个模块的程序例


五、32位指令及其编程(6学时)


5.1 32位指令运行环境 (1)
5.1.1 32位寄存器组
   通用寄存器和指针寄存器
   段寄存器
   标志寄存器
5.1.2 寻址方式
   16位寻址方式
   32位寻址方式
5.2 32位扩展指令 (2)
   符号说明
5.2.1 数据传送类指令
   32位传送指令 MOV
   32位交换指令XCHG
   32位入栈指令PUSH、出栈指令POP
   32位地址传送指令LEA和LDS, LES, LFS, LGS, LSS (3)
   例题:32位传送指令练习
   32位传送指令练习
5.2.2 算术运算类指令 (4)
   32位加减指令
   32位乘除指令
   新增加符号扩展指令
5.2.3 位操作类指令
   32位逻辑指令
   32位位移指令
5.2.4 串操作类指令 (5)
   基本串操作指令扩展
   例题:32位串操作指令
   例题:32位指令综合练习 (6)