微机原理8086/8088——数据传送指令

本文详细介绍了8086/8088微处理器的数据传输指令,包括通用数据传输指令如MOV,堆栈交换指令PUSH和POP,交换指令XCHG,查表转换指令XLAT以及字位扩展指令CBW和CWD。此外,还涉及输入输出指令如IN和OUT,地址传送指令LEA,以及标志传送指令如PUSHF和POPF。这些指令在微机原理中起到关键作用,理解它们对于掌握8086/8088微处理器的工作原理至关重要。
摘要由CSDN通过智能技术生成

微机原理8086/8088概念系列


微机原理8086/8088——微型计算机组成
微机原理8086/8088——微处理器功能结构
微机原理8086/8088——内部寄存器
微机原理8086/8088——指令系统与寻址方式
微机原理8086/8088——数据传送指令

更新ing


前言:

1.通用数据传输指令
2.输入输出指令
3.地址传送指令
4.标志传送指令

(除了标志传送指令,其他指令执行对标志位不产生影响)

一、通用数据传输指令

1.一般数据传送指令

MOV:MOV dest, src,这条指令太熟悉了,功能大家都清楚,此处不多赘述

MOV AL, BL
将BL内容给AL

注意:a.目的操作数不可以是立即寻址方式
b.源操作数和目的操作数不可以同时为存储器寻址
c.立即数不能直接给段寄存器
d.段寄存器间不能直接传送数据
e.不能给CSIPPSW传数据、用户无权改变他们的值
f.源操作数和目的操作数要一样长
g.MOV指令不影响标志位

以后的指令要求默认与MOV一致,不一样的地方我会单独罗列出来
对寻址方式不熟悉的朋友可以看看同系列文章《内部寄存器》

2.堆栈交换指令

PUSH、POP
特点:先进后出、以字为单位。
栈顶是高地址,每次栈操作的数据只会比栈的地址低,且操作数必须为16位。
执行PUSH时,SP先减1,移数据,再减一,移数据,总共SP减2,执行POP时,SP先加1,读数据,再加一,读数据,总共SP加2(POP是读出来,并没有破坏原本那个位置的值,只是从栈角度来看,下一次PUSH的时候会把那个值覆盖了,使得POP有了弹出一样的效果)

AX = 1234H,SP = 1200H
PUSH AX
将AX低8位12H放到11FFH,再把高8位34H放到11FEH
POP AX
将11FEH的34H放到AX高8位,再将11FFH的12H放到低8位

3.交换指令

XCHG

XCHG AX, BX
AX和BX内容交换
XCHG 【2000】,CL
地址2000(不是2000H)处的内容和CL内容交换

注意:两个操作数必须有一个是寄存器操作数
不允许用段寄存器

4.查表转换指令

XLAT:用BX内容代表表格首地址,AL内容代表表内位移量,BX+AL得到偏移地址
也就是将BX+AL所指单元内容送给AL

5.字位扩展指令

符号数的符号位扩展到高位,必须要是符号数
无符号数的拓展规则是在高位全部补0。

CBW:将AL内容扩展到AX,8位拓展到16位
最高位为1,执行后AH=FFH,AL不变
最高位为0,执行后AH=00H,AL不变
CWD:将AX内容拓展到DX、AX,16位拓展到32位
最高位为1,执行后DX=FFFFH,AX不变
最高位为0,执行后DX=0000H,AX不变

二、输入输出指令

I/O端口

I/O接口用于存储数据,是可以直接CPU访问的寄存器。每个接口里面又有1个或多个端口。

IN acc, PORT
OUT PORT, acc

注意:此处acc所代表的只能是AL或者AX,不能为AH

当端口地址为16位时,指令中的端口地址必须由DX指定,可寻址64K个端口。

IN AX, 80H
从80H端口读入16ibt数据

MOV DX,	 2400H
IN	AL,  DX
从2400H端口读入8bit数据到AL

OUT	35H, AX
将AX值写到35H端口中

OUT	AX, 35H
格式错误

三、地址传送指令

取偏移地址指令LEA(取近地址指针)
LDS、LES(取远地址指针)
LEA:将变量16位偏移地址写入目标寄存器。
注意:源操作数必须是一个存储器操作数,不能是段存储器(因为我们取的是一个偏移量),更不能是标志寄存器。
理论上8个通用寄存器都可以,但是实际上最好选择四个指令指针和标志寄存器

i = 4时
MOV AL, i
AL = 4(AL此时就是地址i的内容)
LEA BX, i
BX = i (BX此时就是i这个地址)

TABLE = 20020H
LEA BX, TABLE
(BX)= 0020H

LDS 通用寄存器,存储器操作数
LES 通用寄存器,存储器操作数(将源操作数偏移地址送给目标寄存器,源操作数的段地址送ES)

四、标志传送指令

PUSHF(Push flags onto stack)
POPF(Pop flags off stack)
这两条就是PUSH和POP,只是默认把寄存器换成了FLAGS寄存器

LAHF(Load AH from Flags)
SAHF(Store AH into Flags)
这两条也是默认FLAGS寄存器

FLAGS是16位寄存器,但是它是按位定义的
LAHF:将FLAGS低8位装入AH
SAHF:将AH低8位写回FLAGS
可以明显看出,他们其实就是一对保存状态的指令

各位可以收藏这个系列,关键时刻忘了,当电子书查询。
感谢您的观看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不知何人

万分感谢诸位观看

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

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

打赏作者

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

抵扣说明:

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

余额充值