大数据的传送类指令Word格式文档下载.docx

上传人:b****5 文档编号:16027596 上传时间:2022-11-17 格式:DOCX 页数:15 大小:24.52KB
下载 相关 举报
大数据的传送类指令Word格式文档下载.docx_第1页
第1页 / 共15页
大数据的传送类指令Word格式文档下载.docx_第2页
第2页 / 共15页
大数据的传送类指令Word格式文档下载.docx_第3页
第3页 / 共15页
大数据的传送类指令Word格式文档下载.docx_第4页
第4页 / 共15页
大数据的传送类指令Word格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

大数据的传送类指令Word格式文档下载.docx

《大数据的传送类指令Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大数据的传送类指令Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

大数据的传送类指令Word格式文档下载.docx

目标

XCHG 

XLAT 

字节或字传送

字压入堆栈

字弹出堆栈

字节或字交换

字节翻译

目标地址传送指令 

LEA 

目标,源

LDS 

LES 

目标,源 

装入有效地址

装入DS寄存器

装入ES寄存器

标志位传送指令 

LAHF

SAHF

PUSHF

POPF 

将FR低字节装入AH寄存器

将AH容装入FR低字节

将FR容压入堆域

从堆栈弹出FR容

I/O数据传送指令 

IN 

累加器,端口

OUT 

端口,累加器 

从端口输入字节或字

将字节或字输出到端口

(1)MOV 

传送指令

指令格式:

MOVOPD,OPS

指令功能:

将源操作数OPS传送到目的操作数OPD,即(OPD)→(OPS)。

源操作数OPS可以是8/16位的通用寄存器、段寄存器、存储器中某单元或8/16位的立即数。

(2)PUSH进栈(压入)指令

PUSHOPS

将源操作数OPS压入堆栈,即SP–2→SP,OPS→(SPH,SP)。

源操作数0PS可以是16位通用寄存器、段寄存器或存储器中的数据字,以保证堆栈按“字”操作。

源操作数OPS不能是立即数。

由于堆栈是按“后进先出”方式工作,所以每次执行PUSH指令时,总是首先修改栈指针(SP)–2→SP(即SP先减2),使之指向新栈顶,然后把源操作数压入堆栈中SP所指示的位置,高字节在较高地址单元,低字节在较低地址单元中(真正的栈顶单元)。

由于堆栈总是按字操作,所以,SP总是指向字地址单元,堆栈段基址由SS确定。

堆栈最大容量为64K。

(3)POP出栈(弹出)指令

POPOPD

将堆栈中当前SP所指示的栈顶的一个字传送到指定的目的操作数OPD中,同时修改栈指针,即(SP+1,SP)→OPD,(SP)+2→SP,出栈操作是进栈操作的逆过程。

目的操作数OPD可以是16位通用寄存器、段寄存器或存储单元,但CS不能作目的操作数。

和进栈指令不同的是,出栈操作时是先将数据弹出送入目标地址,然后修改栈指针,即将SP减2送SP,这时SP向高地址端移动,指向新的栈顶。

(4)XCHG数据交换指令

XCHG 

OPD,OPS

把一个字或字节的源操作数OPS与目的操作数OPD互相交换位置。

即(OPD)→OPS,(OPS)→OPD。

源操作数OPS可为通用寄存器或存储器,目的操作数OPD只能为通用寄存器。

因此,交换指令可以在通用寄存器之间、通用寄存器与累加器之间、通用寄存器与存储器之间进行。

段寄存器不能作为操作数。

(5)XLAT查表转换指令(换码指令)

XLAT 

转换表

或 

XLAT

指令功能:

将[BX]为首址,[AL]为位移量的字节存储器单元中的数据→AL,即[BX+AL]→AL。

查表转换指令XLAT可用来将一种代码转换成另一种代码,或者说可使累加器中的一个值变换为存表格中的某一个值。

具体实现是这样的:

使用XLAT指令之前必须先在存(数据段)中建立一个表格,表格的容就是所需要转换的代码,表格最多不超过256个字节,将表格的起始地址事先装入BX寄存器中,AL中存放所要查找的对象(表中某一项)到表首地址间的位移量。

执行XLAT指令时,就将BX中的容和AL中的容相加作为有效地址,将表格中与该地址相对应的单元中的容取出并传送到AL中。

也就是说,指令执行后所要查找的对象(即转换后的代码)就在AL中,BX中容保持不变。

可见,只要改变AL的值即可从表中找到不同的代码。

例:

利用XLAT指令将一位十六进制数转换为对应的ASCII码。

为实现这一转换,首先应在存数据段建立一个表格,表中存放着十六进制数0,1,…,F的ASCII码,并将表格的首地址置于BX中,AL中置入所要查找的十六进制数距表头的位移量,比如现在要查找表中第5项容,则AL中应置入4。

实现上述操作的程序如下:

DATASEGMENT

TAB 

DB‘0123456789ABCDEF’

DATA 

END

MOV 

BX,OFFSET 

TAB 

变量TAB的有效地址FA→BX,即表示首址

AL,4 

TAB表中第5项的位移量4→AL

([BX+AL])=(TAB+4)=34H→AL

上述过程如图3.5所示。

程序中DATASEGMENT到DATAEND之间的语句是十六进制数的ASCII码表。

2.地址传送指令

8086/8088指令系统中有3条专门用于传送地址的指令:

LEA、LDS和LES。

可用来传送操作数的段地址或偏移地址。

(1)LEA取有效地址指令

