微型计算机原理课件

PPT
  • 阅读 76 次
  • 下载 0 次
  • 页数 150 页
  • 大小 1.746 MB
  • 2022-12-01 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
微型计算机原理课件
可在后台配置第一页与第二页中间广告代码
微型计算机原理课件
可在后台配置第二页与第三页中间广告代码
微型计算机原理课件
可在后台配置第三页与第四页中间广告代码
微型计算机原理课件
微型计算机原理课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 150
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】微型计算机原理课件.ppt,共(150)页,1.746 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-77604.html

以下为本文档部分文字说明:

微型计算机原理授课教师:及接口技术第3章3.3.3逻辑运算与移位指令8086/8088CPU的指令系统提供8位和16位的逻辑运算与移位指令有3组逻辑运算指令AND/OR/XOR/NOT/TEST移位指令SHL/SHR/SAL/SAR循环移位指令ROL/ROR/RCL/

RCR第3章3.3.3逻辑运算与移位指令一、逻辑运算指令8086/8088CPU的逻辑运算指令有AND、OR、XOR、TEST、NOT5条指令。以上5条除NOT对标志位不产生影响;其余均产生影响:这些指令根据各自逻辑运算的结果都将影响SF、ZF、和

PF,同时AF的值不确定。第3章3.3.3逻辑运算与移位指令一、逻辑运算指令1、与运算指令AND指令格式及操作ANDDST,SRC;(DST)(DST)Λ(SRC)注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF

、PF,对AF无定义。第3章3.3.3逻辑运算与移位指令AND的指令可以屏蔽某些不关心的位(该位置0),保留一些有用的位。为了做到这一点,只需把要屏蔽位和“0”进行逻辑位,而将保留的位与“1”进行逻辑与即可。第3章3.3.3逻辑运算与移位指令2、或运算指

令ORORDST,SRC;(DST)(DST)V(SRC)注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。第3章3.3.3逻辑运算与移位指令OR常见用途:把某些特定的位置1。方法:把要置1的位与1按位逻辑或;不改变的位与0按位逻辑或。第3章3.3.3逻辑运

算与移位指令OR与AND的共性:如果寄存器与其自身内容进行逻辑与操作,或进行逻辑或操作,寄存器内容不变,但逻辑运算结果影响SF、ZF、PF标志位,且将CF清0。利用这个特性,可以在数据传送指令之后,进行逻辑运算以影响标志位,然后可以判断数据的正负、是否为0,以及数据

的奇偶性等。第3章3.3.3逻辑运算与移位指令3、异或运算指令XOR指令格式及操作XORDST,SRC;(DST)(DST)⊕(SRC)注释:①操作数格式同加减法指令;②设CF=OF=0,影响SF、ZF、PF,对AF无定义。第3章3.3

.3逻辑运算与移位指令XOR常见用途一:寄存器某些特定的位“求反”,而使其余的位不变。因此‘求反’的位与1„异或’;不变的位与0进行“异或”。MOVAL,0FFH;XORAL,55H;AL=10101010B,55H=01010101B第3章3.3.3逻辑运算与移位指令XOR常见用途二

:寄存器内容清0XORAX,AX;XORBX,BX;在初始化时,将寄存器清0如:00101001B=AXXOR)00101001B=AX00000000B第3章3.3.3逻辑运算与移位指令XOR常见用途三:用来测试

某一操作数是否与另操作数相等,例如检查AX的内容是否等于0F00H,若相等则转MATCH去执行,否则顺序执行。程序段如下:XORAX,0F00H;JZMATCH;JZ为跳转指令表示AX为0时转移:第3章3.3.3逻辑运算与移位指令4、测试指令TEST指令格式及操作TEST

DST,SRC;(DST)&(SRC)DST:可以为寄存器操作数、存储器操作数SRC:可以为寄存器操作数、存储器操作数、立即数指令功能:目标操作数与源操作数按位“逻辑与”运算,结果不送回目标操作数。置CF=0,OF=0;对其他标志没有定义。第3章3.3.3逻辑运算与移位指令TEST指令用于

位的测试,它与条件转移指令一起,共同完成对特定位的状态的判断,并实现相应程序的的转移。与CMP有些类似,CMP比较两个操作数,TEST比较特定的位。测试方法:要测试操作数的的某些位是否为0,只需要把TEST的源操作数设置成一个立即数,其中需要测试的位设为1。第

3章3.3.3逻辑运算与移位指令MOVAL,40H;TESTAL,0AH;JNZNEST;JNZ为跳转指令表示ZF=0时转移:NEST:…..第3章3.3.3逻辑运算与移位指令5、取反指令NOT指令格式及操作NOTOPR;(OPR)(OPR)OPR:除了立

