《数据传送指.ppt.ppt》由会员分享,可在线阅读,更多相关《数据传送指.ppt.ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、指令系统(1)数据传送指令指令系统数据传送指令数据传送指令算术运算指令算术运算指令逻辑运算与移位指令逻辑运算与移位指令串操作指令串操作指令控制转移指令控制转移指令处理器控制指令处理器控制指令数据传送指令通用数据传送指令通用数据传送指令地址传送指令地址传送指令标志寄存器传送指令标志寄存器传送指令 累加器专用传送指令累加器专用传送指令PUSHA/PUSHAD (push all registers)所有寄存器进栈所有寄存器进栈POPA/POPAD (pop all registers)所有寄存器出栈所有寄存器出栈1、通用数据传送指令、通用数据传送指令MOV(move)传送传送MOVSX(move
2、with sigh-extend)带符号扩展传送带符号扩展传送MOVZX(move with zero-extend)带零扩展传送带零扩展传送PUSH(push onto the stack)进栈进栈POP(pop from the stack)出栈出栈XCHG(exchange)交换交换MOV 传送指令传送指令格式:格式:MOV DST,SRC操作:操作:DST-(SRC)即把源操作数的内容送入目的操作数即把源操作数的内容送入目的操作数说明:可以进行说明:可以进行8位或位或16位或位或32位数据的传送位数据的传送 源操作数可为立即数、寄存器、存储器操作数源操作数可为立即数、寄存器、存储器操作
3、数 目的操作数可为寄存器、存储器操作数目的操作数可为寄存器、存储器操作数 存储器存储器段寄存器段寄存器CS DS SS ES立即数立即数通用寄存器通用寄存器AX BX CX DXBP SP SI DI例3-2-1 MOV指令示例1MOV EAX,EBX+ECX*4 ;存储器操作数存储器操作数MOV AX,ARRAYSI ;传送到寄存器传送到寄存器MOV AX,0B00H ;立即数传送到寄存器立即数传送到寄存器MOV CL,10000000BMOV VALUE,100H ;立即数传送到存储单元立即数传送到存储单元MOV ES:BX,4BHMOV BX,CX ;寄存器内容传送到存储器寄存器内容传送
4、到存储器MOV BPDIV,AXMOV AL,BL ;寄存器之间传送寄存器之间传送MOV BX,SI例3-2-2 MOV指令示例2 MOV AX,ARRAYSI设(DS)=3000H,(SI)=2000H,ARRAY=8000H 物理地址 30000H 2000H +8000H 3A000H 3A000H 45H 0BH0B45H AXMOV指令注意事项:指令注意事项:(1)两个操作数长度必须一致两个操作数长度必须一致 MOV AL,BX ;不合法不合法例外:源是立即数,小于目的操作数时,高位按例外:源是立即数,小于目的操作数时,高位按 符号位扩展符号位扩展 MOV AX,0B4H 执行后,执
5、行后,(AX)=0FFB4H(2)不允许用立即数为段寄存器赋值不允许用立即数为段寄存器赋值 例:例:MOV ES,10A0H ;不合法不合法(3)不允许两个操作数均是存储器操作数不允许两个操作数均是存储器操作数 MOV X,Y ;不合法不合法 可以通过一个寄存器传送:可以通过一个寄存器传送:MOV AX,Y MOV X,AX(4)不允许两个操作数均为段寄存器不允许两个操作数均为段寄存器 MOV ES,DS ;不合法不合法MOVSX 带带符号扩展符号扩展传送指令传送指令格式:格式:MOVSX DST,SRC操作:操作:DST-符号扩展符号扩展(SRC)MOVZX 带零扩展带零扩展传送指传送指令令
6、格式:格式:MOVSX DST,SRC操作:操作:DST-零扩展零扩展(SRC)说明:源操作数是8位或16位寄存器或存储器的内容 目的操作数必须是16位或32位寄存器例3-2-3 MOVSX指令示例 MOVSX EAX,CL 设设(CL)=0ABH,执行后执行后(EAX)=0FFFFFFABH 负号扩展负号扩展 若若(CL)=57H,执行后执行后 (EAX)=00000057H 正号扩展正号扩展 例3-2-4 MOVZX指令示例 MOVZX EAX,DATA 设设(DATA)=87ADH,执行后执行后 (EAX)=0000 87ADH 0扩展扩展PUSH 压栈指令压栈指令格式:格式:PUSH
7、SRC操作:操作:16位位指令:指令:SP-(SP)-2 (SP)+1,(SP)-(SRC)32位指令:位指令:ESP(ESP)-4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(SRC)说明:源操作数可以是寄存器或存储器操作数说明:源操作数可以是寄存器或存储器操作数 必须以字或双字为单位操作必须以字或双字为单位操作例3-2-5 压栈指令示例 PUSH AX 执行前 执行后 AX AX 25 524FEH 31 524FFH SP 52500H SP 52500H 3125H3125H低地址低地址进栈方向POP 出栈指令出栈指令格式:格式:POP DST操作:操作:16位位指令:
8、指令:DST-(SP)+1,(SP)SP-(SP)+2 32位指令:位指令:DST(ESP)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)(ESP)+4例3-2-6 出栈指令示例 POP BX 执行前 执行后 BX BX 75 C1 SP 6B 51000H 6B 51000H 48 1H 48 1H 9A 2H SP 9A 2H 28 3H 28 3H48 6B出栈方向PUSHA/PUSHAD 所有寄存器进栈所有寄存器进栈格式:格式:PUSHA PUSHADPUSHAD:(386及其后继机型)及其后继机型)32位通用寄存器依次进栈,次序为:位通用寄存器依次进栈,次序为:EAX,E
9、CX,EDX,EBX,指令执行前的指令执行前的ESP,EBP,ESI,EDI 指令执行后指令执行后 ESP(ESP)-32 仍指向栈顶仍指向栈顶PUSHA:(286及其后继机型)及其后继机型)16位通用寄存器依次进栈,次序为:位通用寄存器依次进栈,次序为:AX,CX,DX,BX,指令执行前的指令执行前的SP,BP,SI,DI 指令执行后指令执行后 SP(SP)-16 仍指向栈顶仍指向栈顶操作:操作:例3-2-7 PUSHAD指令示例(SDI)-32(ESI)-28(EBP)-24(ESP)原 -20(EBX)-16(EDX)-12(ECX)-8(EAX)-4 0(ESP)原(ESP)执行前执行
10、后POPA/POPAD 所有寄存器出栈所有寄存器出栈格式:格式:POPA POPADPOPAD:(386及其后继机型)及其后继机型)32位通用寄存器依次出栈,次序为:位通用寄存器依次出栈,次序为:EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 指令执行后指令执行后 ESP(ESP)+32 仍指向栈顶仍指向栈顶POPA:(286及其后继机型)及其后继机型)16位通用寄存器依次出栈,次序为:位通用寄存器依次出栈,次序为:DI,SI,BP,SP,BX,DX,CX,AX 指令执行后指令执行后 SP(SP)+16 仍指向栈顶仍指向栈顶操作:操作:XCHG 交换交换指令指令格式:格式:XC
11、HG OPR1,OPR2操作:操作:(OPR1)(OPR2)如:如:XCHG EAX,EBX ;寄存器之间交换寄存器之间交换 XCHG BX,BP+DI ;寄存器与存储器之间交换寄存器与存储器之间交换 XCHG SI,DX说明:说明:操作数不允许为段寄存器操作数不允许为段寄存器 两个操作数长度必须相同两个操作数长度必须相同例3-2-8 交换指令示例 XCHG DX,DATABP设(SS)=5000H,(BP)=0400H,DATA=1800H 物理地址=5000H*16+0400H+1800H =51C00H 执行前 执行后 DX DX 37CD 51C00H 42 51C00H CD 1 6
12、5 1 37 CD376542 LDS(load DS with pointer)指针送寄存器和指针送寄存器和DS LES(load ES with pointer)指针送寄存器和指针送寄存器和ES LFS(load FS with pointer)指针送寄存器和指针送寄存器和FS LGS(load GS with pointer)指针送寄存器和指针送寄存器和GS LSS(load SS with pointer)指针送寄存器和指针送寄存器和SS2、地址传送指令、地址传送指令LEA(load effective address)有效地址送寄存器有效地址送寄存器例3-2-9 LEA指令示例 LE
13、A SI,BX 设(DS)=2000H,(BX)=1234H 执行后 SI 21234 78H 5 56H1234H1234HBXLEA 装载有效地址指令装载有效地址指令格式:格式:LEA DST,SRC操作:操作:DST-OA说明:SRC应是存储器操作数,而应是存储器操作数,而DST则必须是则必须是 一个一个16位或位或32位的通用寄存器位的通用寄存器(AX.DI.)LDS 装载数据段指针指令装载数据段指针指令 格式:格式:LDS DST,SRC 操作:操作:DST(SRC)DS(SRC+2)或或 DS(SRC+4)LES、LFS、LGS、LSS 格式:同格式:同LDS 说明:源操作数必须是
14、存储器操作数源操作数必须是存储器操作数 目的操作数必须是寄存器目的操作数必须是寄存器 完成一个逻辑地址的传送,该逻辑地址须用伪指完成一个逻辑地址的传送,该逻辑地址须用伪指令预先定义在当前数据段中令预先定义在当前数据段中 7659200021000 4521001 D621002 0021003 50 D6455000DSDIDI DS例3-2-10 LDS指令示例 LDS DI,BX设(DS)=2000H,(BX)=1000H执行前执行后 LAHF(load AH with flags)标志送标志送AH SAHF(store AH into flags)AH送标志寄存器送标志寄存器 3、标志寄
15、存器传送指令、标志寄存器传送指令PUSHF/PUSHFD(push the flags or eflags)标志进栈标志进栈POPF/POPFD(pop the flags or eflags)标志出栈标志出栈LAHF 标志寄存器送标志寄存器送AH指令指令格式:格式:LAHF 操作:操作:AH-FLAGS 0-7 即将标志寄存器的低字节送AH中 SAHF 送标志寄存器指令送标志寄存器指令格式:格式:SAHF操作:操作:FLAGS 0-7-(AH)即将AH寄存器内容送FLAGS低字节说明:无操作数说明:无操作数 FLAGS中含若干标志位,但指令本身不影响标志位中含若干标志位,但指令本身不影响标志
16、位PUSHF/PUSHFD 标志进栈指令标志进栈指令格式:格式:PUSHF PUSHFD操作:操作:SP-(SP)-2 (SP)+1,(SP)-(FLAGS)(ESP)(ESP)-4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(EFLAGS AND 0FCFFFFH)(清除清除VM和和RF位)位)说明:无操作数说明:无操作数POPF/POPFD 标志出栈指令标志出栈指令格式:格式:POPF POPFD操作:操作:FLAGS-(SP)+1,(SP)SP-(SP)+2 EFLAGS(ESP)+3,(ESP)+2,(ESP)+1,(ESP)ESP(ESP)+44、累加器专用传送指令、
17、累加器专用传送指令 IN(input)输入输入 OUT(output)输出输出 XLAT(translate)换码换码 IN 输入指令输入指令格式格式1:IN AL,Port(字节)字节)IN AX,Port(字)字)IN EAX,Port(双字)双字)格式格式2:IN AL,DX (字节)字节)IN AX,DX(字)字)IN EAX,DX(双字)双字)操作:操作:AL/AX/EAX-(Port)从外设读入字节或字或双字数据从外设读入字节或字或双字数据 AL/AX/EAX-(DX)以以DX内容为端口地址,读入数据内容为端口地址,读入数据说明:用说明:用Port指明端口地址时,地址范围为指明端口
18、地址时,地址范围为00H-FFH 以以DX间接给出端口地址时,最大地址为间接给出端口地址时,最大地址为0FFFFHOUT 输出指令输出指令格式格式1:OUT Port,AL(字节)字节)OUT Port,AX(字)字)OUT Port,EAX(双字)双字)格式格式2:OUT DX,AL(字节)字节)OUT DX,AX(字)字)OUT DX,EAX(双字)双字)操作:操作:(Port)-(AL)/(AX)/(EAX)传送数据到传送数据到Port端口端口 (DX)AL IN AX,48H ;从端口从端口48H读入字数据读入字数据-AX MOV DX,3FCH IN EAX,DX ;从从端口端口03
19、FCH读入双字数读入双字数-EAX例3-2-12 OUT指令示例 OUT 32H,AL ;传送传送字节数据到字节数据到32H端口端口 OUT DX,AX ;传送字数据到传送字数据到DX指出的端口指出的端口XLAT 换码指令换码指令格式:格式:XLAT OPR 或或 XLAT操作:操作:AL-(BX)+(AL)或或 AL(EBX)+(AL)将将AL中的当前内容转换为某一种代码中的当前内容转换为某一种代码例3-2-13 XLAT指令示例 LEA BX,TABLE TABLE 30H ;表首址给BX +1 31H MOV AL,4 +2 32H ;待转换内容到AL +3 33H XLAT +4 34
20、H +5 35H +6 36H +7 37H +8 38H +9 39H04HALCBW(convert byte to word)字节转换为字字节转换为字CWD/CWDE(convert word to double word)字转换为双字字转换为双字CDQ(convert double to quad)双字转换为双字转换为4字字BSWAP(byte swap)字节交换字节交换5、类型转换指令、类型转换指令CBW 字节转换为字字节转换为字格式:格式:CBW 操作:扩展操作:扩展AL中的符号至中的符号至AH中,中,将将8位数扩展成等效的位数扩展成等效的16位数位数CWD/CWDE 字转换为双字
21、字转换为双字格式:格式:CWD操作:扩展操作:扩展AX中的符号至中的符号至DX中,将中,将16位数扩展成位数扩展成 等效的等效的32位数位数格式:格式:CWDE操作:操作:AX的内容符号扩展到的内容符号扩展到EAX说明:用于在符号数除之前,形成双倍长度的被除数用于在符号数除之前,形成双倍长度的被除数CDQ 双字转换为双字转换为4字字格式:格式:CDQ操作:操作:EAX的内容符号扩展到的内容符号扩展到EDX,形成形成EDX:EAX 中的中的4字字BSWAP 字节交换字节交换格式:格式:BSWAP r32操作:使操作:使32位寄存器的字节次序变反位寄存器的字节次序变反 (1、4字节交换,字节交换,
22、2、3字节交换)字节交换)例3-2-14 BSWAP指令示例 BSWAP EAX 执行前(EAX)=11223344H 执行后(EAX)=44332211H数据传送指令小结数据传送指令小结1、数据传送指令不影响标志位数据传送指令不影响标志位2、除XCHG指令外,都是从源到目的的单向传送3、注意注意MOV指令与指令与 LEA指令的区别指令的区别 例例3-2-11 MOV SI,BX LEA SI,BX SI 78 21234 78 21234 56 5 56 5 BX 5678H1234H1234H1234HBXBXSISI4、堆栈的存取在、堆栈的存取在16位指令中必须以字为单位,位指令中必须以
23、字为单位,在在32位指令中必须以双字为单位(见表位指令中必须以双字为单位(见表3.3)5、8086 不允许不允许PUSH指令使用立即数寻址方式指令使用立即数寻址方式 如:如:PUSH 12 ;8086中不合法中不合法 但但286及其后继机型中允许及其后继机型中允许6、POP 指令不允许使用立即数寻址方式,指令不允许使用立即数寻址方式,不允许使用不允许使用CS寄存器寄存器 例:例:POP 12 ;不合法不合法 POP CS ;不合法不合法7、段寄存器只能在段寄存器只能在MOV、PUSH、POP 指令中作为操作数出现指令中作为操作数出现 例:MOV ES,AX PUSH CS POP DS 但下列指令不合法:MOV CS,reg POP CS8、指令有多种格式,一般都遵循以下规则:指令有多种格式,一般都遵循以下规则:双操作数指令中不允许两个操作数均为存储器操作数双操作数指令中不允许两个操作数均为存储器操作数 单操作数指令不允许立即寻址方式单操作数指令不允许立即寻址方式 目的操作数不允许使用立即寻址方式目的操作数不允许使用立即寻址方式 作业:作业:3.3 3.13 3.44 算术运算指令.ppt