微机原理8086/8088概念系列
微机原理8086/8088——微型计算机组成
微机原理8086/8088——微处理器功能结构
微机原理8086/8088——内部寄存器
微机原理8086/8088——指令系统与寻址方式
微机原理8086/8088——数据传送指令
更新ing
微机原理8086/8088——数据传送指令
前言:
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
可以明显看出,他们其实就是一对保存状态的指令
各位可以收藏这个系列,关键时刻忘了,当电子书查询。
感谢您的观看!