微机原理第三章指令系统课件_第1页
微机原理第三章指令系统课件_第2页
微机原理第三章指令系统课件_第3页
微机原理第三章指令系统课件_第4页
微机原理第三章指令系统课件_第5页
已阅读5页,还剩191页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章8086指令系统

指令格式8086寻址方式8086指令系统第三章8086指令系统

1汇编语言指令格式与寻址方式汇编语言指令格式标号、标示符指令助记符操作数注释指令助记符操作数汇编语言指令格式与寻址方式指令助记符操作数28086的寻址方式(重点!!!!)对操作数寻址对调用或转移指令寻址一、立即数寻址:操作数由指令提供.例:MOVAL,80HMOVAX,1090HMOVCX,1008086的寻址方式(重点!!!!)3二、直接寻址

操作数在存储器中,其地址由指令提供。例:MOVAX,[1070H]MOVBX,CS:[3000H]MOVAH,[1000H]二、直接寻址4三、寄存器寻址操作数在寄存器中。

MOVAH,BLMOVAX,BXMOVCX,AX三、寄存器寻址5四、寄存器间接寻址

操作数在存储器中,存储器的有效地址由寄存器指出。EA=+8或16位移量[BX];段为DS[BP];段为SS[SI];段为DS[DI];段为DS或ES四、寄存器间接寻址EA=+8或16位移量[BX]61、以BX寄存器进行间接寻址

例:若DS=2000H,ES=3000H,BX=1000H1)MOVAX,[BX]AX←[21000H][21001H]

MOVCX,ES:[BX]

AX←[31000H][31001H]1、以BX寄存器进行间接寻址72、以BP寄存器进行间接寻址MOVAX,[BP]若SS=5000H,BP=3000H,将53020H、53021H单元的内容送AX。执行结果:AX=4A56H53000H53001H56H4AH2、以BP寄存器进行间接寻址53000H56H4AH83、以SI、DI寄存器进行间接寻址——变址寻址1)MOVAX,[SI]若DS=3000H,SI=4000H,EA=4000H,物理地址=34000H,执行结果:AX=201AH2)MOVBX,[DI]若DS=5000H,DI=0200H执行结果:BX[50201H][50200H]BX=3220H34000H34001H1AH20H50200H50201H20H32H3、以SI、DI寄存器进行间接寻址——变址寻址34000H94、以BX、BP和SI、DI寄存器组合起来进行间接寻址——基址加变址的寻址

例:若BX=5000H,SI=2000H,DS=4000H,SS=1000H,BP=3100H。

MOVAX,[BX+SI];

EA=5000+2000=7000H, AX[47001H][47000H] AX=2A32HEA=+[BX] [SI][BP] [DI]4、以BX、BP和SI、DI寄存器组合起来进行间接寻址——基10相对的基址加变址的寻址:MOVAX,[BP+SI+0020H];

EA=3100+2000+0020=5120H相对的基址加变址的寻址:11例:设BX=0158H,DI=10A5H,DS=2100H,位移量=1B57H,DS作为操作数的段寄存器。1)直接寻址:MOVAX,[1B57H]有效地址=1B57H物理地址=21000H+1B57H=22B57H2)寄存器间接寻址:MOVAX,[BX]有效地址=0158H物理地址=21000H+0158H=21158H3)BX寄存器相对间接寻址: MOVAX,[BX+1B57H]有效地址=0158H+1B57H=1CAFH物理地址=21000H+1CAFH=22CAFH4)变址寻址:MOVAX,[DI]例:设BX=0158H,DI=10A5H,DS12有效地址=105AH物理地址=21000H+105AH=220A5H5)DI寄存器相对变址寻址: MOVAX,[DI+1B57H]有效地址=105AH+1B57H=2BFCH物理地址=21000H+2BFCH=23BFCH6)基址加变址的寻址:MOVAX,[BX+DI]有效地址=0158H+105AH=11FDH物理地址=21000H+11FDH=221FDH7)相对的基址加变址的寻址:MOVAX,[BX+DI+1B57H]有效地址=0158H+105AH+1B57H=2D54H物理地址=21000H+2D54H=23D54H有效地址=105AH131、若SS=1000H,BP=2000H,DS=5000H,BX=4000H,说明下列指令的执行结果。MOVAX,2C10HMOVAX,[2C10H]MOVAX,[BX+1C00H]]MOVBX,[BP+0120H]MOVAX,[BP+SI]MOVAH,[BX+SI]1、若SS=1000H,BP=2000H,DS=5000H,14数据传送指令MOVLEAPUSHLDSPOPLESXCHGLAHFPUSHFXLATSAHFPOPFINOUT数据传送指令MOVLEA151.通用型(1).MOV传送指令格式:MOVdst,src;dstsrc

