当前位置: 首页 > news >正文

微机——8086微处理器的数据传送指令

目录

数据传送指令:

通用数据传送指令:

MOV指令:

堆栈操作指令:

PUSH指令:

POP指令:

交换指令XCHG:

XCHG指令:

换码指令XLAT:

换码指令XLAT:


8086 CPU指令系统,按功能可以分为6类: 

数据传送指令算术运算指令逻辑指令串处理指令控制转移指令处理器控制指令


数据传送指令:

80864种数据传送指令,用于实现寄存器之间存储器与寄存器累加器AXALI/O端口立即数到寄存器或到存储器字节的传送。


通用数据传送指令:

MOV指令:

功能:把一个字节或一个字从源操作数PORD2送至目的操作数OPRD1,源操作数不改变。

格式:  MOV       OPRD1(目的),OPRD2(源)

(1) CSIP两个寄存器不能作为目的操作数,也就是CSIP不能用MOV指令来修改。

CS和IP进行的是程序运行的定位,只有需要对于程序运行过程进行改变时 ,才可以用特定的指令改变程序运行位置

(2) 当采用BXDISI来间接寻址时,默认的段寄存器为DS;当用BP来寻址时默认的段寄存器为SS

(3)所有MOV指令都不影响标志位

(4)不能用上述命令来实现存储单元之间、立即数至段寄存器及段寄存器之间的传送。

(5)源和目的操作数的类型要一致,即同时为字节或同时为字

正确用法:

  • 数据传输
    • 立即数→寄存器:能将常数传进通用寄存器,例如 “MOV AX, 100”。
    • 寄存器→寄存器:同长度寄存器间传数据 ,像 “MOV CX, BX”。
    • 存储器→寄存器:从内存取数据到寄存器,比如 “MOV AL, [SI]” 。
    • 寄存器 / 立即数→存储器:把数据存进内存单元,如 “MOV [1000H], AX”“MOV [2000H], 05H ”。
  • 涉及段寄存器:通用寄存器内容可传至段寄存器,如 “MOV DS, AX” ,但不能直接用立即数给段寄存器赋值
  • 寻址方式搭配
    • 直接寻址:按给定内存地址操作,“MOV AX, [2000H]”。
    • 间接寻址:借助 BX、BP、SI、DI 寄存器找内存地址,“MOV AX, [BX]” 。
    • 相对寻址、基址变址、相对基址变址寻址:利用寄存器加位移量精准定位内存,如 “MOV AX, [BX + 10H]”“MOV AX, [BX+SI]”“MOV AX, [BX+SI+20H]” 。

堆栈操作指令:

PUSH、POP指令:

格式:PUSH   Src

           POP  Dst

功能:压入堆栈指令PUSH是将16位的源操作数压入堆栈;弹出堆栈指令POP是从栈顶单元弹出16位的源操作数到目标地址。

8086的堆栈操作是按字操作的。每执行一条PUSH指令,先将堆栈指针SP自动减2,然后将16()操作数压入栈顶单元。其8位数据存低字节地址单元8位数据存高字节地址单元。执行弹出POP指令时,操作正好相反先弹出一个字数据至目标地址,再修正堆栈指针,SP自动加2

若子程序开始有如下保护现场指令:

        PUSH   AX

        PUSH   DS

                子程序

则子程序返回前,应按如下顺序恢复现场:

        POP   DS

        POP   AX

8086规定,凡是遇到给SS寄存器赋值的传送指令时系统会自动禁止外部中断,等到本条指令和下条指令被执行后,才恢复对SSSP寄存器赋值前的中断开放情况。这样做是为了允许程序连续用两条指令分别对SSSP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。故应用时应注意在修改SSSP指令之间不要插入其他指令。

PUSH指令:

POP指令:


交换指令XCHG:

XCHG指令:

格式:XCHG    OPRD1,OPRD2

功能:操作数OPRD1的内容与操作数OPRD2的内容交换

OPRD1OPRD2可以是通用寄存器存储单元两个操作数不能同时为存储单元)可以采用除立即数以外的各种寻址方式


换码指令XLAT:

换码指令XLAT:

格式:   XLAT

功能:用来将一种字节代码转换成另一种字节代码。它将BX的内容(代码表格首地址)AL的内容(表格偏移量)相加作为有效地址,并从中取出此地址单元中的内容送到AL中。完成一个字节的查表转换。把累加器AL中的(被查)值,转换成以BX为表基址的表中值

XLAT指令可用来将一个代码值转换成相应的另一种代码值。应用时,首先应列出两种代码的表格。

  • XLAT 指令执行前,要先将表格的首地址存到DS:BX寄存器对里。同时,把需要转换的代码相对表格首地址的偏移量(也就是索引值)存放在AL寄存器。
  • 当执行 XLAT 指令时,处理器会把AL中的偏移量和DS:BX组合,计算出实际物理地址,然后从该地址处取出一个字节数据,再将这个数据送回AL寄存器,以此替换掉原来的偏移量,完成代码转换。例如,若有一张 ASCII 码值转换表,存放着字符对应的扩展 ASCII 码,已知字符对应的序号在AL,利用 XLAT 就能快速得到对应的扩展码。

例如:要将十进制数09转换成共阳极LED显示的字形代码,则列表如所示。

http://www.lryc.cn/news/516587.html

相关文章:

  • vue3中onUpdated钩子函数和nextTick的具体使用场景和区别
  • colnames看似简单,却能优化数据处理流程
  • 欧几里得距离在权重矩阵中的物理意义
  • AI编程辅助开发网站
  • 「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用
  • 基于单片机洗衣机控制器的设计(论文+源码)
  • 【Git系列】解析与解决Git错误:RPC失败;curl 56 OpenSSL SSL_read: error:140943FC
  • [Unity Shader] 【游戏开发】Unity基础光照1-光照模型原理
  • 基于Python 的宠物管理系统(源码+部署)
  • console.log封装
  • 戴尔/Dell 电脑按什么快捷键可以进入 Bios 设置界面?
  • GitLab创建用户,设置访问SSH Key
  • Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)
  • 比较 FreeSWITCH 的 asr 事件和回调函数
  • 基于ffmpeg和sdl2的简单视频播放器制作
  • 卫星导航信号的形成及解算
  • 硬件-射频-PCB-常见天线分类-ESP32实例
  • salesforce 验证规则判断一个picklist是否为none
  • 解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南
  • 如何分析 Nginx 日志
  • Kubernetes Gateway API-5-后端协议和网关基础设置标签
  • 大数据架构演变
  • Bash语言的软件工程
  • OpenGL —— 流媒体播放器 - ffmpeg解码rtsp流,opengl渲染yuv视频(附源码,glfw+glad)
  • CE中注册的符号地址如何通过编程获取
  • Math Reference Notes: 积分因子
  • 解决7-Zip图标更换问题
  • Java 性能监控工具详解:JConsole、VisualVM 和 Java Mission Control
  • 浏览器报错:您的连接不是私密连接,Kubernetes Dashboard无法打开
  • 用Python进行大数据处理:如何使用pandas和dask处理海量数据