即数以外的各种寻址方式的操作数、寄存器。对标志位没有影响。指令功能:对操作数按位取反。NOT指令是一条逻辑“非”指令,只有一个操作数,可以是8位,也可以是16位的存储器或寄存器。第3章3.3.3逻辑运算与移位指令NOTAL;NOTDXNOTBYTEPTR0002H[

BX]NOTWORDPTR[BX+SI]分析指令功能第3章3.3.3逻辑运算与移位指令二、移位指令(shift)8086/8088CPU有4条移位指令。算术左移指令SAL逻辑左移指令SHL算术右移指令SAR逻辑右移指令SHR功能:用来实现对寄

存器或存储单元的8位或16位数据的移位,指令移位操作可以是向左或向右移一位,也可以是多位,移多位时,规定移位的次数必须放在CL寄存器中。对应同一条机器指令第3章3.3.3逻辑运算与移位指令1、逻辑左移指令SHL/算术左移指令SAL指令格式:SHL(SAL)

OPR,CNT;OPR:通用寄存器或存储器操作数CNT:可为1,或CL,CL中放移位的次数。指令功能:操作数左移1位或CL规定的位数,最低位补0,最高位进CF。只影响CF、OF两个标志位。第3章3.3.3逻辑运算与移位指令逻辑左移指令SHL/算术左移指令SALMSBLSB0CFSHL/SAL指令

示意图D15/D7D0SHL/SAL功能完全一样,因为对一个无符号数乘以2和对一个有符号数乘以2没有什么区别。在左移位数为1的情况下,如果最高位与CF不同,则溢出标志OF=1,这对带符号数可以判断移位前后的符号位不同;反之,如果最高位与CF相同,则溢出标志OF=0,这表示移位前后符号位没有改变。在

移位次数为多次,则OF值不确定。第3章3.3.3逻辑运算与移位指令SHLAL;SHLCL;SHLWORDPTR[BX+100],1分析指令功能左移1位相当于乘2,因此可以代替某些常数的运算,并且速度很快。分析170书中例3.11第3章3.3.3逻辑运算与

移位指令2、逻辑右移指令SHR指令格式:SHROPR,CNT;OPR:通用寄存器或存储器操作数CNT:可为1,或CL,CL中放移位的次数。指令功能:操作数右移1位或CL规定的位数,最低位进CF。最高位补0,只影响CF、OF两个标志

位。第3章3.3.3逻辑运算与移位指令逻辑右移指令SHRSHR指令示意图D15/D7D0在右移位数为1的情况下,移位后如果最高位与次高位不相等,则溢出标志OF=1,否则0F=0,这表示符号位在移位前后有没有改变。在移位次数为多次,则OF值不确定。MSBLSBCF0第3章3.3.3逻辑运算与移位指

令SHRAL,1;SHRAX,CL;SHRBYTEPTR[BX+SI];SHRWORDPTRBUFFER,CL分析指令功能逻辑右移1位相当于无符号数除以2,因此可以代替某些常数的运算,并且采用移位指令比除法指令时执行速度要快得多。第3章3.3.3逻辑运算与移位指令[例3.12]将一个16位

无符号数除以512,结果仍放回原单元。该数原来存放在以TDATA为首地址的两个连续的存储单元中。分析:TDATA512=(TDATA2)256因此用逻辑右移完成上述除法运算。编程如下:MOVAX,TDATASHRAX,1XC

HGAL,AH;右移8位,商放AL中。ANDAX,00FFHMOVTDATA,AXHLT第3章3.3.3逻辑运算与移位指令4、算术右移指令SARSAR指令示意图D15/D7D0MSBLSBCF第3章3.3.3逻辑运算与移位指令SARAL,1

SARAX,CLSARWORDPTR100[SI],1SARBYTEPTRDATA[SI+BX],CL算术右移1位,相当于带符号数除以2MOVAX,0064HSARAX,1第3章3.3.3逻辑运算与移位指令三、循环移位指令(rotates

hift)8086/8088CPU有4条循环移位指令。不带进位标志CF的左循环移位指令ROL不带进位标志CF的右循环移位指令ROR带进位的左循环移位指令RCL带进位的右循环移位指令RCR循环移位指令的操作数与移位指令相同。第3章3.3.3逻辑运算与移位指令1、循环左移指令ROL(rotatel

eft)指令格式:ROLOPR,CNT;指令功能:操作数向左循环移1位或CL规定的位数,最高位移进CF,同时最高位移进最低位形成循环,进位标志不在循环回路之内。只影响CF、OF两个标志位。第3章MSBLSBCFROL

指令操作示意图ROL指令影响CF、OF两个标志位。在循环移位为1的情况下,移位后如果最高位与CF不相等,则溢出标志OF=1,否则OF=0,因此OF的值表示符号位在移位前后有没有改变。在移位次数为多次,则OF值不确定。第3章ROLAH

,1ROLBX,CLROLWORDPTR[DI],CLROLBYTEPTR[BX],1分析指令功能第3章3.3.3逻辑运算与移位指令2、循环右移指令ROR(rotateright)指令格式:ROROPR,CNT;指令功能:操作数向右循环移1位或CL规定的位数,最低位移进CF,同时最低位移进最低位形

