汇编语言考点整理。
第一章:汇编语言基础知识
常用ASCII表值

逻辑地址与物理地址
每个存储器单元可以用 “端基地址:段内偏移地址” 准确表达物理地址。
将逻辑地址中的段地址左移 4 位,加上偏移地址就得到 20 位物理地址。
8086 规定段地址低 4 位均为0,每段最大不超过 64KB。但是每段并不要求必须是 64KB,各段之间并不要求完全分开。两个逻辑段可以部分重叠甚至完全重叠,但各段内容是不允许发生冲突的。
寻址方式
一. 立即数寻址
操作数直接存放在机器代码中。
1 | mov al, 02h ; 源操作数采用立即数寻址 |
二. 寄存器寻址
操作数存放在 CPU 内部寄存器 REG 中。
1 | mov bx, ax ; 两个操作数均采用寄存器寻址 |
三. 存储器寻址
直接寻址
指令中直接包含有效地址。1
mov ax, [2000h] ; 源操作数 ds:[2000h]
寄存器间接寻址
有效地址存放在寄存器中。1
mov ax, [si] ; 源操作数 ds:[si]
寄存器相对寻址
有效地址是寄存器内容与有符号8位或16位位移量之和。1
2mov ax, [di+06h] ; 源操作数 ds:[di+06h]
mov ax, [bp+06h] ; 源操作数 ss:[bp+06h]基址变址寻址
把一个基址寄存器 (BX/BP) 加上变址寄存器 (SI/DI) 构成有效地址。1
2mov ax, [bx+si] ; 源操作数 ds:[bx+si]
mov ax, [bp+di] ; 源操作数 ss:[bp+di]相对基址变址寻址
把一个基址寄存器 (BX/BP) 加上变址寄存器 (SI/DI) 再加上有符号8位或16位位移量构成有效地址。1
mov ax, [bx+si+06h] ; 源操作数 ds:[bx+si+06h]
下图展示典型的可行指令操作数组合:

第二章:8086 指令系统
指令用法
常用基本指令见:8086指令系统 | 小花生。
关注这几个特殊的指令。
- cbw 与 cwd
1 | cbw ; 字节转换为字(把AL中字节的符号扩展到AH中去) |
- nop
1 | nop ;不执行任何操作,但占用一个字节存储单元,空耗一个指令执行周期 |
- xlat
1 | xlat ; al <- ds:[bx+al] |
- 标志位操作
1 | clc ; CF <- 0 |
常见指令错误
- 两操作数类型不匹配
- 立即数不允许传给段寄存器
- 段寄存器之间不允许传送
- 立即数不允许作目的操作数
- sp寄存器不直接用于访问数据
- cs段寄存器不能赋值
- 堆栈的操作数不能是字节量
- ……
学习每一条指令的时候看清楚适用范围 + 记住哪些寄存器不能直接访问。
指令指针 IP 不是通用寄存器,不可直接赋值,有且仅有循环、转移、子程序调用与返回、中断类指令可以改变它的值。
第三章:汇编语言程序格式
第四章:基本汇编语言程序设计
第五章:高级汇编语言程序设计
宏结构:宏汇编、重复汇编、条件汇编
宏汇编
宏定义:
1 | 宏名 macro [形参表] |
宏调用:宏调用的实质是在汇编过程中进行宏展开
1 | 宏名 [实参表] |
1 | & ; 替换操作符, 用于将参数与其他字符分开。 |
重复汇编
按参数值重复:
1 | repeat 重复次数 |
按参数个数重复:
1 | for 形参, <实参表> |
按参数字符个数重复:
1 | forc 形参, 字符串 |
条件汇编
1 | if ... |
第六章:32 位指令及其编程
16位逻辑段:段地址和偏移地址都是16位:段地址左移4位加偏移地址形成20位物理地址
32位逻辑段:段地址和偏移地址都是32位:段地址加偏移地址形成32位线性地址
32位有效地址=基址寄存器+(变址寄存器 × 比例)+位移量
- 基址寄存器——任何 8 个 32 位通用寄存器之一
- 变址寄存器——除 ESP 之外的任何 32 位通用寄存器之一
- 比例——可以是 1 / 2 / 4 / 8
- 位移量——可以是 8 / 32 位值
第七章:汇编你语言与 C/C++ 的混合编程
有两种混合编程方式:嵌入式汇编、模块连接