
本章主要介绍了微型计算机指令系统中的寻址方式,各类指令格式,应用DEBUG调试简单的应用程序,通过对常见指令的分析和学习,能熟悉利用DEBUG调试程序上机,编写程序段和运行该程序段,查看标志的变化,存储器和各寄存器的内容变化,进而理解微处理器的工作原理和工作过程。
一、重点提示
本章的重点是理解每种寻址方式的操作数所在的位置,不同指令使用的操作数形式的差异,对堆栈操作指令的理解以及堆栈的操作过程,能够判断一条指令的寻址方式,典型指令的实际应用。
数据的寻址方式:
1.立即寻址
操作数直接在指令中给出。例:MOV AL,50
2.寄存器寻址
指令的操作码是一个寄存器,操作数在这个寄存器中。例:ADD AX,BX,将AX中的内容和BX中的内容相加后,结果送AX。
3.直接寻址
操作数在存储器中的地址在指令中直接给出。例:ADD AX,-I000H],将存储单元1000H中的内容和AX中的内容相加后,结果送AX。
4.寄存器间接寻址
操作数的地址在寄存器中,其寄存器在指令中给出。例:MOV AX,[SI],将寄存器SI中的内容作为访问存储器的某个单元的地址,然后取出地址中的操作数送入AX。
5.变址寻址
是由指令提供基地址、变址寄存器提供偏移爨,此寻址方式面向用户,常用于访问字符串、向量数据结构和循环程序设计。
6.基址寻址
是由基址寄存器提供基准地址、指令提供偏移量;此寻址方式面向系统,由逻辑地址空间到物理地址空间的变换提供支持,用以解决程序在存储器中再定位和扩大寻址空间。等问题。
7.基址一变址寻址
操作数的地址是程序计数器PC的值加上偏移量形成的,这个偏移量在指令中给出。是一种特殊的变址寻址方式,偏移量用补码表示,可正可负。相对寻址可用较短的地址码访问内存。
二、难点提示
1.操作码和操作数的实质
2.寻址方式的判断
3.指令的执行过程
4.堆栈操作的过程
5.指令执行结果的分析