例:MOVDS,AX;DSAXMOVCH,20;CH20MOVBL,AH;BLAHMOVAX,[BX];AX[BX]MOV[DX],AX;[DX]AXMOVAX,[BX+0060H]

(2)堆栈操作指令PUSHsrc;把src推入堆栈POPsrc;把src弹出堆栈1.通用型16C31201006H01007H01008H01009HSP(原栈顶)SP-2(新栈顶)SP例:设SS=0100H,SP=0009H,AX=12C3H,BX=5070H

PUSHAX;[1]SPSP-2[2][41008][41007H]AX

01000009SSSP16-2C31201006HSP(原栈顶)SP-2(新栈顶)S17POPAX;将栈顶两单元内容送AX;SPSP+2

01000007SSSP16+2C31201006H01007H01008H01009HSP+2(新栈顶)SP12C3AXSP(原栈顶)POPAX;将栈顶两单元内容送AX010018例:

PUSHAXPUSHBX…….POPBXPOPAX注:1)8086的堆栈操作是按字进行的。2)每执行一条推入堆栈指令,SP减2。执行弹出指令时,刚好相反,每弹出1个字,SP的值加2。3)CS的值可以推入堆栈,但不能从堆栈中弹出1个字到CS寄存器。4)堆栈中的内容是按后进先出的原则进行传的。例:PUSHAX19例(3)、交换指令格式:XCHGdst,src

XCHGAX,BXXCHGAL,BHXCHGBX,[1000H]XCHG[2100H],DHXCHGSI,AX注意:1、dst与src不能同时为内存单元;2、不能使用CS、IP作为操作数。例(3)、交换指令20(4)、换码指令格式:XLAT(无参数);AL[BX+AL]

使累加器中的一个值变换为内存表格中的某一个值。用来实现编码制的转换。要求:BX寄存器指向表的首地址,AL中为位移量。BX+0BX+1BX+2BX+AL+BXAL(4)、换码指令BX+0+BXAL21十进制数gfedcba

00100000040H10111100179H20010010024H30011000030Hafgbecd十进制数gfed22十进制数字0~9转换成七段显示码的译码表,现在要取 3的对应的七段译码。

MOVAL,3MOVBX,2000HXLAT

执行XLAT指令后:AL=30H例2000h40792430191202780010例2000h40232、目标地址传送指令(1)取有效地址LEAreg16,men16LEAAX,[1000H];AX=1000HLEASP,[0500H];SP=0500HLEA,BX,[BP+SI](2)将地址指针送DS和另一寄存器:

LDSreg16,men32

后2个字节送DS,前2个字节送寄存器。

LESreg16,mem32

后2个字节送ES,前2个字节送寄存器。2、目标地址传送指令24LDSDI,[2100H]2100H2101H2102H2103H3104H1CH20H21HB5HDI=201CHDS=B521HLDSDI,[2100H]2100H1CHDI=225D7D6D5D4D3D2D1D0SFZFAFPFCFFLAG3、标志传送1)、读标志:LAHF;将标志送AH置标志:SAHF;将AH送标志寄存器D7D6D5D4D3D226(2)、PUSHF:把标志推入堆栈。SPSP-2,FLAGH入栈

(3)、POPF:把标志弹出堆栈。FLAG[SP+1],[SP]SPSP+2(2)、PUSHF:把标志推入堆栈。27微机原理第三章指令系统课件28例4、输入输出指令1)、直接寻址INAL,nOUTn,ALINAX,NOUTN,AX寻址空间为:0~255字节INAL,20HINAX,30HOUT46H,ALOUT80H,AX例4、输入输出指令29例2)、间接寻址INAL,DXOUTDX,ALINAX,DXOUTDX,AX寻址空间为:0000H~FFFFHMOVDX,1000HINAL,DX

