版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章8086指令系统8086操作数寻址方式8086指令格式、功能,以及指令执行完以后对标志寄存器的影响本章重点指令指令系统指令格式:操作码+操作数操作码:表明指令完成的什么操作,以助记符形式MOV、ADD、SUB等操作数:表示指令的操作对象常数寄存器存储器3.1指令系统概述:能让计算机执行各种操作的命令。:计算机所能执行的全部指令的集合。操作数的寻址方式概念:寻找操作数或操作数地址的方法目的:以确定数据的来源和去处。源操作数目的操作数3.28086CPU的寻址方式指令格式:指令源操作数,目的操作数指令源操作数指令目的操作数立即寻址寄存器寻址直接寻址寄存器间接寻址基址寻址变址寻址基址变址寻址基址变址相对寻址操作数的寻址方式存储器寻址——立即数操作数——寄存器操作数(存储器操作数)操作数在指令码中,由指令直接给出。MOVAX,1234H;AX←1234H
对应的指令码:B83412H不需要访存取操作数,执行速度快1.立即寻址12H34HB8H存储器高地址低地址←操作码……AXAHALCPU指令队列B83412H12H34H操作数存放在存储单元的某一位置,指令中直接给出该存储单位的8/16位偏移量Disp操作数默认存放在DS段中格式:指令操作数1,[Disp]举例1:DS=2000H,ES=1500HMOVAX,[1000H]MOVAX,ES[1000H]3.直接寻址9EA=Disp操作数物理地址=(默认段)*10H+Disp物理地址=2000H*10H+1000H物理地址=1500H*10H+1000H南京理工大学紫金学院陈琳琳①④⑤③②操作数如果不在DS数据段,而在DS以外的段中,则需要在操作数前面加上段超越修饰符修饰符为段寄存器的名称如MOVAX,ES[1000H]段超越11段超越例:已知(DS)=2100H,(SS)=1100H,(ES)=3000H,(BX)=0010H,(BP)=1000H,求下列指令的源操作数的物理地址。MOVAX,[BX]MOVAX,[BP]MOVAX,ES:[BP]13物理地址=(DS)*16+(BX)=21010H物理地址==(SS)*16+(BP)=
12000H物理地址==(ES)*16+(BP)=31000H操作数存放在存储单元某一位置,其EA由基址寄存器BX或BP加指令给出的Disp得到默认段同寄存器寻址格式:指令操作数1,[基址寄存器+Disp]指令操作数1,Disp[基址寄存器]举例:MOVAX,[BX+100H]或MOVAX,100H[BX]5.基址寻址14EA=BX/BP+Disp操作数物理地址=(默认段)*10H+寄存器+Disp操作数存放在存储单元某一位置,其EA由变址寄存器SI/DI加指令给出的Disp得到默认段为DS格式:指令操作数1,[变址寄存器+Disp]指令操作数1,Disp[变址寄存器]举例:MOVAX,[SI+100H]或MOVAX,100H[DI]6.变址寻址15EA=SI/DI+Disp操作数物理地址=(默认段)*10H+寄存器+Disp操作数存放在存储单元的某一位置,其EA由变址寄存器SI/DI加基址寄存器BX/BP加指令给出的偏移量Disp得到默认段同寄存器寻址格式:指令操作数1,[基址寄存器+变址寄存器+Disp]举例:MOVAX,[SI+100H]或MOVAX,100H[DI]8.基址变址相对寻址17EA=BP/BX+SI/DI+Disp操作数物理地址=(默认段)*10H+BP/BX+SI/DI+Disp位移量Disp指令中的一个8/16位数基地址基址寄存器BX或基址指针BP的内容变址源变址寄存器SI或目的变址寄存器DI的内容9.总结:EA的组成10.各种寻址方式对比寻址方式操作数物理地址计算立即寻址操作数在指令码中,无法计算寄存器寻址操作数在寄存器中,无物理地址直接寻址操作数在内存中,(默认段)*16+Disp寄存器间接寻址操作数在内存中,(默认段)*16+(BX/BP/SI/DI)基址寻址操作数在内存中,(默认段)*16+(BX/BP)+Disp变址寻址操作数在内存中,(默认段)*16+(SI/DI)+Disp基址变址寻址操作数在内存中,(默认段)*16+(BX/BP)+(SI/DI)基址变址相对寻址操作数在内存中,(默认段)*16+(BX/BP)+(SI/DI)+Disp19可以使用段超越源、目的操作数均不能为IP、F,目的操作数不能为立即数、CS。段寄存器之间不能用MOV指令传递数据。立即数不能用MOV指令送到段寄存器。DST和SRC不能同时为存储器操作数。传送的源操作数和目的操作数必须同时为字或者字节。立即数送存储单元时应该指出该存储单元为字单元还是字节单元。注意:MOV[BX+SI],255应为:MOVBYTEPTR[BX+SI],255
或MOVWORDPTR[BX+SI],255
或MOV[BX+SI],BYTEPTR255
或MOV[BX+SI],WORDPTR255举例1:非法指令:255可以是8位数(1字节),也可以是16位数(2字节),[BX+SI]指向的存储单元不明确是字节还是字单元判断下列指令是否正确,若不正确,请说明理由。(1)MOVDS,CS(2)MOVIP,BX;(3)MOVCS,AX(4)MOVF,0000H(5)MOV[AX],[BX](6)MOVDX,IP(7)MOVBX,[SI+DI](8)MOV[1000],30(9)MOVES,1000H(10)MOVAX,BL举例2:将寄存器BL的内容送寄存器DL分析:通用寄存器通用寄存器MOVDL,BL将AX的内容与CX的内容互换分析:内容互换必须借助第三方MOVBX,AXMOVAX,CXMOVCX,BX举例4:XCHGDST,SRC功能:将SRC和DST互换2.交换指令目的操作数源操作数通用寄存器通用寄存器存储单元存储单元进栈:PUSHSRC
执行的操作:出栈:POPDST
执行的操作:在8086中,进栈、出栈均是以字为单位的。3.堆栈操作指令16位的通用寄存器、段寄存器、存储单元16位的通用寄存器、段寄存器(CS除外)、存储单元(SP)-1→SP,SRC高字节→[SP]([SP])→DST低字节,(SP)+1→SP(SP)-1→SP,SRC低字节→[SP]([SP])→DST高字节,(SP)+1→SP举例:PUSHAXPOPBXXXSPAHALSPXX62H03HSP高低BHBL03H62HSPSP-1-1+1SP+1MOV、XCHG、PUSH、POP不改变标志寄存器的值标志位传送指令可能改变标志寄存器的值4.标志位传送指令CFPFAFZFSFTFIFDFOFFHFL07815取标志寄存器指令/存标志寄存器指令LAHFSAHF标志进栈指令/标志出栈指令PUSHFPOPF
标志寄存器操作指令例:将标志寄存器F清零。MOVAX,0PUSHAXPOPFCLC;复位进位标志:CF←0STC;置位进位标志:CF←1CMC;求反进位标志:CF←~CFCLD;复位方向标志:DF←0,串操作后地址增大STD;置位方向标志:DF←1,串操作后地址减小CLI;复位中断标志:IF←0,禁止响应可屏蔽中断STI;置位中断标志:IF←1,允许响应可屏蔽中断标志位操作指令1.装入有效地址指令(即获取SRC的EA)
LEADST,SRCSRC——存储器操作数。可以是变量、标号或地址表达式。DST——16位的通用寄存器伪操作符OFFSET,可以在汇编过程中得到变量(或标号)的偏移地址。5.地址传送指令MOVBX,400HMOVSI,3CHLEABX,[BX+SI+0F62H] 举例1:BX=?139EH变量WVAR的偏移量是0004H,值为4142HMOVAX,WVAR
LEASI,WVARMOVCX,[SI]MOVDI,OFFSETWVAR MOVDX,[DI]举例2:AX=?4142HSI=?0004HCX=?4142HDI=?0004HDX=?4142H3种指令作用相同完成累加器(AX/AL)与I/O端口间的数据传送。输入:INAX/AL,端口号功能:端口数据→AX/AL输出:OUT端口号,AX/AL功能:AX/AL→端口6.输入/输出指令直接寻址当端口地址≤255(0~0FFH)时,端口地址可以以立即数的形式直接出现在输入、输出指令中间接寻址当端口地址>255时,必须先将端口地址存于DX中,输入、输出指令中用DX表示端口地址端口地址的寻址方式例1:从地址为100的端口读入一个字节数据INAL,100例2:向地址为100H的端口写入一个字数据
MOVDX,100HOUTDX,AX举例:或:MOVDX,100
INAL,DX运算指令大部分会对标志寄存器产生影响1.加法/减法指令指令格式:ADD/SUBDST,SRC功能:将(DST)(SRC)的结果送入DST,根据运算结果设置标志寄存器中的6个状态位。3.4.2算术运算指令加法/减法指令目的操作数源操作数通用寄存器通用寄存器存储单元存储单元立即数例1:(DL)=2EH,(AL)=2CHADDAL,DL结果:(AL)=5AHAF=,CF=,OF=,PF=,ZF=,SF=例2:SUBAX,AX和MOVAX,0的区别
SUB指令会影响状态标志位,MOV指令不影响标志位。举例:010110100010110000101110+)指令格式:ADC/SBB DST,SRC功能:(DST)(SRC)(CF)→DST,并根据运算结果设置标志寄存器中的6个状态标志位。用途:处理多字节数据的加减运算,一般可与普通的加减法指令联用。2.带进位的加法/带借位的减法指令INC/DECDST功能:(DST)1→DST,该操作不影响CF,影响其它状态标志位。通常用来对计数器和地址指针进行调整。INCSIDECBYTEPTR[BX]3.加1/减1指令
可以是8/16位的通用寄存器或存储单元;必须指明存储单元的类型NEGDST功能:DST←0-(DST),根据运算结果设置标志寄存器中的6个状态位。运算结果:若DST是正数(负数)将其变成绝对值相等的负数(正数)。例:假设已知(BL)=10011010,则执行指令
NEGBL4.求补指令;(BL)=0110011010011010为负数,求补为1;变成负数为:0CMPDST,SRC功能:根据(DST)-(SRC)的结果置标志位,但不改变DST的值。通常在CMP后接JG、JZ、JC等条件转移指令。5.比较指令可以是8/16位的通用寄存器、存储单元、立即数可以是8/16位的通用寄存器、存储单元MULSRC——无符号数乘法IMULSRC——有符号数乘法除了影响CF和OF,其他状态标志位内容不确定。6.乘法指令AX(16)SRC(16)DX(16)AX(16)AL(8)SRC(8)AH(8)AL(8)被乘数乘数乘积例1:计算两个无符号数的乘积:64H×0A5H MOVAL,64H MOVBL,0A5H MULBL例2:MUL[BX]举例:应指定存储单元的类型
MULBYTE/WORDPTR[BX]XDIVSRC——无符号数除法IDIVSRC——有符号数除法
执行除法指令后,各状态标志位内容不确定。7.除法指令
AL(8)SRC(8)AH(8)AL(8)AX(16)SRC(16)DX(16)AX(16)DX(16)=AH(8)=商余数余数商1.逻辑运算指令3.4.3逻辑运算与移位指令ANDDST,SRC(DST)∧(SRC)→DSTOF=CF=0,SF、ZF、PF根据运算结果置位/复位,AF状态不定ORDST,SRC(DST)∨(SRC)→DSTXORDST,SRC(DST)⊕(SRC)→DSTTESTDST,SRC(DST)∧(SRC),(DST)不变NOTDST(DST)→DST对标志位无影响可以是8/16位的通用寄存器、存储单元、立即数可以是8/16位的通用寄存器、存储单元例1.测试AL的最高位是否为1,为1则跳转到标号L1处执行指令
TESTAL,10000000BJNZL1例2.屏蔽AL的第0、1两位
ANDAL,11111100B例3.置位AL的第5位
ORAL,00100000B例4.将AL的第0、1两位取反
XORAL,00000011B举例:算术移位SALDST,COUNTSARDST,COUNT逻辑移位SHLDST,COUNTSHRDST,COUNT2.移位指令COUNT>1时,不可以直接写入指令,必须将其用CL寄存器值表示DST可以是8/16位通用寄存器或存储单元;将(DST)算术左移COUNT位;将(DST)算术右移COUNT位;将(DST)逻辑左移COUNT位;将(DST)逻辑右移COUNT位53(a)算术/逻辑左移
SAL/SHLDST(b)逻辑右移SHR
DST(c)算术右移SAR
DST根据移位的结果置状态标志位(AF除外)。移多位则OF无效,移1位时,对OF的影响:算术/逻辑左移:移位后,若CF与DST的最高位不相等,则OF=1;否则OF=0。逻辑右移:移位后,若DST的最高位与次高位不相等,则OF=1;否则OF=0。移位指令对标志位的影响算术/逻辑左移55CFX10100101__CF0——数据左移n位,数值*2nSAL/SHLAL,1溢出!AL算术/逻辑右移5610100101CFX__101001010CF__101001011CFSHRAL,1SARAL,1——数据右移n位,数值/2n溢出!AL不带进位的循环移位
ROL DST,COUNT ROR DST,COUNT带进位的循环移位
RCL DST,COUNT RCR DST,COUNT3.循环移位指令COUNT>1时,不可以直接写入指令,必须将其用CL寄存器值表示58(a)不带进位的循环左移ROLDST(b)不带进位的循环右移RORDST(c)带进位的循环左移RCLDST(d)带进位的循环右移RCRDST循环左移5910100101CFx10100101__CF110100101__CFxROLAL,1RCLAL,1AL循环右移6010100101CFx__101001011CF__10100101xCFRORAL,1RCRAL,1AL在指令系统中有一些特殊的指令,可以按需要用转移地址修改IP与CS的值,从而达到改变程序执行顺序的目的。这组指令称为程序转移指令。3.4.4程序控制指令功能:使程序无条件的跳转到某一标号执行标号:即某一地址的代号1.无条件转移指令JMP举例:JMPSUB1……SUB1:MOVAX,BX寻址方式格式跳转的地址范围段内直接短转移JMPSHORT标号8位补码,即-128~+127段内直接转移JMP标号JMPNEARPTR标号16位补码,即-32768~+32768段内间接转移JMP字地址指针16位跳转地址存放在寄存器或存储器中段内64K范围内段间直接转移JMPFARPTR标号由标号给出段基址和段内偏移范围为1M段间间接转移JMPDWORDPTR双字地址指针段基址和段内偏移存放于存储器范围为1MJMP的格式63JMPSHORT
标号JMPNEARPTR
标号仅修改IP的内容,CS内容不变转移的有效偏移地址(EA)=Disp段内短程转移(Disp为8位)段内近程转移(Disp为16位)段内直接转移/段内直接寻址汇编后,标号相当于一个位移量DispJMP AE若标号AE的偏移地址为0120H,则执行JMP指令后,(IP)=0120H段内直接转移例=JMP0120HJMP字地址指针仅修改IP的内容,CS内容不变转移的有效偏移地址EA在一个16位寄存器或在内存的相邻两单元中。内存的地址根据寻址方式进行计算段内间接转移/段内间接寻址16位寄存器或指向1个字单元JMP[BX]——转移的偏移地址为BX所指的内存单元提供(BX)=1000H(1000H)=2345H(IP)=2400H段内间接转移指令(2)指令执行后
(IP)=2345HJMPFARPTR
标号CS和IP均被修改转移的目标地址的段基址和段内偏移均由指令码直接提供段间直接转移/段间直接寻址汇编后,标号相当于段基址:段偏移JMP DST若DST为数据段标号,偏移地址为0110H(DS)=2000H段间直接转移例指令执行后
(CS)=2000H (IP)=0110H=JMP2000H:0110HJMPDWORDPTR
双字地址指针CS和IP均被修改转移的目标地址的段基址和段内偏移在内存中相邻4个单元中。段间间接转移/段间间接寻址指向2个字单元JMPDWORDPTR[BX+ADD] ——段间间接转移(CS)=1000H(IP)=026AH(DS)=2000H(BX)=1400H(ADD)=020AH段间间接转移例获取实际转移地址的物理地址
DS*10H+BX+ADD=2160AH0EH32H00H40H2160AHIP320EHCS4000H举例2:72sub/functionPR1 JMPshortA1 …… JMPA2A1: …… ……A2: ……endsub/function两条指令的地址差在8位补码表示范围-128~+127内,段内直接短程转移两条指令的地址差在16位补码表示范围-32768~+32767内,段内直接近程转移举例3:73sub/functionPR1 …… JMPfarptrA3 ……endsub/function
sub/functionPR2 ……
A3: ……endsub/function两条指令不在一个段内,段间远程转移单测试条件转移指令指令格式:JXX目标标号2.条件转移指令指令测试标志位转移条件JC/JNCCFCF=1/CF=0JE/JZZFZF=1JNE/JNZZF=0JS/JNSSFSF=1/SF=0JO/JNOOFOF=1/OF=0JP/JPEPFPF=1JNP/JPOPF=0例:若AX中存放的无符号数为偶数,则除以2,如果是奇数则加1后除以2
75TESTAX,0001HJZ EVENADD AX,1EVEN:SHRAX,1If(i%2==0)i=i/2;Elsei=(i+1)/2复合条件转移指令测试操作数类型指令转移条件无符号数JA/JNBECF=0&&ZF=0JAE/JNBCF=0||ZF=1JB/JNAECF=1&&ZF=0JBE/JNACF=1||ZF=1有符号数JG/JNLESF=OF&&ZF=0JGE/JNLSF=OF||ZF=1JL/JNGESF≠OF&&ZF=0JLE/JNGSF≠OF||ZF=1MOVAL,80HCMPAL,50HJAK1JMPK2….K1:…..K2:举例:7780H-50H并影响CF和ZFCF=0ZF=0判断CF和ZF,然后跳转3.循环控制指令指令格式执行操作LOOP标号(CX)-1→CX;若CX≠0,则循环LOOPZ/LOOPE标号(CX)-1→CX;若CX≠0且ZF=1,则循环LOOPNZ/LOOPNE标号(CX)-1→CX;若CX≠0且ZF=0,则循环JCXZ标号CX=0时转移78
隐含使用CX记录循环次数。例1.计算1+2+…+100=
举例:79MOV AX,0MOV CX,100MOV DX,REPEAT: ADD AX,DXINC DXLOOPREPEATa=0c=100;d=1Do{a=a+d;d++;}while(c-->0)过程即子程序:SUB子程序名…..ret或retnENDSUB过程调用指令:CALL过程名过程返回指令:ret/retnn代表返回参数的字节数4.调用与返回指令80与无条件转移指令类似,过程调用可分为段内直接调用 段内间接调用段间直接调用 段间间接调用与JMP的相似操作:根据实际情况修改IP和CS的值与JMP的区别:要将当前IP和CS的入栈以便返回可以带参数5.中断指令82指令名称指令中断INTN溢出中断INTO中断返回IRET中断类型码MOVSMOVSBMOVSW传送CMPSCMPSBCMPSB比较SCASSCASBSCASW搜索LODSLODSBLODSW读取STOSSTOSBSTOSW保存REPREPEREPZ重复前缀3.4.5字符串处理指令83格式:MOVS目的串,源串功能:将一个字节或字从SI指向的源串复制到目的串,并且CPU将SI和DI自增1或2[DI]<-[SI]SI<-SI+1/2DI<-DI+1/21.MOVSBMOVSW格式:CMPS目的串,源串功能:将源串的一个字节或字减目的串的一个字节或字,不改变两个串,但影响标志位,并且CPU将SI和DI自增1或2[DI]-[SI]SI<-SI+1/2DI<-DI+1/22.CMPSBCMPSW格式SACS目的串功能:在目的串中查找AX或AL的内容,不保留结果,影响标志位,同时SI、DI自增1AX/AL-[DI]DI<-DI+1/23.SCASBSCASWLODS从SI指向的字符串取一个字节或字,送到AX/AL中,并将SI自增1/2AX/AL<-[SI]SI<-SI+1/2STOS将AX/AL的内容存到从DI指向的字符串,并将DI自增1/2[DI]<-AX/ALDI<-DI+1/24.LODSSTOSREP
MOVS/STOS功能:CX-1,并处理一次字符串元素直到CX=0REPEREPZ
CMPS/SCAS功能:CX-1,处理一次字符串元素直到CX=0或字符串元素不匹配REPNEREPNZ
CMPS/SCAS功能:CX-1,处理一次字符串元素直到CX=0或字符串元素匹配5.重复前缀指令将字符串变量string1中的100个字节数据复制到string2中MOVCX,100LEASI,STRING1LEADI,STRING2REPMOVSB举例:处理器控制类指令用来控制CPU的状态ESC ;外部操作码,源操作数WAIT ;等待指令:CPU进入等待状态LOCK ;封锁总线HLT ;暂停指令:CPU进入暂停
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年热收缩封切机项目投资价值分析报告
- 2024至2030年中国千斤顶压力机行业投资前景及策略咨询研究报告
- 2024至2030年便携式书写板项目投资价值分析报告
- 《学生会礼仪培训》课件
- 2024年鱼缸泵项目可行性研究报告
- 2024年中国硝酸毛果芸香碱片市场调查研究报告
- 出师表-复习课件
- 2024年工作计划和目标措施
- 《广告词赏析》课件
- 《干体重的计算》课件
- 辅导员年度述职报告
- 医疗器械经营质量管理制度
- 2024年教师资格考试高级中学面试语文试题及解答参考
- 2024年广东省深圳市中考英语试题含解析
- 部编版小学五年级上册道德与法治单元检测试卷含答案(全册)
- 四年级英语上册 【月考卷】第三次月考卷(Unit 5-Unit 6) (含答案)(人教PEP)
- 2024-2030年分析仪器行业市场发展分析及发展趋势与投资研究报告
- 二十届三中全会精神学习试卷题库及答案
- 【高斯定理在大学物理解题中的探究(论文)9800字】
- 中国近代史纲要试题及答案(全套)
- 医院感染管理考试题及答案
评论
0/150
提交评论