首页 理论教育 微机原理及接口技术:数据传送指令

微机原理及接口技术:数据传送指令

时间:2023-11-16 理论教育 版权反馈
【摘要】:图3-8 数据传送关系具体地说,MOV指令能实现下列传送功能。以上规则同样适用于其他类型的两操作数指令。LES传送偏移地址及附加数据段首址指令指令格式:LES OPD,OPS功能:该指令将段地址送到附加段寄存器ES,其他用法同指令LDS。这组指令只限于使用累加器AX或AL传送信息。

微机原理及接口技术:数据传送指令

数据传送指令实现CPU和存储器、CPU与外设之间的数据传送。主要包括:一般数据传送指令(MOV、XCHG、XLAT)、堆栈操作指令(PUSH、POP)、标志寄存器传送指令(PUSHF、POPF、LAHF、SAHF)、地址传送指令(LEA、LDS、LES)和输入/输出指令(IN、OUT)。在这些指令中,除了SAHF、POPF两指令外,其他指令均不影响标志位。

1.一般数据传送指令

(1)传送指令

指令格式:MOV OPD,OPS

功能:将源操作数传送至目的地址中,即(OPS)→OPD。

MOV指令可实现的数据传送关系如图3-8所示。

978-7-111-42233-4-Chapter03-15.jpg

图3-8 数据传送关系

具体地说,MOV指令能实现下列传送功能。

①CPU内部寄存器之间的传送。例如:

978-7-111-42233-4-Chapter03-16.jpg

②立即数传送至通用寄存器或存储单元。例如:

978-7-111-42233-4-Chapter03-17.jpg

③寄存器与存储器之间的数据传送。例如:

978-7-111-42233-4-Chapter03-18.jpg

MOV指令的操作需要遵循以下规则:

①源操作数和目的操作数应有相同的类型(类型匹配),即必须同时为字节类型或同时为字类型。

②源操作数和目的操作数不能同时为存储器操作数,如果一个操作数在数据存储单元中,则另一个操作数要么是立即操作数(不能作目的操作数),要么是寄存器操作数。如指令MOV[BX],[SI]是非法指令。

③立即数不能直接传送段寄存器。

④目的操作数一定不能是立即操作数。

⑤代码段寄存器CS不能由程序赋值,即不能作为目的操作数。

⑥不允许在两个段寄存器之间直接传送数据。

⑦寄存器IP不能作为操作数。

以上规则同样适用于其他类型的两操作数指令。

(2)数据交换指令

指令格式:XCHG OPD,OPS

功能:(OPD)→OPS,(OPS)→OPD,即将源地址与目的地址中的内容互换。

注意:OPD和OPS都不能是立即数。

(3)查表转换指令

指令格式:XLAT OPS或XLAT

功能:([BX+AL])→AL,将(BX)为首址、(AL)为位移量的字节存储单元的数据→AL。

例3-10

978-7-111-42233-4-Chapter03-19.jpg

该例通过查表方式获得16个数字的ASCII码。通过该例可进一步领会XLAT的功能及使用方法:以TAB为首址的字节存储区即为一字节转换表,内容可由用户设定,最多可为256项。要使用XLAT指令查找表中第五项的内容,首先必须将表首址送BX,待查找项在TAB中的位移量4一定要放入AL中,执行XLAT指令时,CPU根据(BX)找到表首址,再根据(AL)查找到所需的项,并将该项中的内容送AL。由于这条指令的全部操作数都是隐含的,因此可不带操作数或仅带表头地址。

从上例可见,XLAT指令可以很方便地将一种代码转换成另一种代码。该指令另一用途是对文本数据进行编码和译码,从而可实现简单的加密和解密。

2.堆栈操作指令

在8086/8088系统中,堆栈是一段以“后进先出”方式工作的连续的RAM区域,栈底一端地址较大,栈顶一端地址较小。堆栈操作必须在堆栈段中进行,其段地址存放于堆栈段寄存器SS中,堆栈指针寄存器SP的内容任何时候都指向当前的栈顶,SP的初值为堆栈的深度。进出堆栈的数据均以字为单位。堆栈操作指令有两条,一条指令的功能是把CPU内部寄存器(或字存储单元)中的信息压入堆栈(PUSH指令),另一条指令的功能是从堆栈中弹出信息送往CPU寄存器(或字存储单元)(POP指令)。注意两条指令对SP寄存器的作用。

(1)PUSH进栈指令

指令格式:PUSH OPS

功能:(SP)←(SP)-2;(SP+1,SP)←(OPS)。即压栈时堆栈指针SP减2获得当前的栈顶,将字数据压入当前的栈顶存储单元中。