LEA 

按源操作数OPS提供的寻址方式计算偏移地址(即EA),并将该偏移地址传送到目的操作数OPD所指示的16位寄存器中。

注意:

LEA指令中要求源操作数OPS所提供的必须是一个存储器单元地址,而目的操作数OPD必须是一个除段寄存器以外的16位寄存器。

另外,使用LBA指令时应注意它与MOV指令的区别,MOV指令传送的是源操作数中的容,而LEA指令传送的是源操作数的有效地址。

注意下面两条指令的区别:

AX,[SI] 

将SI所指示的存储单元中的容送AX

将SI所指的存储单元的EA送AX

下列两条指令是等价的,都是将变量NUM的EA送SI中。

SI,OFFSET 

NUM 

将变量NUM的EA送SI中,

OFFSET为数值返回运算符

SI,NUM 

与上条MOV指令等效,将NUM的EA送SI

这说明有时可用MOV指令来代替LEA指令。

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

LDS 

(OPS)→OPD,(OPS+2)→DS

该指令执行时是把从源操作数OPS所指示的连续4个字节(双字)存储器单元中的操作数送到目的寄存器OPD和DS中,其中低位地址的两个字节传送到OPD指示的寄存器中,高位地址的两个字节传送到段寄存器DS中。

可见,LDS指令要求:

OPD一定要是一个16位通用寄存器,常用SI寄存器。

OPS所提

供的一定要是一个存储器地址,且是一个地址指针,从指针所指示的地址单元开始,连续4个字节单元的容分别送入OPD和DS中。

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

LES 

(OPS)→OPD,(OPS+2)→ES

LES指令功能与LDS类似,所不同的是将OPS所指示的4个连续单元中的后两个字节(高地址)单元中的容送入附加数据段寄存器ES中而不是送入DS,前两个字节(低地址)单元中的容送OPD所指示的16位寄存器中。

3.标志位传送指令

标志位传送指令共有4条:

LAHF(标志装入AH)、SAHF(AH的容存入标志寄存器)、PUSHF(标志压入堆栈)和POPF(标志出栈)。

这些都是单字节指令,指令的操作数是隐含的,因此这些指令都是无操作数指令。

通过这些指令的执行,可以读出当前标志寄存器中的容,也可以对标志寄存器设置新值。

(1)LAHF标志寄存器低字节送AH指令

LAHF

把标志寄存器FR中SF,ZF,AF,PF和CF(8080和8085所具有的标志)分别送到AH中第7,6,4,2和0位,AH中第5,3,1位容未定义,可任意,标志寄存器本身容不变。

(2)SAHF 

AH送标志寄存器低字节指令

SAHF

SAHF的功能与LAHF指令相反,是将AH中第7,6,4,2和0位状态传送至标志寄存器FR中的SF,ZF,AF,PF和CF位,取代这些标志位原容,而OF,IF,TF,DF标志不受影响。

可见,通过该指令可以对标志位进行重新设置,所以该指令也叫设置标志指令。

(3)PUSHF标志进栈指令

PUSHF

把整个标志寄存器的容压入堆栈,同时修改栈指针,即SP–2→SP,该指令执行后不影响标志位。

(4)POPF标志出栈指令

POPF

POPF的功能正好与PUSHF相反,是将当前堆栈指针SP所指的一个字传送到标志寄存器FR中,同时修改栈指针即SP+2→SP。

PUSHF和POPF这两条指令用于人为地保存和恢复标志寄存器,常用过程调用和中断服务程序的开头与结尾,用来保存主程序的状态标志。

这两条指令的另一个用途是用来改变跟踪单步标志TF,8086/8088指令系统中没有能直接改变TF的指令,若要改变TF,可先用PUSHF指令将标志寄存器压入堆栈,然后设法改变栈顶单元中D8位(TF位),然后再用POPF指令把堆栈中修改过的容送回标志寄存器。

这样,只有TF位被改变,其它标志位不变。

4.输入/输出指令(累加器专用传送指令)

输入/输出数据传送指令简称I/O指令,共两条,一条是输入指令IN,另一条是输出指令OUT。

I/O指令用来完成累加器AL/AX与I/O端口问的数据传送,指令中给出I/O端口的地址,当端口地址值≤255时,端口地址由指令中直接给出,当端口地址值≥256时用间接方式,先将端口地址位置于DX中,然后指令中用DX作间址方式表示。

因此,I/O指令有两种格式。

(1)IN输入指令

直接方式(长格式):

IN 

AL,端口地址 

字节(8位)传送

AX,端口地址 

字(16位)传送

间接方式(短格式):

AL,DX 

端口地址放在DX寄存器中

AX,DX

将端口地址中的8位或16位数传送到AL或AX中,将端口中的16位数输入时,先将指定端口中的字节数送入AL中,再将端口地址+1,然后将该端口中的字节数送入AH中。

由上可知,IN指令有两种格式,当端口地址为00~FFH时用直接方式,端口地址值包含在指令中;

当端口地址为0000~FFFFH时,用间接方式,即先将端口地址放在DX中,指令中用DX代替端口地址。

注意,这时指令的书写形式与寄存器寻址方式相似,但这里实际上是间址方式。

AL,02FH 

将02FH端口的一个字节数送入AL

AX,060H 

将060H端口的容送AL,将061H端口的容送AH

DX,300H 

先将端口地址300H送人DX中

将300H端口的容送入AL中

(2)OUT输出指令

直接方式:

OUT端口地

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1