我是靠谱客的博主 坚强玉米,最近开发中收集的这篇文章主要介绍微机原理笔记——数据传送指令,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数据传送指令

通用数据传送指令

传送指令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 0255时,可以直接寻址方式(即用一个字节立即数指定端口地址),也可以间接寻址方式,当端口地址大于 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的值

最后

以上就是坚强玉米为你收集整理的微机原理笔记——数据传送指令的全部内容,希望文章能够帮你解决微机原理笔记——数据传送指令所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部