8086指令系统 通用数据传送指令
Posted _DiMinisH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8086指令系统 通用数据传送指令相关的知识,希望对你有一定的参考价值。
通用数据传送指令
指令 | 作用 |
---|---|
MOV dest,src | src -> dest |
PUSH src(16位) | src 内容入栈 |
POP dest(16位) | 栈顶2个单元内容复制到dest中 |
XCHG dest,src | 交换 dest 和 src 中的数据 |
XLAT | 表的首地址(偏移地址)放到 BX , 将要查找的元素序号放到 AL 中, 执行XLAT指令后, 表中相应序号的元素被存入 AL 中 |
LEA REG, 符号变量 | 将符号变量所对应的内存偏移地址复制到 REG 中 |
MOV REG, OFFSET 符号变量 | LEA REG, 符号变量 |
MOV REG, SEG 符号变量 | 将SEGMENT的段地址复制到REG |
LDS REG, SEGMENT:[偏移地址] | 指定段的偏移地址位置的两个单元内容复制到REG,+2两个单元的内容复制到DS |
LES REG, SEGMENT:[偏移地址] | 指定段的偏移地址位置的两个单元内容复制到REG,+2两个单元的内容复制到ES |
CBW | AL数据的最高位扩展到AH |
CDW | AX数据的最高位扩展到DX |
PUSHF | 将FLAGS寄存器中的内容入栈 |
POPF | 将栈顶的内容(栈顶两个单元的内容)复制到FLAGS寄存器中 |
LAHF | 将FLAGS寄存器的低8位内容复制到AH寄存器中 |
SLAHF | 将AH寄存器的内容复制到FLAGS寄存器中 |
1. MOV指令
MOV 目标操作数, 源操作数
功能:
将一个操作数从源地址复制到目标地址。
注意:
(1). 两个操作数必须是相等字长的;
(2). 两个操作数不能同时是存储器操作数, 既不能实现内存中的单元复制到另一块内存中的单元;
(3). 两个操作数不能同时是段寄存器;
(4). 指令指针存储器IP 和 代码段寄存器CS 不能作为目标操作数;
(5). 寄存器FLAGS不能作为操作数;
(6). 源操作数是立即数, 目标操作数不能是段寄存器。
2. 入栈指令
堆栈:
堆栈是内存中一个特定的区域, 用于存放寄存器或存储器中暂时不用又必须保存的数据, 在内存中, 堆栈所处的段叫堆栈段, 其段地址在SS寄存器中。对堆栈的操作满足先进先出。
堆栈的作用:
交换两个数、签到计数器 等
入栈指令
PUSH 存储器操作数/寄存器
功能:
将内存中的数据或寄存器中的数据放入堆栈。
注意:
(1). 堆栈入栈以字节为单位, 每次2字节, 存储器必须是16位的;
(2). 在堆栈中存放数据, 从高地址向低地址存放;
(2). 堆栈段的内存由SS决定, 寄存器SP中存放着栈顶的偏移地址。
执行 PUSH AX 指令 步骤:
① SP = SP -2
② 将数据拷贝到栈中
高8位复制到 SP + 1
低8位复制到 SP
3. 出栈指令
出栈指令
POP 存储器操作数/寄存器
功能:
将当前栈顶元素数据复制到内存中或寄存器中。
注意:
出栈时, 寄存器不能为CS
执行 POP AX 指令 步骤:
① 将数据拷贝到栈中
SP 数据复制到 低八位
SP + 1 数据复制到 高8位复制到 SP
② SP = SP + 2
4. 交换指令
XCHG 目标操作数, 源操作数
注意:
(1). 两个操作数不能同时为存储器操作数
(2). 两个操作数不能是段寄存器
(3). 两个操作数字长必须相同
4. 查找表指令
XLAT
功能:
根据查找表中的元素序号找出相应的元素
使用:
将查找表写好放到内存中, 将表的首地址(偏移地址)放到 寄存器BX , 将要查找的元素序号放到 寄存器AL 中(表中第一个元素序号为0), 执行XLAT指令后, 表中相应序号的元素被存入 寄存器AL中。
例子:
LEA SI, TABLE ;将TABLE(查找表)的偏移地址放到SI寄存器中
MOV BX, TABLE
MOV AL, 0
XLAT
此时AL中存放的就是表中序号为0的元素的ASCII码
5. 取偏移地址的指令或运算符
- 取当前逻辑段偏移地址
LEA REG, MEM
功能:
将当前逻辑段中的变量(内存单元的符号地址, 存储器操作数)的16位偏移地址写入通用寄存器(最好选择间址寄存器)
- 取段偏移地址运算符
OFFSET
MOV REG, OFFSET MEM
功能:
与 LEA REG, MEM 等价
- 取段地址的运算符
MOV REG, SEG SEGMENT
功能:
将段的16位地址存入REG中
- 远地址传送指令
LDS REG, SEGMENT:[偏移地址]
功能:
将SEGMENT段的偏移地址位置的两个单元内容复制到REG, 将SEGMENT段的偏移地址 + 2 位置的内容复制到DS
LES REG, SEGMENT:[偏移地址]
功能:
将SEGMENT段的偏移地址位置的两个单元内容复制到REG, 将SEGMENT段的偏移地址 + 2 位置的内容复制到ES
6. 字位扩展指令
对于无符号数, 用零扩展
对于有符号数, 用符号位扩展
CBW
功能:
将寄存器AL数据的最高位扩展到AH
CBD
功能:
将寄存器AX数据的最高位扩展到DX
7. 标志寄存器数据传送指令
PUSHF
功能:
将FLAGS寄存器中的内容入栈。
POPF
功能:
将栈顶的内容(栈顶两个单元的内容)复制到FLAGS寄存器中。
LAHF
功能:
将FLAGS寄存器的低八位内容复制到AH寄存器中
SLAHF
功能:
将AH寄存器的内容复制到FLAGS寄存器中
以上是关于8086指令系统 通用数据传送指令的主要内容,如果未能解决你的问题,请参考以下文章