INAX,DXOUTDX,AL例2)、间接寻址30数据操作指令算术运算指令加法:ADD、ADC、INC减法:SUB、SBB、DEC、DAS乘法:MUL、IMUL、AAM除法:DIV、IDIV、AAMAAA、DAA、DAS、AAM、AAM数据操作指令算术运算指令31加法指令1)不带进位位的加法格式:ADDDST,SRCDSTDST+SRC例:(1).ADDAL,50H;ALAL+50H(2).ADDCX,1000H;CXCX+1000H(3).ADDDI,SI;DIDI+SI(4).ADD[BX+DI],AXBX=1000H,DI=2000H,AX=1234HEA=BX+DI=3000H1234+4025H=5259H[3000H]5259H

加法指令1)不带进位位的加法322).带进位位的加法

格式:ADCDST,SRCDSTDST+SRC+CF

例:ADCAX,SI;AXAX+SI+CFADCDX,[SI];DXDX+[SI]+CF

ADCBX,3000HBXBX+3000H+CFADCAL,5ALAL+5+CF2).带进位位的加法33例:有两个4字节无符号数放在2000H和3000H单元中,低位在前,高位在后,将两个数相加,结果放2000H开始的单元中。

10008432H+20007F00H=?1).算法分析:1).可以将两个4字节无符号数相加看成2个字相加;2).两个数的低位字相加后,将可能产生进位CF;3).高位字相加,应再加上进位位;2000H3000H32840010007F0020SIDI例:有两个4字节无符号数放在2000H和3000H单元中,低342)程序:

CLC;清进位MOVSI,2000H;取第一个数的首地址MOVAX,[SI];第一个数的低16位送到AXMOVDI,3000H;取第二个字的首地址ADDAX,[DI];第一个数和第二个数相加MOV[SI],AX;送低16位结果2000H单元MOVAX,[SI+2];第二个数的高16位送AXADCAX,[DI+2];高16位数据相加MOV[SI+2],AX2)程序:353).加一指令

格式:INCsrcsrcsrc+1

将操作数内容加一,再回送操作数。

INCAX;AXAX+1INCBL;BLBL+1INCBYTEPTR[BX+DI+500]注意:INC指令影响标志AF、OF、PF、SF、ZF,

但不影响进位标志CF。3).加一指令36减法指令(1)不带借位的减法

格式:SUBDST,SRCDSTDST-SRC例:SUBBX,CXSUB[BP+2],CLSUBAL,20SUBSI,5010HSUBWORDPTR[DI],1000H

减法指令(1)不带借位的减法37(2)带借位的减法格式:SBBDST,SRCDSTDSTSRCCF

例:SBBAX,2030H;执行:AXAX2030HCFSBBWORDPTR[DI+2],1000H;SBBDX,[BX+20H]

(3)减量指令

将操作数内容减一,再回送操作数。格式:DECDST;DSTDST1

例:DECAXDECBLDECBYTEPTR[DI+2]

(2)带借位的减法384)求补指令

格式:NEGDST对DST求补,0-DST例:NEGAL;对AL中的数求补,结果送ALNEGCX;对CX中的数求补,结果送CX

5)比较指令

格式:CMPDST,SRC;DST-SRC

注意:CMP指令执行相减,但不回送结果,结果只影响标志位CF、OF、SF、ZF。4)求补指令39二进制乘法特点:

两个8位数相乘,结果为16位数。两个16位数相乘,结果为32位数。€

8086乘法指令特点:

一个乘数总是放在AL(8位)或AX(16位)中;将DX看成是AX的扩展二进制乘法特点:40乘法指令:无符号数MUL

有符号数IMUL例:3×(-2)=63×14=42(2AH)3的补码:0011,-2的补码:111014的补码:11101)直接相乘:对无符号数,结果正确。0011(3)

×1110(-2或14)00101010(2A)

乘法指令:无符号数MUL

有符号数IMU412)有符号相乘:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补码。

0011(3)

×0010(2)00000110(6)

结果添上负号,10000110,再取补码:11111001+1=11111010=0FAH=-63×(-2)=-6,结果正确对于3×14,结果错误。2)有符号相乘:负数复原为原码,并去掉符号位,相乘后,结果添42(1)、无符号数乘法

格式:MULsrc;AXAL×src,字节;DX,AXAX×src,字

8位乘法

