




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3 3章章 80 x8680 x86指令系统指令系统 3 .1 8086/80883 .1 8086/8088指令格式指令格式 3 .1 .1 3 .1 .1 操作码与地址码操作码与地址码8086808680888088的指令格式的指令格式操作码字段操作码字段操作数字段操作数字段3 .1 .2 3 .1 .2 单操作数、双操作数及多操作数单操作数、双操作数及多操作数 1.1.单操作数单操作数 在一条指令中仅指明一个操作数。如:在一条指令中仅指明一个操作数。如:PUSH AXPUSH AX 2. 2.双操作数双操作数在一条指令中同时指出两个操作数。如:在一条指令中同时指出两个操作数。如:MO
2、V BX,CXMOV BX,CX 3. 3.多操作数多操作数n在一条指令中,同时指出二个以上操作数。在一条指令中,同时指出二个以上操作数。n源操作数源操作数指令执行前后值不变(一般是第二指令执行前后值不变(一般是第二个操作数)个操作数)n目的操作数目的操作数指令执行前后值改变(一般是第指令执行前后值改变(一般是第一个操作数)一个操作数) 3 .1 .3 80863 .1 .3 808680888088的操作数的操作数n8086808680888088的操作数分为以下几类:的操作数分为以下几类: 1.1.立即数立即数 是指令中参与操作且紧跟在操作码后面的常数。是指令中参与操作且紧跟在操作码后面的
3、常数。立即数只立即数只能作为源操作数使用。能作为源操作数使用。 2.2.寄存器操作数寄存器操作数操作数存放在寄存器。操作数存放在寄存器。 3.3.存储器操作数存储器操作数 操作数存放在内存单元中,操作数字段包含内存单元地址。操作数存放在内存单元中,操作数字段包含内存单元地址。 存储器操作数的偏移地址用存储器操作数的偏移地址用“ ”括起来括起来。 4.I4.IO O端口操作数端口操作数 指令中参与操作的数据来源于或者要传送到指令中参与操作的数据来源于或者要传送到I IO O端口。端口。 3 .2 80863 .2 808680888088指令寻址方式指令寻址方式n寻址方式寻址方式寻找操作数(包括
4、数据和地址)寻找操作数(包括数据和地址)有各种方法。有各种方法。n寻址寻址就是寻找操作数(数据寻址)或者就是寻找操作数(数据寻址)或者操作数地址(地址寻址)。操作数地址(地址寻址)。寻址方式有两大类:寻址方式有两大类:n操作数的寻址方式操作数的寻址方式与数据有关,与数据有关,8 8种种n转移地址的寻址方式转移地址的寻址方式与程序转移有关,与程序转移有关,4 4种种(一)操作数的寻址方式(一)操作数的寻址方式与数据有关与数据有关(1 1)隐含寻址(固定寻址)隐含寻址(固定寻址)(2 2)立即寻址)立即寻址(3 3)寄存器寻址)寄存器寻址(4 4)直接寻址)直接寻址(5 5)寄存器间接寻址)寄存器
5、间接寻址(6 6)寄存器相对寻址)寄存器相对寻址(7 7)基址变址寻址)基址变址寻址(8 8)相对基址变址寻址)相对基址变址寻址存储器寻址存储器寻址 3 .2 .1 3 .2 .1 隐含寻址隐含寻址n隐含寻址隐含寻址有少数指令,操作数不在指令中出现。有少数指令,操作数不在指令中出现。 例:例:PUSH AXPUSH AX; 隐含目的操作数是栈顶字单元,隐含目的操作数是栈顶字单元, 表示把表示把AXAX的内容送入堆栈栈顶的内容送入堆栈栈顶 POP BX POP BX; 隐含源操作数是栈顶字单元隐含源操作数是栈顶字单元 表示把堆栈栈顶的内容弹出并送入表示把堆栈栈顶的内容弹出并送入B BX X 3
6、.2 .2 3 .2 .2 立即寻址立即寻址n8 8位或位或1616位的操作数直接包含在指令中。位的操作数直接包含在指令中。n例:例:MOV BLMOV BL,C3C3H H ;将;将8 8位立即数位立即数C3C3H H传送到传送到BLBL中中 MOV AX MOV AX,20205 50H 0H ;将;将1616位立即数位立即数20205 50H0H传送到传送到AXAX中中n注意:注意:1 1、只能用于源操作数字段,不能用于目的操作数字段、只能用于源操作数字段,不能用于目的操作数字段 MOV MOV C3C3H H,BXBX; (错误)(错误) 2 2、源和目的操作数数据位数一致、源和目的操
7、作数数据位数一致 MOV AH MOV AH,20205 50H0H; (错误)(错误) 3 .2 .3 3 .2 .3 寄存器寻址寄存器寻址n操作数就存放在寄存器内,运算速度较快。操作数就存放在寄存器内,运算速度较快。n例:例:MOV BXMOV BX,CX CX ;将;将CXCX寄存器中的内容复制到寄存器中的内容复制到BXBX中。中。 MOV DS MOV DS,AX AX ;将;将AXAX中的内容复制到中的内容复制到DSDS段寄存器中。段寄存器中。n注意:注意:1 1、CSCS不能用于目的操作数字段不能用于目的操作数字段 MOV CS MOV CS,BXBX; (错误)(错误) 2 2、
8、源和目的操作数数据位数一致、源和目的操作数数据位数一致 MOV AH MOV AH,BXBX; (错误)(错误) 3 .2 .4 3 .2 .4 存储器寻址存储器寻址n直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址,共有寻址、相对基址变址寻址,共有5 5种方式。种方式。n特点:操作数在内存单元中,寻址就是寻找内存单元地址。特点:操作数在内存单元中,寻址就是寻找内存单元地址。 1.1.直接寻址直接寻址n例:例:MOV AXMOV AX,DSDS:2000H 2000H ; MOV AXMOV AX,2000H 2000H
9、 ; 将内存中逻辑地址为将内存中逻辑地址为DSDS:2000H2000H字单元的内容传送到字单元的内容传送到AXAX。默认的操作数段基址由。默认的操作数段基址由DSDS段寄存器确定,段寄存器确定,数据数据段寄存器段寄存器DSDS可以缺省可以缺省。n注意:注意:1 1、数据若存放在数据段以外的其他段中,则必须指定段、数据若存放在数据段以外的其他段中,则必须指定段,如:如:MOV AXMOV AX,ESES:2000H 2000H ;2 2、操作数地址由变量表示时要注意变量属性、操作数地址由变量表示时要注意变量属性 如:如:VALUE DB 10HVALUE DB 10H;给变量;给变量VALUE
10、VALUE分配一个字节,并分配一个字节,并赋予值赋予值10H10H MOV AL,VALUE; MOV AL,VALUE; (正确)(正确) MOV AX,VALUE; MOV AX,VALUE; (错误)(错误) 2 2寄存器间接寻址寄存器间接寻址EA= PA=EA= PA=例:例:MOV AXMOV AX,BX BX MOV AX MOV AX,BP BP 若若DS=3000HDS=3000H,SS=1200HSS=1200H,BX=1000HBX=1000H,BP=2200HBP=2200H则则源操作数的源操作数的PA=PA= 源操作数的源操作数的PA=PA=通常规定:通常规定:若用间址
11、寄存器若用间址寄存器SISI、DIDI、BXBX,则应使用数据段寄存器,则应使用数据段寄存器DSDS。若用间址寄存器若用间址寄存器BPBP,则应使用堆栈段寄存器,则应使用堆栈段寄存器SSSS。BXBXBPBPSISIDIDIDSDS* *10H+BX10H+BXSSSS* *10H+BP10H+BPDSDS* *10H+SI10H+SIDSDS* *10H+DI10H+DIDSDS* *10H+BX10H+BXSSSS* *10H+BP10H+BP2 2寄存器间接寻址寄存器间接寻址注意:注意:(1 1)不允许使用不允许使用AXAX,CXCX,DXDX存放存放EAEA(偏移地址)(偏移地址) 例
12、:例: MOV AXMOV AX,CX CX (错误)(错误)(2 2)源和目的的字长一致)源和目的的字长一致 例:例: MOV MOV DLDL,SI SI 表示把表示把SISI的的PAPA位置的一个位置的一个字节字节送入送入DL DL MOV MOV DXDX,SI SI 表示把表示把SISI的的PAPA位置的一个位置的一个字字送入送入DL DL (3 3)可使用段跨越前缀)可使用段跨越前缀 例:例:MOV MOV ES:BXES:BX,AXAX 则则ES:BXES:BX的的PA=PA=(ESES)* *10H+10H+(BXBX)3. 3. 寄存器相对寻址寄存器相对寻址EA= EA= P
13、A=PA=例:例:MOV AXMOV AX,BXBX5 5 等价于等价于 MOV AXMOV AX,5BX5BX注意:位移量可在前、后、内加、外加。注意:位移量可在前、后、内加、外加。例:例:MOV AXMOV AX,DATBXDATBX等价于等价于 MOV AXMOV AX,BXBXDATDAT若若DS=2000HDS=2000H,BX=1000HBX=1000H,DAT=3000HDAT=3000H则则DATBXDATBX的的PA=DSPA=DS* *10H+BX+DAT10H+BX+DATBX+ BX+ 一个一个8 8或或1616位的位移量位的位移量BP+ BP+ 一个一个8 8或或16
14、16位的位移量位的位移量SI+ SI+ 一个一个8 8或或1616位的位移量位的位移量DI+ DI+ 一个一个8 8或或1616位的位移量位的位移量DSDS* *10H+BX+ 10H+BX+ 一个一个8 8或或1616位的位移量位的位移量SSSS* *10H+BP+ 10H+BP+ 一个一个8 8或或1616位的位移量位的位移量DSDS* *10H+SI+ 10H+SI+ 一个一个8 8或或1616位的位移量位的位移量DSDS* *10H+DI+ 10H+DI+ 一个一个8 8或或1616位的位移量位的位移量4 4基址变址寻址基址变址寻址EA= + EA= + 例:例: MOV AXMOV
15、AX,BXSIBXSI等价于等价于 MOV AXMOV AX,BXBXSISI表示将表示将BXBX与与SISI之和所指定的字存储单元内容送之和所指定的字存储单元内容送AXAX。注意:注意:(1 1)必须是一个基址寄存器和一个变址寄存器的)必须是一个基址寄存器和一个变址寄存器的组合组合例:例:MOV AXMOV AX,BXBP BXBP (错误)(错误) MOV AXMOV AX,SIDI SIDI (错误)(错误)(2 2)可使用段跨越指定段地址)可使用段跨越指定段地址BX SIBX SIBP DIBP DI 5 5相对基址变址寻址相对基址变址寻址EA= + +EA= + +例:例:MOV A
16、XMOV AX,1234HBX1234HBXSI SI 将将BXBX、SISI与与1234H1234H之和所指定的字存储单元内容之和所指定的字存储单元内容送送AXAX。 MOV AXMOV AX,DATEBXDATEBXSISI等价于等价于 MOV AXMOV AX,BXBXSISIDATEDATE等价于等价于 MOV AXMOV AX,DATEBXSIDATEBXSI位移量用变量位移量用变量DATEDATE表示。表示。BX SI BX SI 一个一个8 8位位移量位位移量BP DI BP DI 一个一个1616位位移量位位移量 例:例: MOV AX MOV AX,BXSI6BXSI6 MO
17、V AX MOV AX,6BXSI6BXSI MOV AX MOV AX,6BX6BXSISI MOV AX MOV AX,BXBXSISI66它们之间是等效的。它们之间是等效的。寻址方式有两大类:寻址方式有两大类:n操作数的寻址方式操作数的寻址方式与数据有关,与数据有关,8 8种种n转移地址的寻址方式转移地址的寻址方式与程序转移有关,与程序转移有关,4 4种种(二)转移地址的寻址方式(二)转移地址的寻址方式与程序转移有关与程序转移有关段地址在段地址在CSCS中,偏移地址在中,偏移地址在IPIP中,改变中,改变CS:IPCS:IP,程序走向改变。,程序走向改变。(1 1)段内直接寻址)段内直接
18、寻址(2 2)段内间接寻址)段内间接寻址(3 3)段间直接寻址)段间直接寻址(4 4)段间间接寻址)段间间接寻址段内:转移指令与转向的目标指令在同一代码段(段内:转移指令与转向的目标指令在同一代码段(64K64K)(CSCS)不变,改变()不变,改变(IPIP)段间:转移指令与转向的目标指令在两个代码段(段间:转移指令与转向的目标指令在两个代码段(64K64K)(CSCS)和()和(IPIP)都改变)都改变以无条件转移指令为例:以无条件转移指令为例: JMP JMP 目标标号目标标号 ;表示程序的执行位置无条件跳转到;表示程序的执行位置无条件跳转到 目标标号代表的地址处目标标号代表的地址处 类
19、型类型 PTR PTR 变量变量/ /标号标号 ;表示临时修改变量的类型;表示临时修改变量的类型(1 1)段内直接寻址)段内直接寻址当前当前CSCS不变,不变,新的偏移地址新的偏移地址= =当前(当前(IPIP)+ + 一个一个8 8位或位或1616位的位移量位的位移量例:若(例:若(CSCS)=2000H=2000H,(,(IPIP)=1256H=1256H JMP 1001HJMP 1001H则程序转向去执行则程序转向去执行 PA=PA=(CSCS)* *10H+10H+(IPIP)+1001H +1001H 位置的位置的指令指令(2 2)段内间接寻址)段内间接寻址当前当前CSCS不变不变
20、,新的偏移地址(,新的偏移地址(IPIP)是一个寄存器或一个存储)是一个寄存器或一个存储单元的内容单元的内容例:若(例:若(DSDS)=2000H=2000H,(,(BXBX)=1256H=1256H,(,(SISI)=528FH=528FH,DISP=20A1HDISP=20A1H,(,(232F7H232F7H)=3280H=3280H,(,(264E5H264E5H)=2450H=2450H JMP BXJMP BX指令执行后,新的(指令执行后,新的(IPIP)= =(BXBX)=1256H=1256H JMP WORD PTR DISPBXJMP WORD PTR DISPBX指令执行
21、后,新的(指令执行后,新的(IPIP)是一个存储单元的内容,该)是一个存储单元的内容,该存储单存储单元的元的PA=PA=(DSDS)* *10H+10H+(BXBX)+DISP=232F7H+DISP=232F7H新的(新的(IPIP)= =(232F7H232F7H)=3280H=3280H JMP WORD PTR BXSIJMP WORD PTR BXSI指令执行后,新的(指令执行后,新的(IPIP)是一个存储单元的内容,该存储单)是一个存储单元的内容,该存储单元的元的PA=PA=(DSDS)* *10H+10H+(BXBX)+ +(SISI)=264E5H=264E5H新的(新的(IP
22、IP)= =(264E5H264E5H)=2450H=2450H(3 3)段间直接寻址)段间直接寻址指令直接给出一个新的指令直接给出一个新的CSCS值和新的值和新的IPIP值值例:例: JMP 8000H:1200HJMP 8000H:1200H则程序转向去执行则程序转向去执行 PA=8000HPA=8000H* *10H+1200H 10H+1200H 位置的指令位置的指令(4 4)段间间接寻址)段间间接寻址转向的段地址和偏移地址都在内存中,先找到内存中的这个转向的段地址和偏移地址都在内存中,先找到内存中的这个储存位置,然后再从中取出储存位置,然后再从中取出4 4个字节,低位字是新的个字节,
23、低位字是新的IPIP,高位字是新的高位字是新的CSCS例:若(例:若(DSDS)=4000H=4000H,(,(BXBX)=1212H=1212H,(,(41212H41212H)=1000H=1000H,(41214H41214H)=4A00H=4A00H JMP JMP D DWORD PTR BXWORD PTR BX指令执行后,先找到新的指令执行后,先找到新的CSCS和和IPIP存储的位置:存储的位置:PA=PA=(DSDS)* *10H+10H+(BXBX)=41212H=41212H则(则(IPIP)= =(41212H41212H)=1000H=1000H (CSCS)= =(4
24、1214H41214H)=4A00H=4A00H例:设例:设CS=1200HCS=1200H,IP=0100HIP=0100H,SS=5000HSS=5000H,SP=0400HSP=0400H,DS=2000HDS=2000H,SI=3000HSI=3000H,BX=0300HBX=0300H,(,(20300H20300H)=4800H=4800H,(,(20302H20302H)=00FFH=00FFH,PROG-NPROG-N标号的地址为:标号的地址为:1200H:0278H1200H:0278H,说明下列每条指令执行后,程序将,说明下列每条指令执行后,程序将分别转移到何处执行?分别转
25、移到何处执行?(1 1)JMP PROG-NJMP PROG-N(2 2)JMP BXJMP BX(3 3)JMP BXJMP BX(4 4)JMP DWORD PTRBXJMP DWORD PTRBX3 .2 .5 3 .2 .5 串操作寻址串操作寻址n源数据串存放在源数据串存放在DSDS:SISI中,目的数据串存放在中,目的数据串存放在ESES:DIDI中。中。n源数据串允许段跨越,目的数据串不允许源数据串允许段跨越,目的数据串不允许n例:例:MOVSB MOVSB ;隐含使用;隐含使用SISI和和DIDI实现实现字节字节串传送。串传送。 MOVSW MOVSW ;隐含使用;隐含使用SIS
26、I和和DIDI实现实现字字串传送。串传送。 3 .2 .6 I3 .2 .6 IO O端口寻址端口寻址n访问访问I IO O端口只能使用端口只能使用ININ(输入)和(输入)和OUTOUT(输出)指(输出)指令。令。 1.1.端口直接寻址端口直接寻址n例:例:IN ALIN AL,20H 20H ;从值为;从值为20H20H的端口地址中读取的端口地址中读取数据输入到数据输入到ALAL。 IN AXIN AX,20H 20H ;从值为;从值为20H20H和和21H21H端口地址中读取端口地址中读取数据输入到数据输入到AXAX。 若若20H20H端口的内容是端口的内容是80H,21H80H,21H
27、端口内容为端口内容为40H,40H,。则指。则指令执行后,令执行后,AHAH40H40H,ALAL80H80H 2.2.端口间接寻址端口间接寻址n当当I IO O端口地址端口地址大于大于8 8位二进制数范围位二进制数范围时,只能采时,只能采用间接寻址方式,必须使用间址寄存器用间接寻址方式,必须使用间址寄存器DXDX存放存放I IO O端口的地址码。端口的地址码。n例:例: MOV DXMOV DX,220H220H; 将端口地址将端口地址220H220H送到送到DXDX寄存器。寄存器。 OUT DXOUT DX,ALAL ; 将将ALAL中一个字节的内容输出到中一个字节的内容输出到由由DXDX
28、寄存器所指的端口即寄存器所指的端口即220H220H。 3 .3 80863 .3 808680888088指令系统指令系统8086/80888086/8088的指令系统中共有的指令系统中共有9292种基本指令,种基本指令,分为分为6 6大类:大类:(1 1)数据传送)数据传送(2 2)算术运算)算术运算(3 3)逻辑运算和移位指令)逻辑运算和移位指令(4 4)串操作)串操作(5 5)控制转移)控制转移(6 6)处理器控制)处理器控制3 .3 .1 3 .3 .1 数据传送类指令数据传送类指令n这类指令完成数据、地址等的传送操作。这类指令完成数据、地址等的传送操作。 (一)、通用数据传送指令(
29、一)、通用数据传送指令 (二)、输入输出指令(二)、输入输出指令 (三)、地址传送指令(三)、地址传送指令 (四)、标志寄存器传送指令(四)、标志寄存器传送指令(一)通用传送指令(一)通用传送指令(MOVMOV、XCHGXCHG、PUSHPUSH、POPPOP、XLATXLAT)1 1、一般传送指令、一般传送指令MOVMOV指令格式:指令格式:MOV MOV 目的,源目的,源指令功能:将源操作数传送到目的操作数指令功能:将源操作数传送到目的操作数MOVMOV指令数据传送方向指令数据传送方向段寄存器段寄存器CS、DS、SS、ES通用寄存器通用寄存器AX、BX、CX、DX、BP、SP、SI、DI存
30、储器存储器立即数立即数使用使用MOVMOV指令注意事项指令注意事项:(1 1)立即数只能作为源操作数。)立即数只能作为源操作数。(2 2)两个存储单元之间不能直接互相传送,要传送必须)两个存储单元之间不能直接互相传送,要传送必须通过中介寄存器进行。通过中介寄存器进行。例:例:MOV mem2MOV mem2,mem1 mem1 (错误)(错误) MOV AXMOV AX,mem1mem1 MOV mem2 MOV mem2,AX AX (正确)(正确)(3 3)两个段寄存器两个段寄存器之间不能直接互相传送,要传送必须之间不能直接互相传送,要传送必须通过中介寄存器进行。通过中介寄存器进行。例:例
31、:MOV ESMOV ES,DS DS (错误)(错误) MOV AXMOV AX,DSDS MOV ES MOV ES,AX AX (正确)(正确)(4 4)立即数不能直接传送给段寄存器,必须借助通用寄)立即数不能直接传送给段寄存器,必须借助通用寄存器。存器。例:例:MOV DSMOV DS,2000H 2000H (错误)(错误) MOV AXMOV AX,2000H2000H MOV DS MOV DS,AX AX (正确)(正确)(5 5)源和目的两个操作数必须保持数据位数相匹配。)源和目的两个操作数必须保持数据位数相匹配。例:例:MOV ALMOV AL,BX BX (错误)(错误)
32、 MOV AXMOV AX,CS CS (正确)(正确)(6 6)CSCS不能作为目的操作数,不能作为目的操作数,IPIP和和FLAGSFLAGS不能作为源或不能作为源或目的操作数。目的操作数。例:例:MOV CSMOV CS,AX AX (错误)(错误) MOV AXMOV AX,IP IP (错误)(错误) MOV IPMOV IP,AX AX (错误)(错误) MOV AXMOV AX,CS CS (正确)(正确)2 2、数据交换指令、数据交换指令XCHGXCHG指令格式:指令格式:XCHG XCHG 目的,目的, 源源指令功能:寄存器之间、寄存器与存储器之间指令功能:寄存器之间、寄存器
33、与存储器之间内容互换。内容互换。注意:注意:n存储器之间不能交换存储器之间不能交换n段寄存器不能作为操作数段寄存器不能作为操作数例:例: XCHG BXXCHG BX,DI DI (错误)(错误) XCHG DSXCHG DS,AX AX (错误)(错误)3 3、堆栈操作指令、堆栈操作指令PUSHPUSH、POPPOP注意:注意:(1 1)堆栈操作必须以字为单位)堆栈操作必须以字为单位(2 2)PUSHPUSH和和POPPOP指令应该成对使用,保持堆栈原指令应该成对使用,保持堆栈原有状态有状态(3 3)不能用立即寻址)不能用立即寻址例:例:PUSH 1234H PUSH 1234H (错误)(
34、错误) POP 1234H POP 1234H (错误)(错误)(4 4)POPPOP指令操作数不能是指令操作数不能是CSCS例:例:POP CS POP CS (错误)(错误)(5 5)入栈内容和弹出内容正好相反)入栈内容和弹出内容正好相反PUSH AXPUSH AXPUSH BX PUSH BX ;保护现场;保护现场. . ;其间用到;其间用到AXAX和和BXBX寄存器寄存器POP BXPOP BXPOP AX POP AX ;恢复现场;恢复现场4 4、查表换码指令、查表换码指令XLATXLATXLATXLAT是一条直接查表并读表格中元素值的指令。是一条直接查表并读表格中元素值的指令。查表
35、的默认段为查表的默认段为DSDS,若表格不在当前默认的,若表格不在当前默认的DSDS段中,指令就应该提供带有段跨越前缀的操作段中,指令就应该提供带有段跨越前缀的操作数。数。指令格式:指令格式:XLAT XLAT 表名(可省略)表名(可省略) 指令功能:将段基地址默认为指令功能:将段基地址默认为DSDS,偏移地址为,偏移地址为BXBXALAL的内存单元的字节内容送至的内存单元的字节内容送至ALAL。(即将表。(即将表中的一个字节内容传送到中的一个字节内容传送到ALAL中)。中)。指令操作过程:指令操作过程:(1 1)建立一个换码表,其最大容量为()建立一个换码表,其最大容量为(0 0255255
36、)共)共256256字节。将字节。将表首址的偏移地址置入表首址的偏移地址置入BXBX。(2 2)将要转换的字节单元在)将要转换的字节单元在表中的序号(从表中的序号(从0 0算起)算起)送入送入ALAL。偏移地址。偏移地址EAEABXBXALAL。(3 3)将)将DSDS* *10H+BX+AL10H+BX+AL存储单元的字节存储单元的字节内容再送到内容再送到ALAL中,中,此时此时ALAL内容就是查表的结果。内容就是查表的结果。(1 1)设)设DSDSA000HA000H,表中元素存放,已知程序,表中元素存放,已知程序段如下:段如下:MOV BXMOV BX,0010H0010HMOV ALM
37、OV AL,06H06HXLATXLAT求指令运行的结果?求指令运行的结果? XLATXLAT指令操作示意图指令操作示意图 查表中序号查表中序号为为6 6的元素的元素 要求把存储单元要求把存储单元MEM1MEM1和和MEM2MEM2两个字数据互换。两个字数据互换。解:实现存储单元解:实现存储单元MEM1MEM1和和MEM2MEM2之间内容交换的几种方案。之间内容交换的几种方案。方案方案1 1:用:用MOVMOV指令指令MOV AXMOV AX, MEM1 MEM1MOV BXMOV BX, MEM2MEM2MOV MEM1MOV MEM1, BX BX MOV MEM2MOV MEM2, AX
38、AX方案方案2 2:用:用XCHGXCHG指令指令MOV AXMOV AX, MEM1MEM1XCHG AXXCHG AX, MEM2MEM2MOV MEM1MOV MEM1, AXAX方案方案3 3:用:用PUSHPUSHPOPPOP指令指令PUSH MEM1PUSH MEM1PUSH MEM2PUSH MEM2POP MEM1POP MEM1POP MEM2POP MEM22 2输入、输出指令输入、输出指令ININ、OUTOUTININ和和OUTOUT指令为指令为累加器专用累加器专用的传送指令。的传送指令。 (1 1)输入指令)输入指令ININ指令格式:指令格式:IN IN 累加器,端口地
39、址累加器,端口地址指令功能:把指定端口中的一个数据(字节或字)输入至指令功能:把指定端口中的一个数据(字节或字)输入至ALAL或或AXAX。当端口地址号为当端口地址号为00H00HFFHFFH时,可用直接寻址方式(或者间时,可用直接寻址方式(或者间接寻址方式)接寻址方式)当端口地址号为当端口地址号为100H100HFFFFHFFFFH,只可用间接寻址方式。使用,只可用间接寻址方式。使用DXDX作间址寄存器。作间址寄存器。例:例:IN ALIN AL,20H20H;从;从20H20H端口输入一个字节至端口输入一个字节至ALALIN AXIN AX,20H20H;从;从20H20H和和21H21H
40、两个端口输入一个字至两个端口输入一个字至AXAXIN ALIN AL,DXDXIN AXIN AX,DXDX(2 2)输出指令)输出指令OUTOUT指令格式:指令格式:OUT OUT 端口地址,累加器端口地址,累加器指令功能:把累加器指令功能:把累加器ALAL(字节)或者(字节)或者AXAX(字)中(字)中的数据输出到指定的端口。的数据输出到指定的端口。例:例:OUT 20HOUT 20H,ALAL;将;将ALAL中一字节输出到中一字节输出到20H20H端口端口OUT 20HOUT 20H,AXAX;将;将AXAX中一个字输出到中一个字输出到20H20H端口和端口和21H21H端口端口OUT
41、DXOUT DX,ALALOUT DXOUT DX,AXAX例:实现例:实现28H28H和和29H29H端口输入一个字到端口输入一个字到DATAWORDDATAWORD变变量量 IN AXIN AX,28H28H MOV DATAWORD MOV DATAWORD,AXAX例:从端口例:从端口3FCH3FCH送一个字到送一个字到AXAX寄存器寄存器 MOV DXMOV DX,3FCH3FCH IN AX IN AX,DX DX ;(;(ALAL)(3FCH3FCH) (AHAH)(3FDH3FDH) 例:设数字例:设数字0 09 9的的ASCIIASCII码(其最高位带奇校验位)依码(其最高位
42、带奇校验位)依次存放在内存中次存放在内存中ASCASC开始的存储区。现从开始的存储区。现从9 9号端口输号端口输入任意一位十进制数,要求将该十进制数转换为相入任意一位十进制数,要求将该十进制数转换为相应的带奇校验的应的带奇校验的0 09 9的的ASCIIASCII码并再输出到码并再输出到9 9号端口,号端口,试编此程序段。试编此程序段。解:设解:设DSDS1000H1000H,ASCASC的编码地址的编码地址PAPA10030H10030H程序段:程序段:MOV AXMOV AX,1000H1000HMOV DSMOV DS,AXAXMOV BXMOV BX,0030H0030HIN ALIN
43、 AL,09H 09H ;从;从09H09H端口输入待查值端口输入待查值ALAL06H06HXLAT XLAT ;查表转换;查表转换OUT 09HOUT 09H,AL AL ;查表结果输出到;查表结果输出到09H09H端口。端口。若若9 9号端口输入值为号端口输入值为6 6,则查表换码后输出值为,则查表换码后输出值为B6HB6H。 XLATXLAT查表示意图查表示意图3 3目标地址传送指令目标地址传送指令LEALEA、LDSLDS、LESLES(1 1)LEALEA指令指令 指令格式:指令格式:LEA 16LEA 16位通用寄存器,存储器操作数位通用寄存器,存储器操作数功能:把存储器操作数的功
44、能:把存储器操作数的1616位位偏移地址偏移地址装入装入1616位通用寄位通用寄存器。存器。例:例: LEA SP LEA SP,0500H 0500H ;SP0500HSP0500H LEA BXLEA BX,1000H 1000H ;BX1000HBX1000H LEA BX LEA BX,BXBXSISI06H 06H ;BXBXBXBXSISI06H06H例:例:LEA BXLEA BX,AREA AREA ;AREAAREA是变量名,是变量名,BXAREABXAREA的偏移量的偏移量LEA BXLEA BX,AREA AREA ;把;把AREAAREA的偏移地址取到的偏移地址取到BX
45、BX等价于等价于MOV BXMOV BX,OFFSET AREAOFFSET AREA(2 2)LDSLDS指令指令指令格式:指令格式:LDS LDS 通用寄存器(通常是通用寄存器(通常是SISI),存储器操作数),存储器操作数指令功能:指令功能:SISI存储器单元的存储器单元的低地址字低地址字内容内容 DSDS存储器单元的存储器单元的高地址字高地址字内容内容用于指定段基址值和偏移地址值用于指定段基址值和偏移地址值例:例:LDS SILDS SI,2130H 2130H 设设DSDS3000H3000H,(32130H32130H)3C1F3C1FH H 字存储单元字存储单元32130H321
46、30H的内容为的内容为3C1FH3C1FH;(32132H32132H)2000H 2000H 字存储单元字存储单元32132H32132H的内容为的内容为2000H2000H。则在指令执行后,则在指令执行后,SISI3C1FH3C1FH(偏移地址);(偏移地址);DSDS2000H2000H(段(段基址)基址)(3 3)LESLES指令:指令:指令格式:指令格式:LES LES 通用寄存器(通常是通用寄存器(通常是DIDI),存储器操作数),存储器操作数指令功能:指令功能:DIDI存储器单元的存储器单元的低地址字低地址字内容内容 ESES存储器单元的存储器单元的高地址字高地址字内容内容用于指
47、定段基址值和偏移地址值用于指定段基址值和偏移地址值例:例:LES DILES DI,BXBX 设设DSDSB000HB000H,BXBX080AH080AH, (B080AHB080AH)05AEH 05AEH 字存储单元字存储单元B080AHB080AH的内容为的内容为05AEH05AEH;(B080CHB080CH)4000H 4000H 字存储单元字存储单元B080CHB080CH的内容为的内容为4000H4000H。 则指令执行后,则指令执行后,DIDI05AEH05AEH,ESES4000H4000H目标地址传送指令目标地址传送指令常用于在常用于在串操作串操作时建立初始的地址指针。时
48、建立初始的地址指针。4 4标志传送指令(标志传送指令(无操作数无操作数)(1 1)LAHFLAHF指令格式:指令格式:LAHFLAHF指令功能:指令功能:AHFLAGSAHFLAGS低低8 8位(位(SFSF、ZFZF、AFAF、PFPF、CFCF)(2 2)SAHFSAHF指令格式:指令格式:SAHFSAHF指令功能:指令功能:FLAGSFLAGS对应位对应位 AHAH的第的第7 7、6 6、4 4、2 2、0 0位位(3 3)PUSHFPUSHF指令格式:指令格式:PUSHFPUSHF指令功能:指令功能:FLAGSFLAGS(1616位)内容入堆栈位)内容入堆栈 SPSPSPSP2 2 S
49、S SS10H10HSPSP1FLAGS1FLAGS高高8 8位位 SSSS10H10HSPFLAGSSPFLAGS低低8 8位位(4 4)POPFPOPF指令格式:指令格式:POPFPOPF指令功能:将堆栈内容弹出到指令功能:将堆栈内容弹出到FLAGSFLAGS(1616位)位) FLAGSFLAGS低低8 8位位(SSSS10H10HSPSP) FLAGSFLAGS高高8 8位位(SSSS10H10HSPSP1 1);); SPSPSPSP2 2PUSHFPUSHF和和POPFPOPF指令成对使用,可使各标志位恢复为入栈指令成对使用,可使各标志位恢复为入栈前的状态,用于保护和恢复调用子程序
50、前后标志寄存前的状态,用于保护和恢复调用子程序前后标志寄存器的内容。器的内容。 3 .3 .2 3 .3 .2 算术运算类指令算术运算类指令n包括加法指令、减法指令、乘法指令、除包括加法指令、减法指令、乘法指令、除法指令、十进制调整指令法指令、十进制调整指令n对标志位一般有影响对标志位一般有影响n算术运算双操作数指令:算术运算双操作数指令: 除了除了目的为寄存器目的为寄存器/ /存储器,源为立即数存储器,源为立即数 其他情况其他情况必须有一个操作数为寄存器必须有一个操作数为寄存器 n算术运算类指令算术运算类指令目的不能为目的不能为CSCSn算术运算算术运算单操作数指令单操作数指令操作数操作数不
51、能为立即不能为立即数数1 1加法指令加法指令(1 1)不带进位加法指令)不带进位加法指令ADDADD指令格式:指令格式:ADD ADD 目的,源目的,源指令功能:目的指令功能:目的目的目的+ +源源用于单字运算用于单字运算(2 2)带进位加指令)带进位加指令ADCADC指令格式:指令格式:ADC ADC 目的,源目的,源指令功能:目的指令功能:目的目的目的+ +源源+ +上次运算后的上次运算后的CFCF主要用于多字节数的加法运算,并影响标志位,运算前应清主要用于多字节数的加法运算,并影响标志位,运算前应清CFCF。(3 3)加)加1 1指令指令INCINC指令格式:指令格式:INC INC 目
52、的目的指令功能:目的指令功能:目的目的目的+1+1常用于循环程序中修改地址指针或循环次数。常用于循环程序中修改地址指针或循环次数。目的:寄存器(不能为段寄存器)、存储器目的:寄存器(不能为段寄存器)、存储器源:寄存器、存储器、立即数源:寄存器、存储器、立即数例:双精度数加法实现例:双精度数加法实现0002 F365H+0005 E024H0002 F365H+0005 E024H 设(设(DX,AXDX,AX)=0002 F365H=0002 F365H (BX,CXBX,CX)=0005 E024H=0005 E024H 则指令应为:则指令应为:ADD AXADD AX,CX CX ;执行后
53、;执行后CF=1CF=1ADC DXADC DX,BX BX ;DX0002+0005+1DX0002+0005+1 执行后(执行后(DX,AXDX,AX)=0008 D389H=0008 D389H2 2减法指令减法指令(1 1)不带借位减法指令)不带借位减法指令SUBSUB指令格式:指令格式:SUB SUB 目的,源目的,源指令功能:目的指令功能:目的目的目的- -源源用于单字运算用于单字运算(2 2)带借位减法指令)带借位减法指令SBBSBB指令格式:指令格式:SBB SBB 目的,源目的,源指令功能:目的指令功能:目的目的目的- -源源- -上次运算后的上次运算后的CFCF主要用于多字
54、节数的加法运算,并影响标志位,运算前应清主要用于多字节数的加法运算,并影响标志位,运算前应清CFCF。(3 3)减)减1 1指令指令DECDEC指令格式:指令格式:DEC DEC 目的目的指令功能:目的指令功能:目的目的目的-1-1常用于循环程序中修改地址指针或循环次数。常用于循环程序中修改地址指针或循环次数。目的:寄存器(不能为段寄存器)目的:寄存器(不能为段寄存器) 、存储器、存储器源:寄存器、存储器、立即数源:寄存器、存储器、立即数例:例:x,y,zx,y,z均为均为3232位双精度数,分别存放的地址为位双精度数,分别存放的地址为X X、X+2X+2; Y Y、Y+2Y+2;Z Z、Z+
55、2Z+2的字存储单元中,用一组指令实现算术表的字存储单元中,用一组指令实现算术表达式达式x+y-z+24x+y-z+24,并用,并用W W、W+2W+2字存储单元存放。字存储单元存放。 MOV AX,X MOV AX,X MOV DX,X+2 MOV DX,X+2 ADD AX,Y ADD AX,Y ADC DX,Y+2 ADC DX,Y+2 ;x+yx+y SUB AX,Z SUB AX,Z SBB DX,Z+2 SBB DX,Z+2 ;x+y-zx+y-z ADD AX,24 ADD AX,24 ADC DX,0ADC DX,0 ;x+y-z+24x+y-z+24 MOV W,AX MOV
56、 W,AX MOV W+2,DX MOV W+2,DX ;用;用W W、W+2W+2字存储单元存放字存储单元存放(5 5)比较指令)比较指令 CMP CMP 指令格式:指令格式: CMP CMP 目的,源目的,源指令功能:目的指令功能:目的- -源,产生标志源,产生标志通过两个操作数的相减产生的标志来比较两数是否相等通过两个操作数的相减产生的标志来比较两数是否相等比较参考标志:比较参考标志:1 1、无符号数:、无符号数:CF=0CF=0(无借位),目的(无借位),目的 源源2 2、两个正数:、两个正数:SF=0SF=0(减后结果为正数),目的(减后结果为正数),目的 源源3 3、两个符号数:、
57、两个符号数: OF=0 OF=0(无溢出)且(无溢出)且SF=0SF=0(符号位为(符号位为0 0),目的),目的 源源 OF=1 OF=1(有溢出)且(有溢出)且SF=1SF=1(符号位为(符号位为1 1),目的),目的 源源 即即OFOF SF=0SF=0,目的,目的 源源4 4、任意两个数:、任意两个数:ZF=1ZF=1(减后结果为(减后结果为0 0),目的),目的= =源源3 3乘法指令乘法指令(1 1)无符号数乘法指令)无符号数乘法指令 MUL MUL指令格式:指令格式:MUL MUL 源(寄存器源(寄存器/ /存储器)存储器)(2 2)有符号数乘法指令)有符号数乘法指令 IMUL
58、IMUL指令格式:指令格式:IMUL IMUL 源(寄存器源(寄存器/ /存储器)存储器)指令功能:指令功能:字节乘:(字节乘:(AXAX)(ALAL)* *(8 8位源)位源)字乘:(字乘:(DXDX,AXAX)(AXAX)* *(1616位源)位源)指令执行后:指令执行后:OF=CF=0OF=CF=0表示运算结果的高一半为表示运算结果的高一半为0 0OF=CF=1OF=CF=1表示运算结果的高一半(表示运算结果的高一半(AHAH或或DXDX)包含有效)包含有效数字数字例:设例:设ALALA5HA5H(即(即5BH5BH的补码)的补码) BL BL11H11H执行指令执行指令 MUL BL
59、MUL BL ;AXALAXAL* *BLBLA5HA5H* *11H11H0AF5H0AF5H ;AXAX0AF5H0AF5H, CFCFOFOF1 1执行指令执行指令IMUL BLIMUL BL ;AXALAXAL* *BLBL5BH5BH* *11H11H060BH060BHF9F5HF9F5H ;AXAXF9F5HF9F5H, CFCFOFOF1 1 4 4除法指令除法指令(1 1)无符号数除法指令)无符号数除法指令 DIV DIV指令格式:指令格式:DIV DIV 源(寄存器源(寄存器/ /存储器)存储器)(2 2)有符号数除法指令)有符号数除法指令 IDIV IDIV指令格式:指令
60、格式:IDIV IDIV 源(寄存器源(寄存器/ /存储器)存储器)指令功能:指令功能:字除以字节:(字除以字节:(ALAL)(AXAX)/ /(8 8位源)位源) (AHAH)余数余数双字除以字:(双字除以字:(AXAX)(DXDX,AXAX)/ /(1616位源)位源) (DXDX)余数余数注意:注意:被除数的位数必须是除数的两倍,两者位数相同则应被除数的位数必须是除数的两倍,两者位数相同则应先对被除数进行位数转换。先对被除数进行位数转换。(3 3)扩展指令)扩展指令 CBW CBW,CWD CWD 指令格式:指令格式:CBWCBW指令功能:指令功能: ALAX ALAX 字节扩展成字字节
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 增强项目管理能力的计划
- 生物观察记录活动安排计划
- 利用数据分析提升决策水平计划
- 小班班级制度与规章落实计划
- 七年级必须收藏:名著《西游记》每回检测题(76至80回)
- 广东省部分重点高中2024-2025学年高二上学期第二次段考生物试题含答案
- 主管年度工作计划的市场分析和竞争优势
- 跨国知识产权争议解决的国际合作与协调
- 高科技与新能源共同打造绿色未来办公室
- 跨区域电商的消费者信任体系建设
- 股骨颈骨折ppt精品
- 2023年江苏农牧科技职业学院单招职业适应性测试题库及答案解析
- 毛泽东诗词鉴赏分析
- 小学数学-纳税教学设计学情分析教材分析课后反思
- 量具检具清单
- YY/T 1833.2-2022人工智能医疗器械质量要求和评价第2部分:数据集通用要求
- 光催化原理(经典)课件
- 苏科版初中物理实验目录
- 如何上好一堂课(课件)
- 动车组列车乘务人员实务教材课件
- 西方文艺理论史精读文献课件
评论
0/150
提交评论