8086指令系统(一) 通用数据传送指令

书读的越多而不加思考,你就会觉得你知道得很多;而当你读书而思考得越多的时候,你就会越清楚地看到,你知道得很少。

导读:本篇文章讲解 8086指令系统(一) 通用数据传送指令,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

通用数据传送指令

指令 作用
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. 取偏移地址的指令或运算符

  1. 取当前逻辑段偏移地址

LEA REG, MEM

功能:
  将当前逻辑段中的变量(内存单元的符号地址, 存储器操作数)的16位偏移地址写入通用寄存器(最好选择间址寄存器)

  1. 取段偏移地址运算符

OFFSET

MOV REG, OFFSET MEM

功能:
  与 LEA REG, MEM 等价

  1. 取段地址的运算符

MOV REG, SEG SEGMENT

功能:
  将段的16位地址存入REG中

  1. 远地址传送指令

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寄存器中

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/122853.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!