16位乘法AX操作数DXAX(16位)(16位)(32位)AL操作数AHAL(8位)(8位)(16位)(1)、无符号数乘法AX操作数DXAX(143MULBL;AXALCLMULCX;DX、AX

AXCXMULBYTEPTR[DI];AL与DI所指单元的8位数相乘,结果送AXMULWORDPTR[SI];AX与SI所指单元的16位数相乘,低位送AX,高位送DXMULBL;AXALCL444902H×403AH,结果送0510H~0513H单元。

MOVAX,4902HMOVBX,403AHMULBXMOV[0510H],AXMOV[0512H],DX4902H×403AH,结果送0510H~0513H单元。45(2)、带符号数的乘法格式:IMULsrc字节乘:AXAL*src,字乘:DX,AXAX*src,字乘

IMULBL;AL的内容乘以BL,结果送AXIMULDI;AX的内容乘DI,结果送DX.AX

IMULBYTEPTR[DI];

AL的内容乘以DI所指单元的内容,结果送AX(2)、带符号数的乘法46除法

(1)、无符号数除法

格式:DIVsrc:字节除:AXsrc,AL商,AH余数字除:(DX.AX)src,AX商,DX余数注意:被除数在累加器中,且必须是除数的两倍字长。除法

(1)、无符号数除法47

8位除法:

被除数(16位)除数(8位)

余数(8位)商(8位)AHAL操作数AHAL8位除法:AH4816位除法:

被除数(32)除数(16)

余数(16)商(16)DXAX操作数DXAX16位除法:被除数(32)除49(2)、有符号数除法

格式:IDIVsrc

字节除:ALAX

src(商),AH余数,字除:AX(DXAX)src(商)

DX余数

例:IDIVBL;AL(商)AXBLIDIVWORDPTR[DI](2)、有符号数除法50注意:除法运算时,标志AF、CF、OF、PF、SF、ZF、无意义用IDIV指令时,对双字除以一个字,商的范围为-32768~+32767;对一个字除以一个字节,商的范围为-128~+127。超出上述范围,产生0号中断。对有符号除法,8086指令系统规定余数的符号与被除数的符号相同。除法运算时,要求被除数的字长是除数的二倍。如果除数的字长与除数的字长相同,应对被除数进行扩展。无符号数扩展:对AH或DX清零。有符号数扩展:将低位字或字节的符号向高位扩展。

注意:除法运算时,标志AF、CF、OF、PF、SF、ZF、无513)、扩展字节为字

CBW

将AL寄存器的符号位扩展到AH中。AL<80H,执行CBW后,AH=00H。AL>=80H,执行CBW后,AH=FFH。例:AL=88H,执行CBW,AH=FFH100010001111111110001000ALAHAL3)、扩展字节为字CBW52(4)、扩展字为双字CWD

将AX寄存器的符号位扩展到DX中。AX<8000H,执行CWD后,DX=0000H。AL>=8000H,执行CWD后,DX=FFFFH。(4)、扩展字为双字CWD53逻辑运算指令、移位指令

逻辑指令非循环移位指令循环移位指令逻辑运算指令、移位指令54逻辑运算:srcdstNOTANDORXOR001000010011101011110110逻辑运算:55逻辑指令

ANDdst,srcORdst,srcXORdst,srcNOTdstTESTdst,src例、ANDAX,BXANDAH,0FHORAL,0F0H;TESTAL,01;测试AL的D1=1?XORAX,AX;将AX清零逻辑指令ANDdst,src56例、设AH=10011101,对AH的高四位置零,低四位保持不变。ANDAH,0FH

10011101AND0000111100001101例、设AH=10011101,对AH的高四位置零,低四位保持57

例:

使AL中的数,第0、1位取反。MOVAL,71H;送操作数XORAL,03H;送特征数00000011

01010001(AL)

XOR0000001101010010例:0101058例、

测试AL中的第0、1、2位是否为零。

MOVAL,40HTESTAL,07H;测AL的0、1、2位

01001000AND0000011100000000例、010010059逻辑指令小结AND指令用于对一个数据的指定位清零OR指令用于对一个数据的指定位置1NOT指令用于取反码XOR指令用于对寄存器清零TEST指令用于测试一个数据的指定位是1还是0逻辑指令小结60二、非循环移位指令SHLdst,count;逻辑左移SHRdst,count;逻辑右移SALdst,count;算数左移SARdst,count;算数右移CML00MLCCML0MLC二、非循环移位指令CM61移位指令影响标志位CF、OF、PF、SF和ZF。如果只移一位,指令中用1指出移位的位数,如果超过1位,必须用CL预先指明移位的位数。例:SALDX,1;DX中的数左移1位MOVCL,4SALAX,CL;AX中的数左移4位SHLAL,CL;SHRAL,CL;AL中的数右移4位移位指令影响标志位CF、OF、PF、SF和ZF。62例、将两个非组合BCD数(高阶存BL,低阶存于AL中),转换成一个组合的BCD数,存于AL中。0000****BL0000****ALOR****0000BL

