8086CPU 指令系统之 数据传送指令(重难点)

前言:公号 「编程有料」后台回复 “大礼包” 即可获取近1000本助力你编程之路的电子书

指令构成的基本原则

  • 源、目的操作数的字长一致
    MOV AL,BX ;错误
  • 源、目的操作数不能同为内存单元
    MOV[SI],[DI] ;错误
  • 立即数不能作目的操作数
    MOV 12H,AL ;错误

数据传送指令(重点)

  • 实现在寄存器、存储器及IO端口之间传送数据
  • 除标志传送指令外,指令执行结果都不影响标志寄存器

常见的传送指令:

1,MOV 指令

在这里插入图片描述

MOV指令注意事项:

  • 立即数不能直接送段寄存器
  • d、s不同为段寄存器
1∶编写指令序列把内存单元1000H:2000H开始的一个字送给BX。

MOV AX,1000H
MOV DS,AX
MOV BX,[2000H]2:编写指令序列把12H送给内存单元300H:200H。
MOV BX,300H
MOV DS,BX
MOV BYTE PTR [200H],12H


2,XCHG 指令

格式:XCHG d,s

说明:交换s 和 d 的内容,s 和d 的内容都变化

在这里插入图片描述

XCHG指令注意事项:

  • ①不允许使用立即数
  • ②不允许使用段寄存器

3,堆栈操作指令PUSH 和POP

  • 堆栈是存储器中的特定区域。
  • 堆栈存取规则:后进先出(LIFO或FILO)。
  • 在堆栈中始终有一个栈顶单元,该单元的地址为SS:SP。
  • 堆栈操作类型:压入和弹出,均以字为单位进行。
  • 不管压入还是弹出总是对栈顶进行操作,且栈顶指针SP会自动修改以保持始终指向新的栈顶。

堆栈操作指令注意事项:

  • ①不允许使用立即数
  • ②必须以字为单位

4,查表转换指令XLAT

格式:XLAT

功能:AL←DS:[BX+AL]

说明:将数据段中首单元偏移地址在BX,顺序号在AL的表的内容取出送AL。

根据下表:

在这里插入图片描述

现若要得到数字7 的显示代码,执行如下指令:

MOV BX,1000H
MOB AL,7
XLAT

差不多我们也可以得出这样的结论:XLAT指令相当于在一个字节数组中寻找某个元素:

  • ①数组的首地址→BX
  • ②数组元素的下标→AL
  • ③寻找到的数组元素放在AL中

5,取有效地址的指令

格式:LEA reg16,mem

功能:reg16←memEA

说明:将mem指定的存储器操作数的有效地址取至16位的通用寄存器reg16中。

指令分析:

LEAAX,[2012H]	;相当于 MOV AX,2012H
LEA SI,[BX]	;相当于	MOV SI,BX

LEA指令注意事项:

  • ①源操作数必须为存储器寻址方式
  • ②目的操作数是16位通用寄存器,不能是段寄存器

6,端口输入指令 IN

格式:IN AL,port8

功能:从I/O端口中读取一个或两个字节到CPU内的AL或AX寄存器。

说明:端口操作数用该端口的地址表示。

指令分析:

IN AL,20H	;AL←(20H)

7,端口输出指令OUT

格式:OUT port8,AL

功能:向I/O端口中输出一个或两个字节。

说明:端口操作数用该端口的地址表示。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阔升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值