版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微型计算机原理授课教师:及接口技术微型计算机原理授课教师:及接口技术3.3.3逻辑运算与移位指令8086/8088CPU的指令系统提供8位和16位的逻辑运算与移位指令有3组逻辑运算指令AND/OR/XOR/NOT/TEST移位指令SHL/SHR/SAL/SAR循环移位指令ROL/ROR/RCL/RCR3.3.3逻辑运算与移位指令8086/8088C3.3.3逻辑运算与移位指令一、逻辑运算指令8086/8088CPU的逻辑运算指令有AND、OR、XOR、TEST、NOT5条指令。以上5条除NOT对标志位不产生影响;其余均产生影响:这些指令根据各自逻辑运算的结果都将影响SF、ZF、和PF,同时
AF的值不确定。3.3.3逻辑运算与移位指令一、逻辑运算指令8083.3.3逻辑运算与移位指令一、逻辑运算指令1、与运算指令AND指令格式及操作ANDDST,SRC
;(DST)(DST)Λ
(SRC)注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。3.3.3逻辑运算与移位指令一、逻辑运算指令1、与运算指令A3.3.3逻辑运算与移位指令AND的指令可以屏蔽某些不关心的位(该位置0),保留一些有用的位。为了做到这一点,只需把要屏蔽位和“0”进行逻辑位,而将保留的位与“1”进行逻辑与即可。3.3.3逻辑运算与移位指令AND的指令可以屏蔽某3.3.3逻辑运算与移位指令2、或运算指令ORORDST,SRC
;(DST)(DST)V
(SRC)注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。3.3.3逻辑运算与移位指令2、或运算指令OR注释:①操作数3.3.3逻辑运算与移位指令OR常见用途:把某些特定的位置1。方法:把要置1的位与1按位逻辑或;不改变的位与0按位逻辑或。3.3.3逻辑运算与移位指令OR常见用途:把某3.3.3逻辑运算与移位指令OR与AND的共性:如果寄存器与其自身内容进行逻辑与操作,或进行逻辑或操作,寄存器内容不变,但逻辑运算结果影响SF、ZF、PF标志位,且将CF清0。
利用这个特性,可以在数据传送指令之后,进行逻辑运算以影响标志位,然后可以判断数据的正负、是否为0,以及数据的奇偶性等。3.3.3逻辑运算与移位指令OR与AND的共性3.3.3逻辑运算与移位指令3、异或运算指令XOR指令格式及操作XORDST,SRC
;(DST)(DST)⊕
(SRC)注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。3.3.3逻辑运算与移位指令3、异或运算指令XOR注释:①操3.3.3逻辑运算与移位指令XOR常见用途一:寄存器某些特定的位“求反”,而使其余的位不变。因此‘求反’的位与1‘异或’;不变的位与0进行“异或”。MOVAL,0FFH;XORAL,55H;AL=10101010B,55H=01010101B3.3.3逻辑运算与移位指令XOR常见用途一:3.3.3逻辑运算与移位指令XOR常见用途二:寄存器内容清0XORAX,AX;XORBX,BX;在初始化时,将寄存器清0如: 00101001B=AXXOR)00101001B=AX
00000000B3.3.3逻辑运算与移位指令XOR常见用途二:3.3.3逻辑运算与移位指令XOR常见用途三:用来测试某一操作数是否与另操作数相等,例如检查AX的内容是否等于0F00H,若相等则转MATCH去执行,否则顺序执行。程序段如下:XORAX,0F00H;JZMATCH;JZ为跳转指令表示AX为0时转移:3.3.3逻辑运算与移位指令XOR常见用途三:3.3.3逻辑运算与移位指令4、测试指令TEST指令格式及操作TESTDST,SRC
;(DST)&
(SRC)DST:可以为寄存器操作数、存储器操作数SRC:可以为寄存器操作数、存储器操作数、立即数指令功能:目标操作数与源操作数按位“逻辑与”运算,结果不送回目标操作数。置CF=0,OF=0;对其他标志没有定义。3.3.3逻辑运算与移位指令4、测试指令TEST指令格式及操3.3.3逻辑运算与移位指令TEST指令用于位的测试,它与条件转移指令一起,共同完成对特定位的状态的判断,并实现相应程序的的转移。与CMP有些类似,CMP比较两个操作数,TEST比较特定的位。测试方法:要测试操作数的的某些位是否为0,只需要把TEST的源操作数设置成一个立即数,其中需要测试的位设为1。3.3.3逻辑运算与移位指令TEST指令用于位3.3.3逻辑运算与移位指令MOVAL,40H;TESTAL,0AH;
JNZNEST;JNZ为跳转指令表示ZF=0时转移:NEST:…..3.3.3逻辑运算与移位指令MOV3.3.3逻辑运算与移位指令5、取反指令NOT指令格式及操作NOTOPR;(OPR)(OPR)OPR:除了立即数以外的各种寻址方式的操作数、寄存器。对标志位没有影响。指令功能:对操作数按位取反。NOT指令是一条逻辑“非”指令,只有一个操作数,可以是8位,也可以是16位的存储器或寄存器。3.3.3逻辑运算与移位指令5、取反指令NOT指令格式及3.3.3逻辑运算与移位指令NOTAL;NOTDXNOTBYTEPTR0002H[BX]NOTWORDPTR[BX+SI]分析指令功能3.3.3逻辑运算与移位指令NOTAL;分析指令功能3.3.3逻辑运算与移位指令二、移位指令(shift)8086/8088CPU有4条移位指令。算术左移指令SAL逻辑左移指令SHL
算术右移指令SAR逻辑右移指令SHR功能:用来实现对寄存器或存储单元的8位或16位数据的移位,指令移位操作可以是向左或向右移一位,也可以是多位,移多位时,规定移位的次数必须放在CL寄存器中。对应同一条机器指令3.3.3逻辑运算与移位指令二、移位指令(shift)3.3.3逻辑运算与移位指令1、逻辑左移指令SHL/算术左移指令SAL指令格式:SHL(SAL)OPR,CNT;OPR:通用寄存器或存储器操作数CNT:可为1,或CL,CL中放移位的次数。指令功能:操作数左移1位或CL规定的位数,最低位补0,最高位进CF。只影响CF、OF两个标志位。3.3.3逻辑运算与移位指令1、逻辑左移指令SHL/算术3.3.3逻辑运算与移位指令逻辑左移指令SHL/算术左移指令SALMSBLSB0CFSHL/SAL指令示意图D15/D7D0SHL/SAL功能完全一样,因为对一个无符号数乘以2和对一个有符号数乘以2没有什么区别。在左移位数为1的情况下,如果最高位与CF不同,则溢出标志OF=1,这对带符号数可以判断移位前后的符号位不同;反之,如果最高位与CF相同,则溢出标志OF=0,这表示移位前后符号位没有改变。
在移位次数为多次,则OF值不确定。3.3.3逻辑运算与移位指令逻辑左移指令SHL/算术左移3.3.3逻辑运算与移位指令SHLAL;SHLCL;SHLWORDPTR[BX+100],1分析指令功能左移1位相当于乘2,因此可以代替某些常数的运算,并且速度很快。分析170书中例3.113.3.3逻辑运算与移位指令SHLAL;分析指令功能3.3.3逻辑运算与移位指令2、逻辑右移指令SHR指令格式:SHROPR,CNT;OPR:通用寄存器或存储器操作数CNT:可为1,或CL,CL中放移位的次数。指令功能:操作数右移1位或CL规定的位数,最低位进CF。最高位补0,只影响CF、OF两个标志位。3.3.3逻辑运算与移位指令2、逻辑右移指令SHR指令格式3.3.3逻辑运算与移位指令逻辑右移指令SHRSHR指令示意图D15/D7D0在右移位数为1的情况下,移位后如果最高位与次高位不相等,则溢出标志OF=1,否则0F=0,这表示符号位在移位前后有没有改变。
在移位次数为多次,则OF值不确定。MSBLSBCF03.3.3逻辑运算与移位指令逻辑右移指令SHRSHR指令示3.3.3逻辑运算与移位指令SHRAL,1;SHRAX,CL;SHRBYTEPTR[BX+SI];SHRWORDPTRBUFFER,CL分析指令功能逻辑右移1位相当于无符号数除以2,因此可以代替某些常数的运算,并且采用移位指令比除法指令时执行速度要快得多。3.3.3逻辑运算与移位指令SHRAL,1;分析指令3.3.3逻辑运算与移位指令[例3.12]将一个16位无符号数除以512,结果仍放回原单元。该数原来存放在以TDATA为首地址的两个连续的存储单元中。分析:TDATA512=(TDATA2)256因此用逻辑右移完成上述除法运算。编程如下:MOVAX,TDATASHRAX,1XCHGAL,AH;右移8位,商放AL中。ANDAX,00FFHMOVTDATA,AXHLT3.3.3逻辑运算与移位指令[例3.12]将一个16位无符3.3.3逻辑运算与移位指令4、算术右移指令SARSAR指令示意图D15/D7D0MSBLSBCF3.3.3逻辑运算与移位指令4、算术右移指令SARSAR指3.3.3逻辑运算与移位指令SARAL,1SARAX,CLSARWORDPTR100[SI],1SARBYTEPTRDATA[SI+BX],CL算术右移1位,相当于带符号数除以2MOVAX,0064HSARAX,13.3.3逻辑运算与移位指令SARAL,1算术右移13.3.3逻辑运算与移位指令三、循环移位指令(rotateshift)8086/8088CPU有4条循环移位指令。不带进位标志CF的左循环移位指令ROL不带进位标志CF的右循环移位指令ROR带进位的左循环移位指令RCL带进位的右循环移位指令RCR
循环移位指令的操作数与移位指令相同。3.3.3逻辑运算与移位指令三、循环移位指令(rotate3.3.3逻辑运算与移位指令1、循环左移指令ROL(rotateleft)指令格式:ROLOPR,CNT;指令功能:操作数向左循环移1位或CL规定的位数,最高位移进CF,同时最高位移进最低位形成循环,进位标志不在循环回路之内。只影响CF、OF两个标志位。3.3.3逻辑运算与移位指令1、循环左移指令ROL(rotaMSBLSBCFROL指令操作示意图
ROL指令影响CF、OF两个标志位。在循环移位为1的情况下,移位后如果最高位与CF不相等,则溢出标志OF=1,否则OF=0,因此OF的值表示符号位在移位前后有没有改变。在移位次数为多次,则OF值不确定。MSB
ROLAH,1ROLBX,CLROLWORDPTR[DI],CLROLBYTEPTR[BX],1分析指令功能ROLAH,1分析指令功能3.3.3逻辑运算与移位指令2、循环右移指令ROR(rotateright)指令格式:ROROPR,CNT;指令功能:操作数向右循环移1位或CL规定的位数,最低位移进CF,同时最低位移进最低位形成循环,进位标志不在循环回路之内。只影响CF、OF两个标志位。3.3.3逻辑运算与移位指令2、循环右移指令ROR(rota3.3.3逻辑运算与移位指令2、循环右移指令ROR(rotateright)CFMSBLSBROR指令操作示意图
ROR指令影响CF、OF两个标志位。在循环移位为1的情况下,移位后如果新的最高位与次高位不等,则溢出标志OF=1,否则OF=0。在移位次数为多次,则OF值不确定。3.3.3逻辑运算与移位指令2、循环右移指令ROR(rotaRORBX,1RORAX,CLRORBYTEPTR[BX],1RORWORDPTR[DI],CL分析指令功能RORBX,1分析指令功能3.3.3逻辑运算与移位指令3、带进位循环左移指令RCL(rotateleftthroughcarry)指令格式:RCLOPR,CNT;指令功能:将目标操作数连同进位标志CF一起向左循环移动一位或由CL寄存器指定的位数。最高位移入进位标志CF,而CF移入最低位。MSBLSBCFRCL指令操作示意图3.3.3逻辑运算与移位指令3、带进位循环左移指令RCL(r3.3.3逻辑运算与移位指令3、带进位循环左移指令RCL(rotateleftthroughcaary)RCLAX,1RCLAH,,CLRCLWORDPTR[DI],1RCLBYTEPTR[SI+BP],CL分析指令功能
RCL指令影响CF、OF两个标志位。在循环移位次数为1的情况下,左移位后如果新的最高位与CF不等,则溢出标志OF=1,否则OF=0。在移位次数为多次,则OF值不确定。3.3.3逻辑运算与移位指令3、带进位循环左移指令RCL(r3.3.3逻辑运算与移位指令4、带进位循环左移指令RCR(rotaterightthroughcaary)指令格式:RCROPR,CNT;指令功能:将目标操作数连同进位标志CF一起向右循环移动一位或由CL寄存器指定的位数。最低位移入进位标志CF,而CF移入最高位。RCR指令操作示意图CFMSBLSB3.3.3逻辑运算与移位指令4、带进位循环左移指令RCR(r3.3.3逻辑运算与移位指令RCRAH,1RCRDI,CLRCRBYTEPTR[BX],1RCRWORDPTR[SI+BX],CL分析指令功能3.3.3逻辑运算与移位指令RCRAH,1分析指令功能3.3.3逻辑运算与移位指令4条循环移位指令rotate与4条移位指令shift比较1、循环移位指令,使得各个位的信息不丢失,只是移动到其他位或进位标志CF上,必要时可以恢复。2、利用循环移位指令可以对任何一位进行测试。例如:测试AL的第6位是0还是1?MOVCL,2ROLAL,CLJNCZERO;CF=0,转ZERO:ZERO:3.3.3逻辑运算与移位指令4条循环移位指令rotate与3.3.4串操作指令数据串(数据块):在内存区域内连续存放着若干个字节(或若干个字)数据(或字符的ASCII码),这样的一组数据称为数据串(数据块)。
字节串:若每个数组元素是字节型,则为字节串。
字串:若给个数组元素是字型,则称字串。90H78H56H34H12H00H00H00H00H00H90H78H56H34H12H00H00H00H00H00H3.3.4串操作指令数据串(数据块):在内3.3.4串操作指令
8086/8088CPU有一组十分有用的串操作指令,这些指令的操作对象不只是单个字节或字,而是内存中地址连续的字节串或字串。每次操作后能自动修改地址为下一次操作作好准备。串操作指令有8条,其中5条为基本操作指令,3条为重复前缀串操作指令。3.3.4串操作指令8086/80883.3.4串操作指令(1)可以对字节串进行操作,也可以对字串进行操作。(2)串操作指令用SI寄存器寻址源操作数,用DI寻址目标操作数,源操作数的隐含段寄存器为DS,但允许但超越;目标操作数隐含的段寄存器ES,但不允许段超越。(3)每一次操作后修改地址指针是增还是减量取决于方向标志DF。DF=0,地址指针自动增量修改,DF=1,地址指针自动减量修改。因此每次串操作指令执行前都要设置DI、SI,并把数组元素的个数设置在CX中。串操作指令格式各不相同,但有以下共同特点:3.3.4串操作指令(1)可以对字节串进行操作,也可以3.3.4串操作指令(4)有的串操作指令可以加重复前缀REP,可使串操作重复进行到结束,重复循环的次数由寄存器CX决定,其执行过程相当于一个循环程序的运行,重复执行后DI、SI都被自动修改。但指令指针IP仍保持指向前缀的地址,直至寄存器CX的内容为0,则退出串操作指令。(5)串操作汇编指令的格式可以写上操作数,也可以在指令操作数后加字母‘B’或“W”。加上字母“B”“W”后指令助记符后面不允许写操作数。(6)串操作指令可以与重复前缀指令结合,进行多次重复操作。3.3.4串操作指令(4)有的串操作指令可以加重复前缀3.3.4串操作指令一、串传送指令MOVS(MOVEstring)指令格式及操作:MOVSDST,SCR
;(ES:DI)(DS:SI)DF=0,增址;DF=1,减址;指令功能:将一个字节串或字串从DS段由SI指向存储器某一区域传送到位于ES由DI所指向存储器的另一个区域,然后根据方向DF自动修改地址指针SI和DI。34h..89hXX..XX3.3.4串操作指令一、串传送指令MOVS(M3.3.4串操作指令MOVSB;字节传送操作,((ES:DI)(DS:SI)SISI+1,DIDI+1)MOVSW;字节传送操作,((ES:DI)(DS:SI)SISI+1,DIDI+1)若方向标志位DF=0,取“+”号;DF=1,取“—”号。该指令不影响标志位3.3.4串操作指令MOVSB;字节传送操作,(3.3.4串操作指令一、串传送指令MOVS(MOVEstring)00H00H00H00H00H12H34H56H78H90H3.3.4串操作指令一、串传送指令MOVS(M3.3.4串操作指令一、串传送指令MOVS(MOVEstring)第一种方法3.3.4串操作指令一、串传送指令MOVS(M3.3.4串操作指令二、存储数据串指令STOS(storestring)指令格式及操作:STOSSCR
;(ES:DI)AX/AL也可以表示为字节或字存储形式:STOSB
;字节存储数据串指令及操作:
(ES:DI)AL,DIDI+1STOSW
;字存储数据串指令及操作:
(ES:DI)AX,DIDI+23.3.4串操作指令二、存储数据串指令STOS(3.3.4串操作指令指令功能:将累加器AX或AL的值送到ES段由DI所指字符串的内存单元中,并且自动修改地址指针。若方向标志DF=0,取“+”号;DF=1,取“—”号。注释:1)经常用来初始化一段内存区域。2)串为目的操作数。 3)不影响标志。3.3.4串操作指令指令功能:将累加器AX或AL的值送3.3.4串操作指令3.3.4串操作指令3.3.4串操作指令CLDMOVDI,0404HMOVCX,0080HMOVAX,0000HLOPP:STOSWDECCXJNZLOPP;CX
=0转移到LOPP处HLT3.3.4串操作指令CLD3.3.4串操作指令三、取字符串指令LODS(loadstring)指令格式及操作:LODSSCR
;AX/AL(DS:SI)
也可以表示为字节或字存储形式:LODSB
;字节形式取字符串指令及操作:
AL←DS:[SI],SI←SI±1LODSW
;字形式取字符串指令及操作:AX←DS:[SI],SI←SI±2
注释:数据串为源操作数;不影响标志。3.3.4串操作指令三、取字符串指令LODS(l3.3.4串操作指令三、取字符串指令LODS(loadstring)3.3.4串操作指令三、取字符串指令LODS(lDATASEGMENTBLOCKdb100DUP(?)PLUS-DATADB100DUP(?)MINUS-DATADB100DUP(?)DATAENDScodesegmentassumecs:code,ds:datastart:movax,datamovds,ax
MOVAH,4CHINT21HCODEENDSENDSTARTDATASEGMENT3.3.4串操作指令三、取字符串指令LODS(loadstring)3.3.4串操作指令三、取字符串指令LODS(l3.3.4串操作指令四、串比较指令CMPS(comparestring)指令格式及操作:CMPSSCR,DST;(DS:SI)—(ES:DI)也可以表示为:
CMPSB;DS:[SI]-ES:[DI],SI←SI±1,DI←DI±1CMPSW;DS:[SI]-ES:[DI],SI←SI±2,DI←DI±2
3.3.4串操作指令四、串比较指令CMPS(co3.3.4串操作指令四、串比较指令CMPS(comparestring)指令功能:将两个字符串相应的元素逐个进行比较(即相减),但比较的结果不回送目标操作数,而反映在标志位上。CMPS指令对大多数的标志位有影响如:ZF、SF、AF、PF、CF和OF。若方向标志DF=0,取“+”号;DF=1,取“—”号。注释:1)比较两个数据串是否相等。2)按减法设置标志。3.3.4串操作指令四、串比较指令CMPS(co3.3.4串操作指令五、串搜索指令SCAS(scanstring)指令格式及操作:SCASDST也可以表示为:
SCASB;AL-ES:[DI],DI←DI±1(字节形式串搜索指令)SCASW;AX-ES:[DI],DI←DI±2(字形式串搜索指令)
指令功能:从数据串中搜索一个数据,被搜索的数据称为关键字,放入AL或AX寄存器。若方向标志DF=0,取“+”号;DF=1,取“—”号。
注释:按减法规律设置标志。3.3.4串操作指令五、串搜索指令SCAS(sc3.3.4串操作指令六、重复前缀三个重复前缀,分为两类:1)REP2)REPZ/REPE和REPNZ/REPNE不能单独使用,只能附加在串操作指令前面,使串操作重复执行。重复前缀不影响标志位。3.3.4串操作指令六、重复前缀三个重复前缀,分为两类3.3.4串操作指令六、重复前缀1)REP:无条件重复前缀。(repeat)与MOVS、STOS配合使用。(REPMOVSB/REPSTOSW)指令操作:如CX=0,退出串操作,CX≠0,做下一步CX←CX-1执行后跟的串操作指令回到第一步重复次数由CX控制3.3.4串操作指令六、重复前缀1)REP:无2)REPZ/REPE(相等/结果为0时重复前缀)。两条常与CMPS、SCAS配合使用CX≠0且ZF=1CX←CX-1执行串操作YNREPZ/REPECX=0或ZF=0退出串操作只有同时满足如下两个条件才能重复执行其后的比较或扫描指令。(1)CX=0,且ZF=1(表示两个操作数比较相等时)继续执行其后的指令。(2)CX=0或ZF=0(表示两个操作数比较不相等时)则停止执行其后的指令,结束该操作。2)REPZ/REPE(相等/结果为0时重复前缀)。3、REPNZ/REPNE
(不相等/结果不为0时重复前缀)。两条常与CMPS、SCAS配合使用。只有同时满足如下两个条件才能重复执行其后的比较或扫描指令。(1)CX=0,且ZF=0(表示两个操作数比较不相等时)继续执行其后的指令。(2)CX=0或ZF=1(表示两个操作数比较相等时)则停止执行其后的指令,结束该操作。CX≠0且ZF=0CX←CX-1执行串操作YNREPNZ/REPNECX=0或ZF=1退出串操作3、REPNZ/REPNE(不相等/结果不为0时重复前缀REPZ/REPE与REPNZ/REPNE注释注释:1)REPZ指令中的“Z”表示的是“ZF=1”,而且“ZF=1”是重复串操作的必要条件;REPNZ中的“NZ”表示的是“ZF=0”,而且“ZF=0”是重复串操作的必要条件。2)REP指令使串操作重复CX规定的次数,REPZ、REPNZ使串操作的重复可能提前结束(观察ZF)。3)注意重复前缀和循环控制指令的差别:
LOOP先做CX减1,后判断;REP先判断,后减1。REPZ/REPE与REPNZ/REPNE注释REPZ/REPE与REPNZ/REPNE用途比较REPZ/REPE:已知两个数据块的内容基本一致,若要找出不一致的地方,则应在CMPS指令前使用REPZ/REPE;REPNZ/REPNE:已知两个数据块的内容基本是不同的,若要找出其中相一致的地方,则应在CMPS指令前使REPNZ/REPNE;REPZ/REPE与REPNZ/REPNE用途比较PUSHDSPOPESLEASI,STRING1LEADI,STRING2MOVCX,0064HREPZCMPSBJNZUNMATMOVAL,0JMPOUTUNMAT:MOVAL,0FFHOUT:MOVRESULT,ALHLT重复运行串比较指令的几种情况1)CX=0,ZF=1:全比完,相同2)CX=0,ZF=0:全比完,有数据不同3)CX≠0,ZF=0:未比完,遇到不同4)CX≠0,ZF=1:未比完,继续比较例3.16比较两个字符串数据,如果都相等,则把RESULT单元设置为0,若不等设置为0FFH后。第一个字符串放在STRING1开始的的单元,第二个数据放在STRING2开始的单元,共100个字节。ZF=0,两串不同PUSHDS重复运行串比较指令的几种情况1)CX=0,Z串操作指令的重复前缀、操作数和地址指针指令重复前缀操作数地址指针寄存器MOVSRER目标ES:DI源DS:SICMPSREPE/REPNE源DS:SI目标ES:DISCASREPE/REPNE目标ES:DILODS无源DS:SISTOSREP目标ES:DI串操作指令的重复前缀、操作数和地址指针指令重复前缀操作数地址微型计算机原理课件3.3.5控制转移指令(contoltransfer)控制转移类指令功能是改变程序的执行顺序。
8086/8088指令执行的地址由代码寄存器CS和指令指针IP来提供。为了使程序的执行转移到新的地址去执行,可改变CS和IP的值,或改变偏移量IP的值。同时改变CS和IP的值称段间转移,段间调用,用far表示。只改变IP的值称段内调用,段内转移用near表示。为进一步节省目标码的长度,对短距离的段内转移,(-128—+127)称为短转移,用short表示。3.3.5控制转移指令(contoltransfe3.3.5控制转移指令(contoltransfer)无论段内转移还是段间转移,都有直接转移与间接转移之分。直接转移:转移的目标地址信息直接出现在机器码中。间接转移:转移的目标地址信息间接的出现在某一个寄存器中或某一个内存变量中,当寄存器进行间接转移时因为寄存器是16位的,所以只能进行段内的转移。3.3.5控制转移指令(contoltransfe3.3.5控制转移指令(contoltransfer)计算段内转移有两种方法:
相对转移:把当前的IP值增加或减少某一个值,就是以当前指令为中心,向前或向后转移,称为相对转移。
绝对转移:以新的值完全代替IP值,称绝对转移。8086/8088中所有段内直接转移都是相对转移,所有段内间接转移和段间转移都是是绝对转移。3.3.5控制转移指令(contoltransfe3.3.5控制转移指令(contoltransfer)控制转移类指令1、无条件转移指令2、条件转移指令3、循环控制指令4、子程序调用及返回指令3.3.5控制转移指令(contoltransfe3.3.5控制转移指令一、无条件转移指令JMP(jump)JMP指令使程序无条件转移到程序规定的地址。该指令根据目标地址的位置与寻址方式有如下5中基本格式。1、段内直接短转移2、段内直接近转移3、段内间接转移4、段间直接转移5、段间间接转移JMP指令不影响标志位3.3.5控制转移指令一、无条件转移指令JMP(ju3.3.5控制转移指令JMPSHORTDST;
执行的操作:IP←IP(现行)+DISPDISP——8位位移量注释:①指令中标号,是某一条指令的名字,其物理意义为指令在内存中的偏移地址,是短标号。相对位移DISP的范围(-128—+127)。②段内:不改变段寄存器(在当前代码段内),只改变指令指针寄存器;直接寻址:汇编指令中直接给出了转移目标的地址,但从指令的操作来说,应属相对寻址。1.段内直接短转移3.3.5控制转移指令JMPSHORTDST3.3.5控制转移指令已知下一条指令地址到目标地址之间的相对位移量在-128—+127的范围,可在标号前写上运算符SHORT,实现段内直接段转移。:JMPSHOTRHELLO:HELLO:MOVAL,30H:
3.3.5控制转移指令已知下一条指令地址到目3.3.5控制转移指令位移量DISPJMP指令HELLO3.3.5控制转移指令3.3.5控制转移指令(1)JMPNEARPTRDST执行的操作:IP←IP(现行)+DISPDISP——16位位移量,16位用补码表示DST:目标地址名称,即指令的标号。近转移:相对于JMP的下一条指令,转
移范围为-32768~+32767。1.段内直接近转移3.3.5控制转移指令(1)JMPNEARP3.3.5控制转移指令(2)JMP2000H段内直接近转移可以直接给出偏移地址。执行的操作:IP←IP(现行)+DISP
3.3.5控制转移指令(2)JMP2000H3.3.5控制转移指令3.3.5控制转移指令3.3.5控制转移指令分析书中例子3.3.5控制转移指令分析书中例子3.3.5控制转移指令JMPDWORDPTRSRC;IP←[EA],CS←[EA+2]注释:通过存储器的一个双字单元提供转移目标的段地址和偏移地址,低位字为偏移地址,高位字为段地址。
JMPDWORDPTR[BX+DI]DS=4000H,BX=1230H,DI=02H计算物理地址:40000H+1230H+2=41232HIPCS高位地址5、段间间接转移3.3.5控制转移指令JMPDWORDPTRS3.3.5控制转移指令二、条件转移指令JCC条件转移指令共19条,这些指令以标志寄存器FLAGS中的标志位为条件,每次执行时自动检测标志位状态,满足条件转移;不满足条件,按指令顺序执行。指令格式:JCCSHORT-LABELCC——为转移条件SHORT-LABEL目标标号条件转移指令的通用格式为:JCClabel如条件满足,则发生转移:IP←IP+8位偏,都是短转移,范围(-128—+127)3.3.5控制转移指令二、条件转移指令JCC3.3.5控制转移指令①条件转移指令的通用格式为:JCClabel如条件满足,则发生转移:IP←IP+8位偏如条件不满足,则不转移,顺序执行下条指令。②所有的条件转移指令均为两字节机器指令,第2字节为8位偏移量,因而转移范围与“JMPSHORT”指令相同。③指令中的条件即为状态标志的状态或状态的组合。3.3.5控制转移指令①条件转移指令的通用格式为:JC3.3.5控制转移指令
3.3.5控制转移指令 3.3.5控制转移指令
3.3.5控制转移指令 3.3.5控制转移指令
3.3.5控制转移指令 3.3.5控制转移指令
3.3.5控制转移指令 3.3.5控制转移指令三、循环控制指令(rotatecontrol)8086/8088CPU中专门设计了几条循环控制指令,用于使一些程序反复执行,形成循环程序,该指令实际上是一组增强型的条件转移指令,根据测试状态标志判定是否满足条件而控制转移。循环控制指令共3条,都与CX寄存器配合使用,CX中存放循环次数。3.3.5控制转移指令三、循环控制指令(rotate微型计算机原理课件微型计算机原理课件微型计算机原理课件3.3.5控制转移指令三、循环控制指令(rotatecontrol)CX←CX-1循环条件成立?YN示意图3.3.5控制转移指令三、循环控制指令(rotate3.3.5控制转移指令1、LOOP循环指令指令格式LOOPDST;DST——目标标号指令功能:是将CX的内容减1后送回CX,若CX=0,则转移到目标标号所给定的地址继续循环,否则(CX=0)结束循环,顺序执行下条指令,因此在循环程序开始前,应将循环次数送CX寄存器。3.3.5控制转移指令1、LOOP循环指令指令功能3.3.5控制转移指令三、循环控制指令(rotatecontrol)2、LOOPZ/LOOPE循环指令指令格式LOOPZDST;DST——目标标号或LOOPEDST3.3.5控制转移指令三、循环控制指令(rotate3.3.5控制转移指令三、循环控制指令(rotatecontrol)LOOPZ/LOOPE指令功能:是将CX的内容减1后送回CX。①如果CX≠0且ZF=1,循环,否则退出;②如果CX≠0但ZF=0,停止循环,按指令循序执行;③如果CX=0(无论ZF如何)停止循环,按指令循序执行。LOOPZ/LOOPE指令对ZF没有影响3.3.5控制转移指令三、循环控制指令(rotate例3.21找出字节数组ARRAY中第一个非0项,并将序号送NO单元,设ARRAY由8个元素组成,若未出现非0,则停止查寻,NO单元清0。MOVSI,OFFSETARRAYMOVCX,8TOP:CMPBYTEPTR[SI],0LOOPZNEXTJNZORENTRYJMPALLZNEXT:INCSIJMPTOPALLZ:MOVWORDPTRNO,0DONE:HLTORENTAR:MOVAX,8SUBAX,CXMOVWORDPTRNO,AXJMPDONE例3.21找出字节数组ARRAY中第一个非0项,并将序号送N3.3.5控制转移指令三、循环控制指令(rotatecontrol)3、LOOPNZ/LOOPNE循环指令指令格式LOOPNZDST;DST——目标标号或LOOPNEDST3.3.5控制转移指令三、循环控制指令(rotate3.3.5控制转移指令三、循环控制指令(rotatecontrol)LOOPNZ/LOOPNE指令功能:是将CX的内容减1后送回CX。①如果CX≠0且ZF=0,循环,否则退出;②如果CX≠0但ZF=1,停止循环,按指令循序执行;③如果CX=0(无论ZF如何)停止循环,按指令循序执行。LOOPNZ/LOOPNE指令对ZF没有影响3.3.5控制转移指令三、循环控制指令(rotate3.3.5控制转移指令三、循环控制指令(rotatecontrol)三条指令是段内短转移,指令的机器代码为两个字节,第一个字节是操作码,第二个为位移量,位移量8位补码在-128—+127范围。该类指令对标志位没有影响。3.3.5控制转移指令三、循环控制指令(rotate例3.22计算两个字节数组array1和array2之和,相加之和放在在sum开始的单元,若遇到数组中的项同时为0,既停止计算,并在no单元记下数组的单元序号,设数组长度为8,使用LOOPNZ编程MOVAL,0MOVSI,-1MOVCX,8NZERO:INCSIMOVAL,ARRAY1[SI]ADDAL,ARRAY2[SI]MOVSUM[SI],ALLOOPNZNZEROJZORENTRYMOVWORDPTRNO,0ZERO:HLTORENTRY:MOVAX,8SUBAX,CXMOVWORDPTRNO,AXJMPZERO例3.22计算两个字节数组array1和array2之3.3.5控制转移指令四、过程调用及返回指令如果一些典型的操作和运算程序段,需要在不同的地方多次反复的出现,则可将这些程序段设计成为过程(相当于子程序),每次需要时就调用该过程(子程序),过程结束后在返回原来调用的地方。采用此方法不仅可以使程序大大缩短,而且有利于实现模块化的程序设计,使程序的编制、阅读和修改都比较方便。
3.3.5控制转移指令四、过程调用及返回指令3.3.5控制转移指令将程序编写成一个专门的程序模块(过程),存放该程序的起始地址即为入口地址。被调用的程序可以在本代码段内(近过程),也可以在其他啊代码段(远过程)。调用的过程地址可以直接方式给出,也可以用间接的方式给出。过程调用指令和返回指令对标志位没有影响。四、过程调用及返回指令3.3.5控制转移指令将程序编写成一个专门CALL指令位于主程序,CALL调用的子程序与CALL指令可以处于同一代码段内,也可以在不同的代码段,因而分段内调用和段间调用;调用时可以采用直接寻址,也可采用间接寻址,故调用指令有四种格式:段内直接调用、段内间接调用、段间直接调用、段间间接调用。指令中“nearptr”表示段内调用,“farptr”表示段间调用,但是由于汇编程序可自动识别“段内”和“段间”,故可省略。3.3.5控制转移指令四、过程调用及返回指令CALL指令位于主程序,CALL调用的子程序与CAL3.3.5控制转移指令1、过程调用指令CALL(callaprocedure)(1)段内直接调用指令格式:CALLDST
DST—过程名(子程序名)指令的操作:
SPSP-2(首先对栈指针自动减2)
(SP+1)IPH(指令指针高8位入栈)
(SP)IPL(指令指针地低8位入栈)IPIP(现行)+DISP3.3.5控制转移指令1、过程调用指令CALL(cal3.3.5控制转移指令1、过程调用指令CALL(callaprocedure)CALLDST的操作是一个近过程,该过程在本段内。指令汇编以后,得到CALL的下一条指令与被调用的过程入口地址的16位相对便移量DISP。段内调用指令的功能:
将当前指令指针IP的内容自动推入堆栈,堆栈指针自动减2,然后将相对位移量DISP加到IP上,使控制转移到调用的过程。相对位移量的范围为-32768~+32767,占两个字节。3.3.5控制转移指令1、过程调用指令CALL(cal3.3.5控制转移指令位移量DISPCall指令,3个字节指令子程序入口07H段内直接调用指令机器码共有3个字节。位移量DISP=目的地址-源地址-33.3.5控制转移指令3.3.5控制转移指令四、过程调用及返回指令(2)段内间接调用指令格式CALLSRCSRC—16位寄存器或各种方式的存储器操作数。指令操作:SPSP-2(SP+1)IPH(SP)IPLIP16位寄存器内容(对寄存器操作数)或IP(EA)(对存储器操作数)3.3.5控制转移指令四、过程调用及返回指令(2)段内3.3.5控制转移指令四、过程调用及返回指令指令功能:将指令指针寄存器IP的内容自动压入堆栈,然后将寄存器或存储器的内容传送到IP,转到入口地址去执行。例如:CALLBXCALLWORDPTR[BX+SI]3.3.5控制转移指令四、过程调用及返回指令指令功能:3.3.5控制转移指令(3)段间直接调用指令格式CALLDSTDST—标号形式出现,但标号的段地址、偏移地址放在指令机器码中。指令的操作数是一个远过程,该指令属于段间调用,主程序和过程不在同一代码段内。指令操作:SPSP-2(调整堆栈指针)(SP+1,SP)CS(现行CS值入栈)CSDST段地址(指令中第4、5字节)SPSP-2(调整堆栈指针)(SP+1,SP)IP(现行IP值入栈)IPDST偏移地址(指令中第2、3字节)3.3.5控制转移指令(3)段间直接调用3.3.5控制转移指令指令功能:把现行的CS和IP值压入堆栈,在把过程和偏移地址分别送入CS和IP,转向过程执行程序。例如:CALLFARPTRPROG3.3.5控制转移指令指令功能:把现行的CS和IP值压3.3.5控制转移指令3.3.5控制转移指令3.3.5控制转移指令(4)段间间接调用指令格式CALLDSTDST—存储器操作数各种寻址方式,在此类指令中,入口地址放在存储器中,包括段地址和偏移地址。指令操作:SPSP-2(调整堆栈指针)(SP+1,SP)CS(现行CS值入栈)CS(EA+2)(取过程段地址)SPSP-2(调整堆栈指针)(SP+1,SP)IP(现行IP值入栈)IP(EA)偏移地址3.3.5控制转移指令(4)段间间接调用3.3.5控制转移指令(4)段间间接调用CALLDST指令功能:指令的操作数是32位的存储器地址,其指令功能是先将现行的CS的内容压入堆栈,并将存储器操作数的后2个字节送CS,再将现行IP的内容压入堆栈,然后将存储器操作数的前2个字节送IP,于是控制转移到另一个代码段执行程序。3.3.5控制转移指令(4)段间间接调用3.3.5控制转移指令(4)段间间接调用执行后,则CS=7856H,IP=3412H,程序转移到过程入口地址7B972H执行指令。3.3.5控制转移指令(4)段间间接调用执行后,则CSCALL指令举例CALLNEARPTRSUB_PRO1(CALLSUB_PRO1)CALLBX;r16,通过寄存器间接给出子程序偏移地址CALLWORDPTR[BX];mem16,通过存储器的字单元间接给出子程序偏移地址,字单元为寄存器间接寻址。CALLWORDPTR[BP+SI+2050H];mem16CALL指令举例CALL指令举例CALLfarptrsub_pro(callsub_pro)CALLFARPTRBXCALLFARPTR[BX]CALLDWORDPTR[BX];通过存储器的双字单元间接给出子程序地址,双字单元为寄存器间接寻址,低位字为子程序偏移地址,高位字为子程序段地址。CALL指令举例3.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)RET指令:放在过程体(子程序)末尾,它使子程序在功能完成后返回到原来调用过程的地方继续执行,该指令一般放在过程的末尾。返回指令为子程序最后执行的指令,作用为断点出栈,返回相应CALL指令的下一条指令。根据子程序与主程序是否同处于一个代码段内,返回指令分为段内返回和段间返回,两类指令的助记符相同,由汇编程序加以区分,并产生不同的机器指令。3.3.5控制转移指令2、过程返回指令RET(Retu3.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)(1)、段内返回指令格式及操作:RET;IPL←SS:[SP],IPH←SS:[SP+1],SP←SP+2(恢复断点)指令功能:把已保护在堆栈区的断点偏移地址送入指令指针寄存器IP,返回调用过程的地方继续执行。注意:应保证CALL指令的类型与过程RET的指令匹配。3.3.5控制转移指令2、过程返回指令RET(Retu3.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)(2)、段间返回指令格式及操作:RET;IPL←SS:[SP],IPH←SS:[SP+1],SP←SP+2(恢复断点)CSL←SS:[SP],CSH←SS:[SP+1],SP←SP+2(恢复断点)3.3.5控制转移指令2、过程返回指令RET(Retu3.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)(2)、段间返回指令功能:把已保护在堆栈区的断点偏移地址送入指令指针寄存器IP,段地址送CS寄存器,返回调用过程的地方继续执行。注意:应保证CALL指令的类型与过程RET的指令匹配。3.3.5控制转移指令2、过程返回指令RET(Retu3.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)(3)带参数返回指令格式及操作:RETn;n—常数或表达式,n只能是16位偶数,不能为奇数。该指令也分段内返回,与段间返回。其操作与返回指令RET基本相同;不同之处:是最后修改堆栈指针SPSP+n3.3.5控制转移指令2、过程返回指令RET(Retu3.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)例3.24下面程序段为段间直接调用:设CS=3000H,SP=1000H,IP=0103H,SS=2000H,(1)当程序执行到CALLSUM指令后,而未执行PUSHAX指令时,SP=?(2)执行RET后SP=?3.3.5控制转移指令2、过程返回指令RET(Retu3.3.5控制转移指令地址机器码指令3000H:0103HB80A00HMOVAX,000AH3000H:0106H9A00000040HCALLSUM3000H:010BHB80A00HMOVDX,AX:SUMPROCFAR4000H:0000H50HPUSHAX4000H:0001H53HPUSHBX::POPBXPOPAX4000H:001FH50HRET
SUMENDP3.3.5控制转移指令地址SS=2000HSS=2000H微型计算机原理课件3.3.6中断指令CPU暂停正在运行的程序,响应I/O设备的请求,为I/O设备服务,或转去处理某些紧急事件。服务或处理结束后,CPU继续运行原来的程序,这种处理过程被称为“中断”。引起中断的事件或设备称为“中断源”,原程序被中断的地方称为“断点”,CPU被中断后执行的程序称为“中断服务程序”、“中断处理程序”或“中断子程序”。1.8086的中断类型2.8086响应中断的过程3.8086的中断指令3.3.6中断指令CPU暂停正在运行的程序,响应3.3.6中断指令1.8086中断类型8086可处理256个中断源(256个中断),每个中断用0~255之间的一个号码表示(中断向量号、矢量号、类型号)。256个中断分成两类。⑴外部中断中断源来自CPU之外(两种)可屏蔽中断:响应与否,受IF标志控制。非屏蔽中断:不受IF控制的中断源。3.3.6中断指令1.8086中断类型
⑵内部中断(4种)中断源为:程序执行过程中,程序自身引发的事件除法错中断:除数为0或除法溢出。(0#)单步中断:若单步标志TF=1,则每条指令执行
行后产生单步中断。(1#)溢出中断:执行中断指令INTO时,如OF=1,则
产生溢出中断。(4#)指令中断:执行中断调用指令INTn,产生指
令中段,类型号n=0~255。
3.3.6中断指令1、软中断INT(interrupt):CPU在程序中安排一条中断指令来引起一个中断过程,这种中断称为软中断。指令格式:INTnn—中断类型码,其值在0~255之间。指令执行时,引起一个中断过程。3.3.6中断指令1、软中断INT(interr微型计算机原理课件3.3.6中断指令软中断INT(interrupt)指令的操作①标志寄存器FLAGS的内容入栈;②禁止响应可屏蔽中断和单步中断,IF、TF清0IF←0,TF←0;③断点的段地址入栈,偏移地址入栈;④从中断向量表取入口地址,得到IP和CS,进入中断服务程序。注释:n为类型号,在程序中使用INT指令时,8086预定义的类型号(0、1、2、4)对标志位IF、TF复位,其他无影响。3.3.6中断指令软中断INT(interrup3.3.6中断指令2、溢出中断INTO(interruptifoverflow):没有操作数,中断类型码为4。功能:检测溢出标志OF,如果OF=1,则启动一个类似于INTn的中断过程(n为4);如果OF=0,不产生中断不进行任何操作。指令格式:INTO一般该指令放带符号数加、减运算后面,判断有无溢出。当发生中断时,中断向量在中断表中的地址:4x4=16=10H;3.3.6中断指令2、溢出中断INTO(inte3.3.6中断指令2、溢出中断INTO指令执行的操作:①标志寄存器FLAGS的内容入栈;②禁止响应可屏蔽中断和单步中断,IF、TF清0③断点的段地址入栈,偏移地址入栈;④IP(0000:0010H);CS(0000:0012H);执行中断程序。3.3.6中断指令2、溢出中断INTO指令执行的3.3.6中断指令3、中断返回指令IRET(interruptreturn)指令格式:IRETIRET指令没有操作数。由于中断系统中,所有的中断服务程序都编写成远过程FAR,中断返回指令IRET是段间返回。最后执行IRET分析指令功能:3.3.6中断指令3、中断返回指令IRET(i3.3.7处理器控制指令这一类指令用于对CPU进行控制,它只是完成简单的控制指令,指令中不需要设置操作数,为单字节指令。3.3.7处理器控制指令这一类指令用于对C3.3.7处理器控制指令一、标志位处理指令1、CLC(clearcarryflag)指令格式与操作:CLC;CF0
指令功能:进位标志CF清0。常在多字节相加或减法运算之前,使用CLC指令,以免在运算时产生不正确的结果。3.3.7处理器控制指令一、标志位处理指令1、CLC3.3.7处理器控制指令2、CMC(Complementcarryflag)指令格式与操作:CMC;CFCF
指令功能:将进位标志取反。3.3.7处理器控制指令2、CMC(Comple3.3.7处理器控制指令3、STC(setcarryflag)指令格式与操作:STC;CF1
指令功能:将进位标置1。3.3.7处理器控制指令3、STC(setca3.3.7处理器控制指令4、CLD(cleardirectionflag)指令格式与操作:CLD;DF0
指令功能:将方向标志清0,该指令使串操作时,SI和DI积存器中的地址指针自动增量。3.3.7处理器控制指令4、CLD(clear3.3.7处理器控制指令5、STD(setdirectionflag)指令格式与操作:STD;DF1
指令功能:将方向标志置1,该指令使串操作时,SI和DI积存器中的地址指针自动减量。3.3.7处理器控制指令5、STD(setdi3.3.7处理器控制指令6、CLI(clearinterruptflag)指令格式与操作:CLI;IF0
指令功能:将中断标志清0,该指令时8086/8088CPU禁止引到INTR上的外部可屏蔽中断的请求。3.3.7处理器控制指令6、CLI(clear3.3.7处
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宠物店店员工作总结
- 黑龙江省哈尔滨市道里区2023-2024学年九年级上学期化学期末测试题
- 大型活动销售总结
- 婚庆策划师的工作总结
- 2025年云南省八省联考高考地理模拟试卷
- 《胡萝卜素的提取定》课件
- 《怎样做品牌规划》课件
- 2023年江西省上饶市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2022年湖北省黄冈市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2024年江苏省无锡市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 中国阴离子交换膜行业调研分析报告2024年
- 绒毛下血肿保胎方案
- 医美行业监管政策与竞争环境
- 2024年02月湖北武汉市公安局招考聘用辅警267人笔试历年高频考题(难、易错点荟萃)答案带详解附后
- 房屋移交的时间和方式
- 北京市西城区2022-2023学年七年级(上)期末数学试卷(人教版 含答案)
- 2024年福建宁德城市建设投资开发公司招聘笔试参考题库含答案解析
- 电焊的安全防护技术模版
- 低值易耗品明细表
- 金矿投资可行性方案
- 山东省济南市2023-2024学年高三上学期期末学习质量检测生物试题(原卷版)
评论
0/150
提交评论