SHL程序段:MOVCL,4SHLBL,CLORAL,BL例、将两个非组合BCD数(高阶存BL,低阶存于AL中),转换63例、将AX中的内容乘以10。10=(2+8)左移一位,乘以2;右移一位,除以2。程序:MOVBX,AXMOVCL,2SHLAX,CL;左移2位,乘以4ADDAX,BX;AX为原来5倍SHLAX,1;AX为原来的10倍

例、将AX中的内容乘以10。64三、循环移位指令ROLdst,count;左小循环RORdst,count;右小循环RCLdst,count;左大循环RCRdst,count;右大循环三、循环移位指令ROLdst,count;左小循环65微机原理第三章指令系统课件66例1、ROLAL,1AL:1001000100100011例2、MOVCL,2ROLBH,CLBH:10101111

10111110例1、ROLAL,167串操作指令字串传送:MOVSB/MOVSW字串比较:CMPSB/CMPSW字串扫描:SCASB/SCASW字串装入:LODSB/LODSW字串存储:STOSB/STOSB串操作指令字串传送:MOVSB/MOVSW68串操作的特点(重点!!!)1)、SI寻址源操作数,段地址在DS,DI寻址目的操作数,段地址在ES;2)、每次操作后,SI、DI自动修改:DF=0,SI和DI加1或(+2),DF=1,SI和DI减1或(-2)。3)、若源字串和目的字串在同一段中,则把DS和ES设成相同数字。4)、通过重复前缀实现串操作串操作的特点(重点!!!)1)、SI寻址源操作数,段地址在D69重复前缀(循环)1、REP

MOVSB/MOVSW(1).若CX=0,退出重复操作;(2).CX≠0,执行串操作一次,CXCX-1,修改SI、DI,转(1)。2、相等重复前缀REPZ(REPE)(1).若CX=0,或ZF=0,退出重复操作;(2).CX≠0,执行串操作一次,CXCX-1,修改SI、DI,转(1)。用途:用于比较两个字串,找出不同的字。重复前缀(循环)1、REPMOVSB/MOVSW703、不相等重复前缀REPNZ(REPNE)(1).若CX=0,或ZF=1,退出重复操作;(2).CX≠0,执行串操作一次,CXCX-1,修改SI、DI。用途:用于比较两个字串,找出相同的字串

。3、不相等重复前缀REPNZ(REPNE)71更正:REP/REPE/REPNE在CX-1的过程中不影响ZF,而后面的指令要影响ZF(分情况)!程序循环的条件ZF是看指令执行的结果对ZF的影响,与ZF的初值无关。更正:REP/REPE/REPNE在CX-1的过程中不影响72字串传送指令:MOVSB/MOVSW字节操作:MOVSB字操作:MOVSW1).SI指向源串(数据段DS),DI指向目的C串(附加段ES);2).CX置入传送的字节数(操作的次数);3).用CLD清DF=0:SI+1(+2),DI+1(+2);用STD置DF=1:SI-1(-2),DI-1(-2)4).用带REP重复前缀的串传送指令,每传送一次,CX中的值减一。字串传送指令:MOVSB/MOVSW73例.将100个字节数据,从段地址为AX,偏移地址为1000H单元传送到偏移地址为2000H单元区.MOVDS,AX MOVES,AXLEASI,[1000H];SI指向源串地址LEADI,[2000H];DI指向源串地址MOVCX,100;置计数器CLD;清方向标志REPMOVSB;将源地址的100个字节传送到目的地址单元例.将100个字节数据,从段地址为AX,偏移地址为10074字串比较指令CMPSB/CMPSW字操作指令:CMPSW字节操作指令:CMPSB功能:[SI]—[DI]DIDI+/-1(+/-2)SISI+/-1(+/-2)

操作结果影响标志位。字串比较指令75在CMPSW/CMPSB前使用重复前缀:用于比较两个字串,找出第一个相等的字符或不相等的字符用REPNZ/REPNE,表示两个字串比较不相等时继续下次比较,若相等则退出比较