1.寻址方式
(1)指令格式
(2)立即数寻址
(3)寄存器操作数寻址
(4)存储器操作数寻址:直接寻址,寄存器寻址,变址寻址,基址-变址寻址
2.8088/8086指令系统
(1)数据传送指令
(2)算术运算指令
(3)逻辑运算指令和移位指令
(4)串操作指令
(5)控制转移指令
(6)位处理器控制指令
3.DEBUG调试程序的简单应用
表2-1数据传送指令
助记符 | 功能 | |
通用数据传送指令 | MOV | 传送字节或字 |
PUSH | 字人栈 | |
POP | 字出栈 | |
XCHG | 交换字节或字 | |
XLAT | 字节转换 | |
地址目标传送指令 | LEA | 装入有效地址 |
LDS | 将指针变量装入寄存器及DS | |
LES | 将指针变量装入寄存器及ES | |
标志传送指令 | LAHF | 标志寄存器低字节送AH |
SAHF | AH值送标志寄存器低字节 | |
PUSHF | 标志寄存器内容进栈 | |
POPF | 标志寄存器内容出栈 | |
I/O指令 | IN | 输入字节或字 |
OUT | 输出字节或字 | |
表2-2算术运算指令
助记符 | 功能 | |||
加法指令 | ADD | 加法 | ||
ADC | 带进位的加法 | |||
INC | 增量(加1) | |||
AAA | 加法的ASCII修正 | |||
DAA | 加法的十进制修正 | |||
减法指令 | SUB | 减法 | ||
SBB | 带借位的减法、 | |||
DEC | 减量(减1) | |||
NEG | 求补(变负) | |||
CMP | 比较 | |||
AAS | 减法的ASCII修正 | |||
DAS | 减法的十进制修正 | |||
乘法指令 | MUL | 无符号数乘法 | ||
IMUI。 | 整数乘法 | |||
AAM | 乘法的ASCII修正 | |||
除法指令 | DIV | 无符号数除法 | ||
IDIV | 整数除法 | |||
AAD | 除法的ASCII修正 | |||
转 换 | CBW | 字节转换为字 | ||
CWD | 字转换为双字 | |||
表2-3位处理指令
助记符 | 功能 | |
逻辑运算符 | AND | 逻辑“与” |
0R | 逻辑“或” | |
NOT | 逻辑“非” | |
XOR | 逻辑“异或” | |
TEST | 测试 | |
移位指令 | SHL | 逻辑左移 |
SAL | 算术左移 | |
SHR | 逻辑右移 | |
SAR | 算术右移 | |
循环移位指令 | ROL | 循环左移 |
ROR | 循环右移 | |
RCL | 通过CF循环左移 | |
RCR | 通过CF循环右移 | |
表2-4 串操作指令
助记符 | 功 能 | |
串操作指令 | MOVS( MOVSB, MOVSW) | 串传送(字节传送,字传送) |
CMPS(CMPSB, CMPSW) | 串比较(字节比较,字比较) | |
STOS(STOSB, STOSW) | 存入串(存入字节,存入字) | |
LODS(LODSB, LODSW) | 取出串(取出字节,取出字) | |
SCAS (SCASB, SCASW) | 扫描串(扫描字节,扫描字) | |
重复前缀 | REP | 重复操作 |
REPE/REPZ | 等于/为零重复 | |
REPNE/REPNZ | 不等于/不为零重复 | |
表2-5程序转移指令
助记符 | 功能 | |||
无条件转移指令 | CALL | 调用过程(子过程) | ||
RET | 从过程(子过程)返回 | |||
JMP | 无条件转移 | |||
条件转移指令 | JA/JNBE | 高于/不低于等于,转移 | ||
JAE/JNB | 高于等于/不低于,转移 | |||
JB/JNAE | 低于/不高于等于,转移 | |||
JBE/JNA | 低于等于/不高于,转移 | |||
JC | 有进位(借位),转移 | |||
JE/JZ | 等于/为零,转移 | |||
JG/JNLE | 大于/不小于等于,转移 | |||
JGE/JNL | 大于等于/不小于,转移 | |||
JL/JNGE | 小于/不大于等于,转移 | |||
JLE/JNG | 小于等于/不大于,转移 | |||
JNC | 无进位(借位),转移 | |||
JNE/JNZ | 不等于/不为零,转移 | |||
JNO | 不溢出,转移 | |||
JNP/JPO | PF为“0"/奇状态,转移 | |||
JNS | SF为“O”,转移 | |||
J0 | 溢出,转移 | |||
JP/JPE | PF为“1”/偶状态,转移. | |||
JS | SF为“1”,转移 | |||
JCXZ | 寄存器CX=O,转移 | |||
重复控制指令 | LOOP | 循环 | ||
LOOPE/LOOPZ | 等于/为零,循环 | |||
LOOPNE/LOOPNZ | 不等于/不为零,循环 | |||
中断指令 | INT | 中断 | ||
INT3 | 断点中断 | |||
INTO | 溢出中断 | |||
IRET | 中断返回 | |||
表2-6处理器控制指令
助记符 | 功能 | |
标志位操作 | STC | 进位标志置1 |
CLC | 进位标志置O | |
CMC | 进位标志取反 | |
STD | 方向标志置1 | |
CLD | 方向标志置O | |
STI | 中断允许标志置1 | |
CLI | 中断允许标志置O | |
外同步 | HLT | 暂停直至中断或复位 |
WAIT | 等待TEST信号有效 | |
ESC | 交权给外部处理机 | |
LOCK | 在下一条指令期间封锁总线 | |
空操作 | NOP | 空操作 |
表2-7串操作指令中寄存器和标志位的用途
寄存器/标志 | 用途 |
SI | 源字符串的变址值(偏移量) |
DI | 目的字符串的变址值(偏移量> |
DS | 源字符串的段基值 |
ES | 目的字符串的段基值 |
CX | 重复次数计数器 |
AL/AX | SCAS指令的扫描值 |
LODS指令的目的操作数 | |
STOS指令的源操作数 | |
ZF | 扫描/比较结束标志 |
DF | DF=O.SI,DI自动增量 |
DF=1.SI,DI自动减量 |