(2)POP出栈指令

指令格式:POP OPD

功能:(OPD)←(SP+1,SP);(SP)←(SP)+2。即出栈时将当前的栈顶存储单元的内容取出送目的操作数OPD,并将堆栈指针SP加2获得新的当前的栈顶。

堆栈的存取必须是以字为单位(8086/8088 CPU不允许字节为单位的堆栈存取),所以PUSH和POP指令只能做字操作,它们可以是除立即数以外的其他寻址方式。

例3-11 设(AX)=01FFH,说明指令PUSH AX和POP AX的执行情况。

指令执行情况分别如图3-9、图3-10所示。

978-7-111-42233-4-Chapter03-20.jpg

图3-9 PUSH AX指令的执行情况

978-7-111-42233-4-Chapter03-21.jpg

图3-10 POP BX指令的执行情况

3.标志寄存器传送指令

(1)LAHF标志送AH指令(www.xing528.com)

指令格式:LAHF

功能:AH←(PSW的低字节),即标志寄存器低8位送AH。

(2)SAHF AH送标志寄存器指令

指令格式:SAHF

功能:(PSW的低字节)←AH,即AH的内容送标志寄存器低8位。

(3)PUSHF标志进栈指令

指令格式:PUSHF

功能:SP←(SP)-2,(SP+1,SP)←PSW;即标志寄存器内容送进堆栈。

(4)POPF标志出栈指令

指令格式:POPF

功能:PSW←(SP+1,SP),SP←(SP)+2;即将栈顶指示的单元内容送标志寄存器。

4.地址传送指令

(1)LEA传送偏移地址指令

指令格式:LEA OPD,OPS

功能:按OPS提供的寻址方式计算偏移地址,并将其送入OPD中。

说明:OPD必须是一个16位的通用寄存器;OPS所提供的一定是一个存储器地址。 例如:

978-7-111-42233-4-Chapter03-22.jpg

(2)LDS传送偏移地址及数据段首址指令

指令格式:LDS OPD,OPS

功能:将OPS中所含的一个32位地址指针的高地址部分(段地址)送到数据段寄存器DS,低地址部分(偏移地址)送到指令中给出的通用寄存器。即(OPS)→OPD,(OPS+2)→DS。

说明:OPD一定要是一个16位的通用寄存器;OPS所提供的一定是一个存储器地址,且类型为双字(DD)型。

(3)LES传送偏移地址及附加数据段首址指令

指令格式:LES OPD,OPS

功能:该指令将段地址送到附加段寄存器ES,其他用法同指令LDS。即(OPS)→OPD,(OPS+2)→ES。

例3-12阅读下列程序段,仔细领会LEA、LDS指令在程序中的作用。

978-7-111-42233-4-Chapter03-23.jpg

5.输入/输出指令

输入/输出指令有两条:IN(输入指令)和OUT(输出指令),主要用于CUP与外设之间信息的交换。这组指令只限于使用累加器AX或AL传送信息。

(1)IN输入指令

长格式:INAL,PORT ;字节操作

INAX,PORT ;字操作

其中PORT为端口地址,范围为00H~FFH。

功能:(AL)←(PORT),或(AX)←(PORT+1,PORT)。即将端口地址为PORT的端口的内容送AL或AX。

短格式:INAL,DX ;字节操作

INAX,DX ;字操作

其中寄存器DX的内容为端口地址,范围为0000H~FFFFH。

功能:(AL)←(DX),或(AX)←(DX+1,DX)。即将DX的内容为端口地址的端口的内容送AL或AX。

说明:长格式又称直接端口寻址,适用于端口地址为8位的情况;短格式又称间接端口寻址,适用于端口地址为16位的情况,间接寻址的寄存器必须使用DX。

(2)OUT输出指令

长格式:OUT PORT,AL ;字节操作

OUT PORT,AX ;字操作

其中PORT为端口地址,范围为00H~FFH。

功能:(PORT)←(AL),(PORT+1,PORT)←(AX)。即将AL或AX的内容送端口地址为PORT的端口中。

短格式:OUT DX,AL ;字节操作

OUT DX,AX ;字操作

其中寄存器DX的内容为端口地址,范围为0000H~FFFFH。

功能:(DX)←(AL),或(DX+1,DX)←(AX)。即将AL或AX的内容送以DX的内容为端口地址的端口中。

例3-13阅读下列程序段,指出其完成的功能。

978-7-111-42233-4-Chapter03-24.jpg

解:功能为读取端口20H的内容至AL,送BL保存,并将其送21H端口。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