用REPZ/REPE,表示两个字串比较相等时继续下次比较,若不相等则退出比较。在CMPSW/CMPSB前使用重复前缀:76字串检索指令:SCASB/SCASW操作:AL(AX)—[DI]DIDI+/-1(+/-2)用AL或AX中的一个字串和位于ES段由DI指出的内存单元的字节或字比较功能:从一个字串中查找一个与AL或AX中不同的字符,或寻找一个相同的字符.字串检索指令:SCASB/SCASW77例.从地址为1000单元开始,存放256个字节的字符串,找出第一个字符$(ASCII码24H),将$的第一个地址存入BX中,否则将BX清零.

1)分析:要求找指定字符$,可以用指令SCASB;重复前缀用REPNZ,表示表示两个字串比较不相等时继续,否则退出循环$的地址应为多少?

1031332445DIDI1000H1001H1002H1003H….例.从地址为1000单元开始,存放256个字节的字符串,找78程序段:MOVDI,1000H;送目标串首地址MOVCX,256CLD;清方向标志MOVAL,‘$’REPNZSCASBTESTCX,0FFH JZZER;没找到$,转DECDI;退回到$所在地址MOVBX,DI;$所在地址送BXJMPST0ZER:MOVBX,0程序段:79使用SCASB/SCASW注意:目的字串默认在ES段中,字串首址由DI指出。寻找与AL中字节相同的第一个字节,用REPNZSCASB,若找到,退出循环;若字串中没有任何字节与AL的内容相同,退出循环。使用SCASB/SCASW注意:目的字串默认在ES段中80取字串指令:LODSB/LODSW执行的操作:AL(AX)[SI]SISI1(2)将位于DS段由SI指出的内存单元的字节或字的内容取到AL或AX中。注意:

因为取来的字或字节放在AX或AL中,LODSB/LODSW前面不能加前缀。取字串指令:LODSB/LODSW执行的操作:AL(AX81存储指令:

STOSB/STOSW

执行的操作:[DI]AL(AX)DIDI1(2)把AL或AX中的一个字串存到位ES段由DI指出的内存单元,并自动修改地址。存储指令:

STOSB/STOSW

执行的操82例:将0404H单元开始的256单元清零。

CLD

;清方向标志

LEADI,0404H

;取地址

MOVCX,256;共256个字节

XORAX,AX;AX清零REPSTOSB例:将0404H单元开始的256单元清零。83例:检验一段被送过的数据是否与原串完全相同.CLDMOVCX,100;共100字节

MOVSI,2400H;源串首地址MOVDI,1200H;目的串首地址REPECMPSB;串比较,直到ZF=0,或CX=0ANDCX,0FFH;100个字串比较完否JZEQQ;都作了比较,DECSI;否则,有不相同字串MOVBX,SI;将不同字串地址送出MOVAL,[SI];将不同字串送出JMPSTOPEQQ:MOVBX,0;两字串完全相同STOP:例:检验一段被送过的数据是否与原串完全相同.84控制转移指令转移和调用指令的寻址子程序调用和返回指令无条件转移和条件转移指令循环控制指令处理器控制指令控制转移指令转移和调用指令的寻址85转移和调用指令的寻址段内转移近转移:相对偏移量为一个字;短转移:相对偏移量为一个字节;段间转移远转移:相对偏移量为超过一个字;注意:偏移量为带符号数转移和调用指令的寻址段内转移86无条件转移指令无条件转移指令

段内转移:JMP寄存器;IP寄存器JMPLOP1;LOP1是标号127JMPLOP2;LOP2是标号32K

段间转移JMPLOP2IPLOP2的段内偏移地址CSLOP2+2的段地址

JMPDWORDPTR[BX]IP[BX]CS[BX+2]无条件转移指令无条件转移指令

段内转移:87子程序调用和返回指令调用

CALL

返回

RET

CALL指令

CALL1000H;段内直接调用

1)、IP入栈:SPSP-2[SP]IP2)、入口地址:IPIP+1000H子程序调用和返回指令调用CALL

