概述
数据传送指令
通用数据传送指令
传送指令MOV
格式
MOV DST,SRC
功能
将一个源操作数送到目的操作数
说明
1.DST是目的操作数,可以是寄存器,存储器,累加器
SRC是源操作数,可以是寄存器,存储器,累加器,立即数
2.MOV指令可分为四种情况
1.寄存器于寄存器之间数据传输指令
MOV AX,BX
MOV DS,AX
MOV BP,SI
注意:指令指针IP不参与数的传送,代码段寄存器CS可以作为源操作数,但不能作为目的操作数
2.立即数到通用寄存器的传送指令
注意:立即数只能用于源操作数,不能用于目的操作数
MOV AL,25
3.寄存器和存储器的数据传送指令
注意:段寄存器CS不能作为目的操作数
MOV AL,BUFFER
MOV AL,[SI]
4.立即数到存储器的数据传送
MOV ALFA,24;
注意情况
1.MOV指令不影响状态标志位
2.储存器和储存器之间不能进行数据直接传送
例子
用MOV指令实现两个内存字节单元内容的交换,设两个内存单元的偏移地址分别是 2035 H 2035H 2035H和 2045 H 2045H 2045H,
执行过程如下
所以具体程序段如下
MOV BL,DS:[2035H];
MOV CL,DS:[2045H];
MOV DS:[2035H],CL;
MOV DS:[2045H],BL;
进栈指令PUSH
格式
PUSH OPRD
说明
1.OPRD为字操作数可以是寄存器或者存储器操作数
2.PUSH的操作过程是 ( S P ) < − − ( S P ) − 2 , ( ( S P ) ) < − − O P R D (SP)<--(SP)-2,((SP))<--OPRD (SP)<−−(SP)−2,((SP))<−−OPRD,即先修改堆栈SP(压入时自动减2),然后将指定的操作数送入新的栈顶位置
出栈指令POP
格式
POP DST
说明
1.PUSH和POP指令对状态标志位没有影响
2.POP操作过程是 D S T < − − ( ( S P ) ) , ( S P ) < − − ( S P ) + 2 DST<--((SP)),(SP)<--(SP)+2 DST<−−((SP)),(SP)<−−(SP)+2
交换指令XCHG
格式
XCHG OPR1,OPR2
说明
1. O P R 1 OPR1 OPR1和 O P R 2 OPR2 OPR2的内容互换
2.两个操作数 O P R 1 OPR1 OPR1和 O P R 2 OPR2 OPR2的长度可均为 8 8 8位 16 16 16位,且其中至少有一个是寄存器,但不允许使用段寄存器
例子
XCHG AL,BL; 寄存器AL和BL的内容互换
XCHG AX,BX; 寄存器AX和BX的内容互换
XCHG [BX],CX; BX指向的内存字单元内容与CX的内容互换
累加器专用指令
查表指令XLAT
格式
XLAT
操作
通过AL中的索引值在字节型数据表中查到表项的内容并返回到AL
说明
在使用该指令之前,应在数据段中定义一个字节型表,并将表起始地址的偏移量放入BX,表的索引值放在AL中,索引值从 0 0 0开始,最大 255 255 255结束
执行指令后,在AL中即可得到对应该索引值的表项内容
TAB DB 3FH,06H,5BH,4FH,66H ;定义的数据表
DB 6DH,7DH,07H,7FH,6FH
MOV BX,OFFSET TAB ;将TAB的偏移量送入BX中
MOV AL,4 ;在AL中存放索引值4
XLAT ;查表得到的内容在AL中
输入指令IN
格式
IN AC,PORT
操作
把外设端口(PORT)的内容输入到累加器
说明
1.输入指令IN从输入端口传送一个字节到AL寄存器或者传送一个字到AX
2.当端口地址为 0 − 255 0-255 0−255时,可以直接寻址方式(即用一个字节立即数指定端口地址),也可以间接寻址方式,当端口地址大于 255 255 255时,只能用间接寻址方式
例子
IN AL,80H ;把80H端口的字节输入到AL中
IN AX,80H ;把80H端口的字输入到AX中
MOV DX,288H ;把端口地址288H送入DX
IN AL,DX ;把288H端口的字节输入到AL中
输出指令OUT
格式
OUT PORT,AC
操作
把累加器的内容输出到外设端口
地址传送指令
装入有效地址指令LEA(Load Effective Address)
格式
LEA REG,SRC
操作
把源操作数的有效地址(即偏移地址)装入指定寄存器
说明
源操作数必须是存储器操作数
目的操作数必须是16位的通用寄存器
例子
LEA BX,[BX+DX+6H];
设 B X = 1000 H , D X = 0200 H BX=1000H,DX=0200H BX=1000H,DX=0200H执行完指令后 B X = 1206 H BX=1206H BX=1206H
该指令和MOV指令的区别在于,LEA指令传输的是地址,MOV传输的是内容
加载数据段指针指令LDS(Load Pointer into register and DS)
格式
LDS REG,SRC
操作
将源操作数指定的FAR型指针(占4个连续单元)传送给目的操作数和DS寄存器
说明
目的操作数必须是16位的通用寄存器,传送时较低的两个字节装入16位的通用寄存器,较高的两个字节装入DS寄存器
加载附加段指针指令LES(Load Pointer into register and ES)
说明
与LDS不同就是较高的两个字节装入ES中
传送标志指令
LAHF指令
将标志寄存器的低八位送到AH寄存器
SAHF指令
AH寄存器送标志寄存器的低八位
PUSHF指令
先将SP的值减2,再将标志寄存器的值传送到栈顶
POPF
先将SP指示的栈顶字段送入标志寄存器,然后将SP的值
最后
以上就是坚强玉米为你收集整理的微机原理笔记——数据传送指令的全部内容,希望文章能够帮你解决微机原理笔记——数据传送指令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复