成循环,进位标志不在循环回路之内。只影响CF、OF两个标志位。第3章3.3.3逻辑运算与移位指令2、循环右移指令ROR(rotateright)CFMSBLSBROR指令操作示意图ROR指令影响CF、OF两个标志位。在循

环移位为1的情况下,移位后如果新的最高位与次高位不等,则溢出标志OF=1,否则OF=0。在移位次数为多次,则OF值不确定。第3章RORBX,1RORAX,CLRORBYTEPTR[BX],1RORWORDPTR[DI],CL分析指令功能第3章3.3.3逻辑运算与移位指令3、带进位循环

左移指令RCL(rotateleftthroughcarry)指令格式:RCLOPR,CNT;指令功能:将目标操作数连同进位标志CF一起向左循环移动一位或由CL寄存器指定的位数。最高位移入进位标志CF,而CF移入最低位。MSBLS

BCFRCL指令操作示意图第3章3.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逻辑运算与移位指令4、带进位循环左移指令RCR(rotaterightthroughca

ary)指令格式:RCROPR,CNT;指令功能:将目标操作数连同进位标志CF一起向右循环移动一位或由CL寄存器指定的位数。最低位移入进位标志CF,而CF移入最高位。RCR指令操作示意图CFMSBLSB第3章3.3.3逻辑运算与移位指令RCRAH,1RCRDI,CLRCR

BYTEPTR[BX],1RCRWORDPTR[SI+BX],CL分析指令功能第3章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串操作指令数据串(数据块):在内存区域内连续存放着若干个字节(或若干个

字)数据(或字符的ASCII码),这样的一组数据称为数据串(数据块)。字节串:若每个数组元素是字节型,则为字节串。字串:若给个数组元素是字型,则称字串。90H78H56H34H12H00H00H00H00H00H90H78H56H34H12H00H00H00H

00H00H第3章3.3.4串操作指令8086/8088CPU有一组十分有用的串操作指令,这些指令的操作对象不只是单个字节或字,而是内存中地址连续的字节串或字串。每次操作后能自动修改地址为下一次操作作好准备。串操作指令有8条,其中5条为基本操作指令,3条为重

复前缀串操作指令。第3章3.3.4串操作指令(1)可以对字节串进行操作,也可以对字串进行操作。(2)串操作指令用SI寄存器寻址源操作数,用DI寻址目标操作数,源操作数的隐含段寄存器为DS,但允许但超越;目标操

作数隐含的段寄存器ES,但不允许段超越。(3)每一次操作后修改地址指针是增还是减量取决于方向标志DF。DF=0,地址指针自动增量修改,DF=1,地址指针自动减量修改。因此每次串操作指令执行前都要设置DI

、SI,并把数组元素的个数设置在CX中。串操作指令格式各不相同,但有以下共同特点:第3章3.3.4串操作指令(4)有的串操作指令可以加重复前缀REP,可使串操作重复进行到结束,重复循环的次数由寄存器CX决定,其执行过程相当于一个循环程序的运行,重复执

行后DI、SI都被自动修改。但指令指针IP仍保持指向前缀的地址,直至寄存器CX的内容为0,则退出串操作指令。(5)串操作汇编指令的格式可以写上操作数,也可以在指令操作数后加字母‘B‟或“W”。加上字母“B”“W”后指令助记符后面不允许写操作数。(6)串操作指令可以与重复前缀指令结合,进

行多次重复操作。第3章3.3.4串操作指令一、串传送指令MOVS(MOVEstring)指令格式及操作:MOVSDST,SCR;(ES:DI)(DS:SI)DF=0,增址;DF=1,减址;指令功能:将一个字节串或字串从DS段由SI指向存

储器某一区域传送到位于ES由DI所指向存储器的另一个区域,然后根据方向DF自动修改地址指针SI和DI。34h..89hXX..XX第3章3.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.3.4串操作指令一、串传送指令MOVS(MOVEstring)00H00H00H00H00H12H34H56H

78H90H第3章3.3.4串操作指令一、串传送指令MOVS(MOVEstring)第一种方法第3章3.3.4串操作指令二、存储数据串指令STOS(storestring)指令格式及操作:STOSSCR;(ES:DI)

AX/AL也可以表示为字节或字存储形式:STOSB;字节存储数据串指令及操作:(ES:DI)AL,DIDI+1STOSW;字存储数据串指令及操作:(ES:DI)AX,DIDI+2第3章3.3.4串操作指令指令功能:将累加器AX

或AL的值送到ES段由DI所指字符串的内存单元中,并且自动修改地址指针。若方向标志DF=0,取“+”号;DF=1,取“—”号。注释:1)经常用来初始化一段内存区域。2)串为目的操作数。3)不影响标志。第3章3.3.4串操作指令第3章3.3.4串操

作指令CLDMOVDI,0404HMOVCX,0080HMOVAX,0000HLOPP:STOSWDECCXJNZLOPP;CX=0转移到LOPP处HLT第3章3.3.4串操作指令三、取字符串指令LODS(loadstring)指令格式及操作:LODSSCR;AX/AL(DS:SI)