返回RET88CALLBCD1;段内直接调用1)IP值入栈:SPSP-2[SP]IP2)入口地址:IPBCD1的偏移地址CALLAX;段内间接调用1)IP值入栈:SPSP-2[SP]IP2)入口地址:IPAX的值CALLBCD1;段内直接调用89CALL2500H:3600H;段间直接调用1)、CS值入栈2)、IP值入栈3)、IP2500HCS3600HCALLDWORDPTR[DI];段间间接调用1)、CS值入栈2)、IP值入栈3)、IP[DI]CS[DI+2]CALL2500H:3600H;段间直接调用CALL90返回指令:RET1)段内调用返回从堆栈弹出一个字到IP2)段间调用返回从堆栈弹出一个字到IP从堆栈弹出一个字到CS3)RETN:带参数返回RET6,返回后,使SP+6。返回指令:RET1)段内调用返回91条件转移指令形式:JX短目标地址X:1~3个英文字母跳转范围:-128~+127字节1)、JE/JZ;等于,A=BJNZ/JNE;不等于,A<>B2)、无符号数比较JB/JNAE:A<BJNB/JAE:A>=BJA/JNBE:A>B;JNA/JBE:A<=B条件转移指令形式:JX短目标地址92带符号数比较指令JL:A<BJNL:A>=BJG:A>BJNG:A<=B其它转移指令JS、JNS;JO、JNO;JP、JPE:P=1JPO、JNP;JCXZ:CX=0转移

带符号数比较指令93例、比较1000H、1001单元的两个数,将大数存2000H单元中。解:MOVBX,1000H;第一数送ALMOVAL,[BX]INCBX;指向第二数CMPAL,[BX];两数比较JALOP1;大于转MOVAL,[BX];大数AL送LOP1:MOV[2000H],AL例、比较1000H、1001单元的两个数,将大数存2000H94循环指令LOOP、LOOPZ、LOOPNZ1)LOOP短目标地址操作:CXCX-1,CX不为零,循环;若CX=0,退出循环。相当于下面的指令:DECCXJNZ短目标地址

循环指令LOOP、LOOPZ、LOOPNZ95例:延迟子程序:MOVCX,0100H;设循环次数KKK:LOOPKKK;CX-1,CX;不为零,循环

或:MOVCX,0100HKKK:DECCXJNZKKK例:延迟子程序:96LOOPZ/LOOPE

CX-1,CX不为零且ZF=1,循环;若CX=0,或ZF=0,退出循环。LOOPNZ/LOOPNECX-1,CX不为零且ZF=0,循环;若CX=0,或ZF=1,退出循环。LOOPZ/LOOPECX-1,CX不为零且ZF97处理器控制指令标志操作指令

CLC:CF=0;清进位标志CMC:对CF求反;对进位取反STC:CF=1;置一进位标志CLD:DF=0;清方向标志STD:DF=1;置一方向标志CLI:IF=0;清中断标志STI:IF=1;置一中断标志处理器控制指令标志操作指令98第三章8086指令系统

指令格式8086寻址方式8086指令系统第三章8086指令系统

99汇编语言指令格式与寻址方式汇编语言指令格式标号、标示符指令助记符操作数注释指令助记符操作数汇编语言指令格式与寻址方式指令助记符操作数1008086的寻址方式(重点!!!!)对操作数寻址对调用或转移指令寻址一、立即数寻址:操作数由指令提供.例:MOVAL,80HMOVAX,1090HMOVCX,1008086的寻址方式(重点!!!!)101二、直接寻址

操作数在存储器中,其地址由指令提供。例:MOVAX,[1070H]MOVBX,CS:[3000H]MOVAH,[1000H]二、直接寻址102三、寄存器寻址操作数在寄存器中。

MOVAH,BLMOVAX,BXMOVCX,AX三、寄存器寻址103四、寄存器间接寻址

操作数在存储器中,存储器的有效地址由寄存器指出。EA=+8或16位移量[BX];段为DS[BP];段为SS[SI];段为DS[DI];段为DS或ES四、寄存器间接寻址EA=+8或16位移量[BX]1041、以BX寄存器进行间接寻址

例:若DS=2000H,ES=3000H,BX=1000H1)MOVAX,[BX]AX←[21000H][21001H]

MOVCX,ES:[BX]

AX←[31000H][31001H]1、以BX寄存器进行间接寻址1052、以BP寄存器进行间接寻址MOVAX,[BP]若SS=5000H,BP=3000H,将53020H、53021H单元的内容送AX。执行结果:AX=4A56H53000H53001H56H4AH2、以BP寄存器进行间接寻址53000H56H4AH1063、以SI、DI寄存器进行间接寻址——变址寻址1)MOVAX,[SI]若DS=3000H,SI=4000H,EA=4000H,物理地址=34000H,执行结果:AX=201AH2)MOVBX,[DI]若DS=5000H,DI=0200H执行结果:BX[50201H][50200H]BX=3220H34000H34001H1AH20H50200H50201H20H32H3、以SI、DI寄存器进行间接寻址——变址寻址34000H1074、以BX、BP和SI、DI寄存器组合起来进行间接寻址——基址加变址的寻址

