微机原理笔记——数据传送指令

  • Post author:
  • Post category:其他




数据传送指令



通用数据传送指令



传送指令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






2035


H









2045

H

2045H






2045


H





,

执行过程如下

在这里插入图片描述

所以具体程序段如下

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


))




<






















OPR


D





,即先修改堆栈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






D


ST




<






















((


SP


))


,




(


SP


)




<






















(


SP


)




+








2






交换指令XCHG


格式
XCHG OPR1,OPR2


说明

1.



O

P

R

1

OPR1






OPR


1









O

P

R

2

OPR2






OPR


2





的内容互换

2.两个操作数



O

P

R

1

OPR1






OPR


1









O

P

R

2

OPR2






OPR


2





的长度可均为



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




=








1000


H


,




D


X




=








0200


H





执行完指令后



B

X

=

1206

H

BX=1206H






BX




=








1206


H




该指令和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的值



版权声明:本文为weixin_51335655原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。