也可以表示为字节或字存储形式:LODSB;字节形式取字符串指令及操作:AL←DS:[SI],SI←SI±1LODSW;字形式取字符串指令及操作:AX←DS:[SI],SI←SI±2注释:数据串为源操作数;不影响标志。第3章3.3.4串操作指令三、取字符串指令L

ODS(loadstring)第3章DATASEGMENTBLOCKdb100DUP(?)PLUS-DATADB100DUP(?)MINUS-DATADB100DUP(?)DATAENDScodesegmentassumecs:code,ds:datastart:movax,datamov

ds,axMOVAH,4CHINT21HCODEENDSENDSTART第3章3.3.4串操作指令三、取字符串指令LODS(loadstring)第3章3.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.3.4串操作指令四、串比较指令CMP

S(comparestring)指令功能:将两个字符串相应的元素逐个进行比较(即相减),但比较的结果不回送目标操作数,而反映在标志位上。CMPS指令对大多数的标志位有影响如:ZF、SF、AF、PF、CF和OF。

若方向标志DF=0,取“+”号;DF=1,取“—”号。注释:1)比较两个数据串是否相等。2)按减法设置标志。第3章3.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.3.4串操作指令六、重复前缀三个重复前缀,分为两类:1)REP2)REPZ/REPE和REPNZ/REPNE不能单独使用,只能附加在串操作指令前面

,使串操作重复执行。重复前缀不影响标志位。第3章3.3.4串操作指令六、重复前缀1)REP:无条件重复前缀。(repeat)与MOVS、STOS配合使用。(REPMOVSB/REPSTOSW)指令操作:如CX=0,退出串操作,CX≠0,做下一步CX←CX-1执行后

跟的串操作指令回到第一步重复次数由CX控制第3章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(表示两个操作数比较不相等时)则停止执行其后的指令,结束该操作。第3章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章REPZ/REPE与REPNZ/REPNE注释注释:1)REPZ指令中的“Z”表示的是“Z

F=1”,而且“ZF=1”是重复串操作的必要条件;REPNZ中的“NZ”表示的是“ZF=0”,而且“ZF=0”是重复串操作的必要条件。2)REP指令使串操作重复CX规定的次数,REPZ、REPNZ使串操作的重复可能提前结束(观察ZF)。3)

注意重复前缀和循环控制指令的差别:LOOP先做CX减1,后判断;REP先判断,后减1。第3章REPZ/REPE与REPNZ/REPNE用途比较REPZ/REPE:已知两个数据块的内容基本一致,若要找出不一致的地方,则应在CMPS指令前使用REPZ/REPE;REPNZ

/REPNE:已知两个数据块的内容基本是不同的,若要找出其中相一致的地方,则应在CMPS指令前使REPNZ/REPNE;第3章PUSHDSPOPESLEASI,STRING1LEADI,STRING2MOVCX,0064HREPZCMPSBJNZUN

MATMOVAL,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个字节。Z

F=0,两串不同第3章串操作指令的重复前缀、操作数和地址指针指令重复前缀操作数地址指针寄存器MOVSRER目标ES:DI源DS:SICMPSREPE/REPNE源DS:SI目标ES:DISCASREPE/REPNE目标ES:DILODS无源DS:S

ISTOSREP目标ES:DI第3章第3章3.3.5控制转移指令(contoltransfer)控制转移类指令功能是改变程序的执行顺序。8086/8088指令执行的地址由代码寄存器CS和指令指针IP来提供。为了使程序的执行转移到新

的地址去执行,可改变CS和IP的值,或改变偏移量IP的值。同时改变CS和IP的值称段间转移,段间调用,用far表示。只改变IP的值称段内调用,段内转移用near表示。为进一步节省目标码的长度,对短距离的段内转移,(-128—+127)称为短转移,用short表示。第3章3.3.5控制转

移指令(contoltransfer)无论段内转移还是段间转移,都有直接转移与间接转移之分。直接转移:转移的目标地址信息直接出现在机器码中。间接转移:转移的目标地址信息间接的出现在某一个寄存器中或某一个内存变量中,当寄存器进行间

接转移时因为寄存器是16位的,所以只能进行段内的转移。第3章3.3.5控制转移指令(contoltransfer)计算段内转移有两种方法:相对转移:把当前的IP值增加或减少某一个值,就是以当前指令为中心,向前或向后转移,称为相对转移。绝对转移:以新的值完全代替IP值,称绝对转移。808

6/8088中所有段内直接转移都是相对转移,所有段内间接转移和段间转移都是是绝对转移。第3章3.3.5控制转移指令(contoltransfer)控制转移类指令1、无条件转移指令2、条件转移指令3、循环控制指令4、子程序调

用及返回指令第3章3.3.5控制转移指令一、无条件转移指令JMP(jump)JMP指令使程序无条件转移到程序规定的地址。该指令根据目标地址的位置与寻址方式有如下5中基本格式。1、段内直接短转移2、段内直接近转移3、段内间接转移4、段间直接转移