例:若BX=5000H,SI=2000H,DS=4000H,SS=1000H,BP=3100H。

MOVAX,[BX+SI];

EA=5000+2000=7000H, AX[47001H][47000H] AX=2A32HEA=+[BX] [SI][BP] [DI]4、以BX、BP和SI、DI寄存器组合起来进行间接寻址——基108相对的基址加变址的寻址:MOVAX,[BP+SI+0020H];

EA=3100+2000+0020=5120H相对的基址加变址的寻址:109例:设BX=0158H,DI=10A5H,DS=2100H,位移量=1B57H,DS作为操作数的段寄存器。1)直接寻址:MOVAX,[1B57H]有效地址=1B57H物理地址=21000H+1B57H=22B57H2)寄存器间接寻址:MOVAX,[BX]有效地址=0158H物理地址=21000H+0158H=21158H3)BX寄存器相对间接寻址: MOVAX,[BX+1B57H]有效地址=0158H+1B57H=1CAFH物理地址=21000H+1CAFH=22CAFH4)变址寻址:MOVAX,[DI]例:设BX=0158H,DI=10A5H,DS110有效地址=105AH物理地址=21000H+105AH=220A5H5)DI寄存器相对变址寻址: MOVAX,[DI+1B57H]有效地址=105AH+1B57H=2BFCH物理地址=21000H+2BFCH=23BFCH6)基址加变址的寻址:MOVAX,[BX+DI]有效地址=0158H+105AH=11FDH物理地址=21000H+11FDH=221FDH7)相对的基址加变址的寻址:MOVAX,[BX+DI+1B57H]有效地址=0158H+105AH+1B57H=2D54H物理地址=21000H+2D54H=23D54H有效地址=105AH1111、若SS=1000H,BP=2000H,DS=5000H,BX=4000H,说明下列指令的执行结果。MOVAX,2C10HMOVAX,[2C10H]MOVAX,[BX+1C00H]]MOVBX,[BP+0120H]MOVAX,[BP+SI]MOVAH,[BX+SI]1、若SS=1000H,BP=2000H,DS=5000H,112数据传送指令MOVLEAPUSHLDSPOPLESXCHGLAHFPUSHFXLATSAHFPOPFINOUT数据传送指令MOVLEA1131.通用型(1).MOV传送指令格式:MOVdst,src;dstsrc

例:MOVDS,AX;DSAXMOVCH,20;CH20MOVBL,AH;BLAHMOVAX,[BX];AX[BX]MOV[DX],AX;[DX]AXMOVAX,[BX+0060H]

(2)堆栈操作指令PUSHsrc;把src推入堆栈POPsrc;把src弹出堆栈1.通用型114C31201006H01007H01008H01009HSP(原栈顶)SP-2(新栈顶)SP例:设SS=0100H,SP=0009H,AX=12C3H,BX=5070H

PUSHAX;[1]SPSP-2[2][41008][41007H]AX

01000009SSSP16-2C31201006HSP(原栈顶)SP-2(新栈顶)S115POPAX;将栈顶两单元内容送AX;SPSP+2

01000007SSSP16+2C31201006H01007H01008H01009HSP+2(新栈顶)SP12C3AXSP(原栈顶)POPAX;将栈顶两单元内容送AX0100116例:

PUSHAXPUSHBX…….POPBXPOPAX注:1)8086的堆栈操作是按字进行的。2)每执行一条推入堆栈指令,SP减2。执行弹出指令时,刚好相反,每弹出1个字,SP的值加2。3)CS的值可以推入堆栈,但不能从堆栈中弹出1个字到CS寄存器。4)堆栈中的内容是按后进先出的原则进行传的。例:PUSHAX117例(3)、交换指令格式:XCHGdst,src

XCHGAX,BXXCHGAL,BHXCHGBX,[1000H]XCHG[2100H],DHXCHGSI,AX注意:1、dst与src不能同时为内存单元;2、不能使用CS、IP作为操作数。例(3)、交换指令118(4)、换码指令格式:XLAT(无参数);AL[BX+AL]

使累加器中的一个值变换为内存表格中的某一个值。用来实现编码制的转换。要求:BX寄存器指向表的首地址,AL中为位移量。BX+0BX+1BX+2BX+AL+BXAL(4)、换码指令BX+0+BXAL119十进制数gfedcba

00100000040H10111100179H20010010024H30011000030H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论