5、段间间接转移JMP指令不影响标志位第3章3.3.5控制转移指令JMPSHORTDST;执行的操作:IP←IP(现行)+DISPDISP——8位位移量注释:①指令中标号,是某一条指令的名字,其物理意

义为指令在内存中的偏移地址,是短标号。相对位移DISP的范围(-128—+127)。②段内:不改变段寄存器(在当前代码段内),只改变指令指针寄存器;直接寻址:汇编指令中直接给出了转移目标的地址,但从指令的操作来说,应属相对寻址。1.

段内直接短转移第3章3.3.5控制转移指令已知下一条指令地址到目标地址之间的相对位移量在-128—+127的范围,可在标号前写上运算符SHORT,实现段内直接段转移。:JMPSHOTRHELLO:HELLO:MOVAL,30H:第3章3.3.5控制转移指令位移量DISPJMP指令HELLO第3

章3.3.5控制转移指令(1)JMPNEARPTRDST执行的操作:IP←IP(现行)+DISPDISP——16位位移量,16位用补码表示DST:目标地址名称,即指令的标号。近转移:相对于JMP的下一条指令,转移范围为-32768~+32767。1.段内直接近转移第3章3.3.5控制转移

指令(2)JMP2000H段内直接近转移可以直接给出偏移地址。执行的操作:IP←IP(现行)+DISP第3章3.3.5控制转移指令第3章3.3.5控制转移指令分析书中例子第3章3.3.5控制转移指令JMPDWORDPTRSRC;IP←[EA],CS←[EA+2]注

释:通过存储器的一个双字单元提供转移目标的段地址和偏移地址,低位字为偏移地址,高位字为段地址。JMPDWORDPTR[BX+DI]DS=4000H,BX=1230H,DI=02H计算物理地址:40000H+1230H+2=4123

2HIPCS高位地址5、段间间接转移第3章3.3.5控制转移指令二、条件转移指令JCC条件转移指令共19条,这些指令以标志寄存器FLAGS中的标志位为条件,每次执行时自动检测标志位状态,满足条件转移;不满足

条件,按指令顺序执行。指令格式:JCCSHORT-LABELCC——为转移条件SHORT-LABEL目标标号条件转移指令的通用格式为:JCClabel如条件满足,则发生转移:IP←IP+8位偏,都是短转移,范围(-128—+127)第3

章3.3.5控制转移指令①条件转移指令的通用格式为:JCClabel如条件满足,则发生转移:IP←IP+8位偏如条件不满足,则不转移,顺序执行下条指令。②所有的条件转移指令均为两字节机器指令,第2字节为8位偏移量,因而转移范围与“JMPSHORT”

指令相同。③指令中的条件即为状态标志的状态或状态的组合。第3章3.3.5控制转移指令第3章3.3.5控制转移指令第3章3.3.5控制转移指令第3章3.3.5控制转移指令第3章3.3.5控制转移指令三、循环控制指令(rota

tecontrol)8086/8088CPU中专门设计了几条循环控制指令,用于使一些程序反复执行,形成循环程序,该指令实际上是一组增强型的条件转移指令,根据测试状态标志判定是否满足条件而控制转移。循环控制指令共3条,都与CX寄存器配合使用,CX中存放循环次数。第3章第3章第3章第3章3.3.5

控制转移指令三、循环控制指令(rotatecontrol)CX←CX-1循环条件成立?YN示意图第3章3.3.5控制转移指令1、LOOP循环指令指令格式LOOPDST;DST——目标标号指令功能:是将CX的内容减1后送回CX,若CX=0,则转移到目标标号所

给定的地址继续循环,否则(CX=0)结束循环,顺序执行下条指令,因此在循环程序开始前,应将循环次数送CX寄存器。第3章3.3.5控制转移指令三、循环控制指令(rotatecontrol)2、LOOPZ/LOOPE循环指令指令格式LOOPZDST;DST——目标标号或LOOPEDS

T第3章3.3.5控制转移指令三、循环控制指令(rotatecontrol)LOOPZ/LOOPE指令功能:是将CX的内容减1后送回CX。①如果CX≠0且ZF=1,循环,否则退出;②如果CX≠0但ZF=

0,停止循环,按指令循序执行;③如果CX=0(无论ZF如何)停止循环,按指令循序执行。LOOPZ/LOOPE指令对ZF没有影响第3章例3.21找出字节数组ARRAY中第一个非0项,并将序号送NO单元,设ARRAY由8个元素组成,若未出现非0,则停止查寻,NO单元清0。MOVSI,OFFSET

ARRAYMOVCX,8TOP:CMPBYTEPTR[SI],0LOOPZNEXTJNZORENTRYJMPALLZNEXT:INCSIJMPTOPALLZ:MOVWORDPTRNO,0DONE:HLTORENTAR:MOVAX,8SUBAX,CXMOVWORDPTRNO,AXJ

MPDONE第3章3.3.5控制转移指令三、循环控制指令(rotatecontrol)3、LOOPNZ/LOOPNE循环指令指令格式LOOPNZDST;DST——目标标号或LOOPNEDST第3章3.3.5控制转移指令三、循环控制指令(rotatecon

trol)LOOPNZ/LOOPNE指令功能:是将CX的内容减1后送回CX。①如果CX≠0且ZF=0,循环,否则退出;②如果CX≠0但ZF=1,停止循环,按指令循序执行;③如果CX=0(无论ZF如何)停止循环,按指令循序执行。LOOPNZ/LOOPNE指

令对ZF没有影响第3章3.3.5控制转移指令三、循环控制指令(rotatecontrol)三条指令是段内短转移,指令的机器代码为两个字节,第一个字节是操作码,第二个为位移量,位移量8位补码在-128—+127范围。该类指令

对标志位没有影响。第3章例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章3.3.5控制转移指令四、过程调用及返回指令如果一些典型的操作和运算程序段,需要在不同的地方多次反复的出现,则可将这些程序段设计成为过程(相当于子程序),每次需要时就调用该过程(子程序),过程结束后在返回原来调用的地方。采用此方法不仅可以使程序大大缩短,而且有

利于实现模块化的程序设计,使程序的编制、阅读和修改都比较方便。第3章3.3.5控制转移指令将程序编写成一个专门的程序模块(过程),存放该程序的起始地址即为入口地址。被调用的程序可以在本代码段内(近过程),也可以在其他啊代码段(远过

程)。调用的过程地址可以直接方式给出,也可以用间接的方式给出。过程调用指令和返回指令对标志位没有影响。四、过程调用及返回指令第3章CALL指令位于主程序,CALL调用的子程序与CALL指令可以处于同一代码段内,也可以在不同的代码段,因而分段内调用和段

间调用;调用时可以采用直接寻址,也可采用间接寻址,故调用指令有四种格式:段内直接调用、段内间接调用、段间直接调用、段间间接调用。指令中“nearptr”表示段内调用,“farptr”表示段间调用,但是由于汇编程序可自动识别“

段内”和“段间”,故可省略。3.3.5控制转移指令四、过程调用及返回指令第3章3.3.5控制转移指令1、过程调用指令CALL(callaprocedure)(1)段内直接调用指令格式:CALLDSTDST—过程名(子程序名)指令

的操作:SPSP-2(首先对栈指针自动减2)(SP+1)IPH(指令指针高8位入栈)(SP)IPL(指令指针地低8位入栈)IPIP(现行)+DISP第3章3.3.5控制转移指令1、过程调用指令CALL(callapro

cedure)CALLDST的操作是一个近过程,该过程在本段内。指令汇编以后,得到CALL的下一条指令与被调用的过程入口地址的16位相对便移量DISP。段内调用指令的功能:将当前指令指针IP的内容自动推入堆栈

,堆栈指针自动减2,然后将相对位移量DISP加到IP上,使控制转移到调用的过程。相对位移量的范围为-32768~+32767,占两个字节。第3章3.3.5控制转移指令位移量DISPCall指令,3个字节指令子程序入口07H段内直接调用指令机器码共有3个字节。位移量DISP=目的地址-

源地址-3第3章3.3.5控制转移指令四、过程调用及返回指令(2)段内间接调用指令格式CALLSRCSRC—16位寄存器或各种方式的存储器操作数。指令操作:SPSP-2(SP+1)IPH(SP)IPLIP16位寄存器内容(对寄存器操作数)或IP(EA)(对存储器操作

数)第3章3.3.5控制转移指令四、过程调用及返回指令指令功能:将指令指针寄存器IP的内容自动压入堆栈,然后将寄存器或存储器的内容传送到IP,转到入口地址去执行。例如:CALLBXCALLWORDPTR[BX+SI]第3章3.3.5控制转移指令(3)段间直接调用指令格式CALL

DSTDST—标号形式出现,但标号的段地址、偏移地址放在指令机器码中。指令的操作数是一个远过程,该指令属于段间调用,主程序和过程不在同一代码段内。指令操作:SPSP-2(调整堆栈指针)(SP+1,SP)CS(现行CS值入栈)CSD

ST段地址(指令中第4、5字节)SPSP-2(调整堆栈指针)(SP+1,SP)IP(现行IP值入栈)IPDST偏移地址(指令中第2、3字节)第3章3.3.5控制转移指令指令功能:把现行的CS和IP值压入堆栈,在把过程和偏移地址分别送入CS

和IP,转向过程执行程序。例如:CALLFARPTRPROG第3章3.3.5控制转移指令第3章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.3.5控制转移指令(4)段间间接调用CALLDST指令功能:指令的操作数是3

2位的存储器地址,其指令功能是先将现行的CS的内容压入堆栈,并将存储器操作数的后2个字节送CS,再将现行IP的内容压入堆栈,然后将存储器操作数的前2个字节送IP,于是控制转移到另一个代码段执行程序。第3章3.3

.5控制转移指令(4)段间间接调用执行后,则CS=7856H,IP=3412H,程序转移到过程入口地址7B972H执行指令。第3章CALL指令举例CALLNEARPTRSUB_PRO1(CALLSUB_PRO1)CALLBX;r16,通过寄存器间接给出子程

序偏移地址CALLWORDPTR[BX];mem16,通过存储器的字单元间接给出子程序偏移地址,字单元为寄存器间接寻址。CALLWORDPTR[BP+SI+2050H];mem16第3章CALL指令举例CALLfarptrsub_pro(callsub_pro)

CALLFARPTRBXCALLFARPTR[BX]CALLDWORDPTR[BX];通过存储器的双字单元间接给出子程序地址,双字单元为寄存器间接寻址,低位字为子程序偏移地址,高位字为子程序段地址。第3章3.3.5控制转

移指令2、过程返回指令RET(Returnformprocedure)RET指令:放在过程体(子程序)末尾,它使子程序在功能完成后返回到原来调用过程的地方继续执行,该指令一般放在过程的末尾。返回指令为子程序最后执行的指令,作

用为断点出栈,返回相应CALL指令的下一条指令。根据子程序与主程序是否同处于一个代码段内,返回指令分为段内返回和段间返回,两类指令的助记符相同,由汇编程序加以区分,并产生不同的机器指令。第3章3.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)(1)

、段内返回指令格式及操作:RET;IPL←SS:[SP],IPH←SS:[SP+1],SP←SP+2(恢复断点)指令功能:把已保护在堆栈区的断点偏移地址送入指令指针寄存器IP,返回调用过程的地方继续执行

。注意:应保证CALL指令的类型与过程RET的指令匹配。第3章3.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.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)(2)、段间返回指令功能:把已保护在堆栈区的断点偏移地址送入指令指针寄存器IP

,段地址送CS寄存器,返回调用过程的地方继续执行。注意:应保证CALL指令的类型与过程RET的指令匹配。第3章3.3.5控制转移指令2、过程返回指令RET(Returnformprocedure)(3)带参数返回指令格式及操作

:RETn;n—常数或表达式,n只能是16位偶数,不能为奇数。该指令也分段内返回,与段间返回。其操作与返回指令RET基本相同;不同之处:是最后修改堆栈指针SPSP+n第3章3.3.5控制转移指令2、过程返回指令RET(Returnfo

rmprocedure)例3.24下面程序段为段间直接调用:设CS=3000H,SP=1000H,IP=0103H,SS=2000H,(1)当程序执行到CALLSUM指令后,而未执行PUSHAX指令时,SP=?(2)执行RET后SP=?第3章3.

3.5控制转移指令地址机器码指令3000H:0103HB80A00HMOVAX,000AH3000H:0106H9A00000040HCALLSUM3000H:010BHB80A00HMOVDX,AX:SUMPROCFAR4000H:0000H50HP

USHAX4000H:0001H53HPUSHBX::POPBXPOPAX4000H:001FH50HRETSUMENDP第3章SS=2000H第3章第3章3.3.6中断指令CPU暂停正在运行的程序,响应I/O设备的请求,为I/O设备服务,或转去处理某些紧急事件。服务或处理结束后,CPU继续运行原

来的程序,这种处理过程被称为“中断”。引起中断的事件或设备称为“中断源”,原程序被中断的地方称为“断点”,CPU被中断后执行的程序称为“中断服务程序”、“中断处理程序”或“中断子程序”。1.8086的中断类型2.8086响应中断的过程3.8086的中断指令第3章3.3.6中断指

令1.8086中断类型8086可处理256个中断源(256个中断),每个中断用0~255之间的一个号码表示(中断向量号、矢量号、类型号)。256个中断分成两类。⑴外部中断中断源来自CPU之外(两种)可屏蔽中断:响应与否,受IF标志控制。非屏蔽中断:不受IF控制的中断源。第3章⑵内部

中断(4种)中断源为:程序执行过程中,程序自身引发的事件除法错中断:除数为0或除法溢出。(0#)单步中断:若单步标志TF=1,则每条指令执行行后产生单步中断。(1#)溢出中断:执行中断指令INTO时,如OF=1,则产生溢出中断。(4#)指令中

断:执行中断调用指令INTn,产生指令中段,类型号n=0~255。第3章3.3.6中断指令1、软中断INT(interrupt):CPU在程序中安排一条中断指令来引起一个中断过程,这种中断称为软中断。指令格式:INTnn—中断类型码,其值在0~255之间。指令执行时,引起一个中断过程。第3章第3

章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.3.6中断指令2、溢出中断INTO(interruptifoverflow):没有操作数,中断类型码为4。功能:检测溢出标志OF,如果OF=1,则启动一个类似于INTn的中

断过程(n为4);如果OF=0,不产生中断不进行任何操作。指令格式:INTO一般该指令放带符号数加、减运算后面,判断有无溢出。当发生中断时,中断向量在中断表中的地址:4x4=16=10H;第3章3.3.6中断指令2、溢出中断INTO指令执行的操作:①标志寄存器FLAGS的

内容入栈;②禁止响应可屏蔽中断和单步中断,IF、TF清0③断点的段地址入栈,偏移地址入栈;④IP(0000:0010H);CS(0000:0012H);执行中断程序。第3章3.3.6中断指令3、中断返回指令IRET(interruptreturn)指令格式:IR

ETIRET指令没有操作数。由于中断系统中,所有的中断服务程序都编写成远过程FAR,中断返回指令IRET是段间返回。最后执行IRET分析指令功能:第3章3.3.7处理器控制指令这一类指令用于对CPU进行控制,它只是完成简

单的控制指令,指令中不需要设置操作数,为单字节指令。第3章3.3.7处理器控制指令一、标志位处理指令1、CLC(clearcarryflag)指令格式与操作:CLC;CF0指令功能:进位标志CF清0。常在多字节相加或减法运算之前,使用CLC指令,以免在运算时产生不正确的结果。

第3章3.3.7处理器控制指令2、CMC(Complementcarryflag)指令格式与操作:CMC;CFCF指令功能:将进位标志取反。第3章3.3.7处理器控制指令3、STC(setcarryflag)指令格式与操作:STC;CF1指令功能:将进位标置1。第3章3.3.7处

理器控制指令4、CLD(cleardirectionflag)指令格式与操作:CLD;DF0指令功能:将方向标志清0,该指令使串操作时,SI和DI积存器中的地址指针自动增量。第3章3.3.7处理器控制指令5、STD(setdirectionflag)指令格式与操作:STD;DF

1指令功能:将方向标志置1,该指令使串操作时,SI和DI积存器中的地址指针自动减量。第3章3.3.7处理器控制指令6、CLI(clearinterruptflag)指令格式与操作:CLI;IF0指令功能:将中断标志清0,该指令时8086/8088CPU禁止引到INTR上的外部可屏蔽中断的请

求。第3章3.3.7处理器控制指令7、STI(SETinterruptflag)指令格式与操作:STI;IF1指令功能:将中断标志置1,该指令时8086/8088CPU允许外部可屏蔽中断的请求。第3章3.3.7处理器控制指令一、标志位处理指令以上的标志位处理指令只是对有关的

标志位执行操作,而对其他的标志位则没有影响。第3章3.3.7处理器控制指令二、其它控制指令1、空操作指令:NOP(nooperation)指令格式:NOPNOP指令在执行时,不进行任何操作,然后继续执行下一条指令。该指令对标志位没有任何影响,指

令没有操作数。第3章3.3.7处理器控制指令2、暂停指令:HLT(halt)指令格式:HLTHLT指令的功能使CPU进入暂停状态。该指令对标志位没有影响,指令没有操作数。复位操作或中断,可使之退出暂停状态。第3章3.3.7处理器控制指令3、等

待指令WAIT(wait)指令格式:WAIT该指令执行时,自动检测8086/8088的引脚TEST的信号,若TEST=1则WAIT指令使CPU进入等待状态,若TEST=0则WAIT指令使CPU退出等待状态,继续执行下一条指令。WAIT指令对标志没有影响,无操作数。WAIT

指令的功能是使CPU本身与外部硬件同步工作。第3章3.3.7处理器控制指令4、交权指令ESC(escape)指令格式:ESCDST,SRCDST:外操作码(另一处理器的操作码)SRC:存储器操作数。第3章3.3.7处理器控制指令交权指令ESC功能:

是在最大方式系统中CPU要求协处理器完成某种任务的命令。其功能是使某个协处理器可以从CPU的程序中取得一条指令或一个存储器操作数,以便完成主处理器的某种操作要求。该指令对标志位没有影响。当执行ESC指令时,8086/

8088CPU访问一个存储器操作数,并将其放在数据总线上供其他处理器使用。ESC指令与WAIT指令、TEST引线结合使用时,能够启动一个在某个协处理器中执行的子程序。第3章3.3.7处理器控制指令ESC指令协处理

器平时处于查询状态,一旦查询到CPU执行ESC指令,且发出交权命令,被选协处理器便可开始工作,根据ESC指令的要求完成某种操作,待协处理器操作结束后,便在TEST状态线上向8086CPU回送一个有效低电平信

号,当CPU测试到TEST有效时,才能继续执行后续指令。第3章3.3.7处理器控制指令5、封锁总线操作LOCK(lockbus)这是一个特殊的可以放在任何指令面前的单字节前缀,而不是一条独立的指令。这条指令前缀迫使8086/808

8CPU的总线锁定信号LOCK维持低电平有效,直到执行完下一条指令。外部硬件可接收LOCK指令。凡带有LOCK前缀的指令,在该指令执行过程中都禁止其他协处理器占用总线,故称总线锁定前缀。第3章3.3.7处理器控制指令5、封锁总线操作LOCK(lockbus)总线锁定

常用于资源共享的最大方式系统中,在共享资源的多处理器系统中,必须提供一些手段对这些资源的存取进行控制。指令前缀LOCK就是一种手段。利用LOCK指令,使任一时刻只允许多个处理器之一使用总线工作,而其他均被封锁。例如:LOCKMOVSTORG[SI

],AL其中STORG[SI]的一个存储器地址。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?