《最新微机第3章2PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新微机第3章2PPT课件.ppt(97页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微机第微机第3 3章章2 2三、逻辑运算和移位类三、逻辑运算和移位类逻辑运算逻辑运算移位操作移位操作与与或或非非异或异或非循环移位非循环移位循环移位循环移位逻辑移位逻辑移位算术移位算术移位不带进位位的移位不带进位位的移位带进位位的移位带进位位的移位2“或或”指令的应用例指令的应用例lORAX,DIlORCL,0FHlORAX,AX OR AL,AL JPE GOON OR AL,80H GOON:.偶校验转移偶校验转移(PF=1)将一个二进制将一个二进制数数9变为字符变为字符9?9(3)“非非”运算指令运算指令NOTl格式:格式:NOT OPRDNOT OPRDl操作:操作数按位取反再送回原地
2、址操作:操作数按位取反再送回原地址l指令中的操作数不能是立即数指令中的操作数不能是立即数l指令的执行对标志位无影响指令的执行对标志位无影响 例:例:NOT WORD PTRSINOT WORD PTRSINOTNOTAXAXNOT CLNOT CL10(4)“异或异或”运算指令运算指令XORl格式:格式:XOROPRD1,OPRD2l操作:操作:两操作数相两操作数相“异或异或”,结果送目,结果送目标标地址地址l两操作数自身相异或,结果两操作数自身相异或,结果XORAX,AXXORAX,1122HXORAL,BX11(5)“测试测试”指令指令TESTl格式:格式:TESTOPRD1,OPRD2l
3、操作:操作:执行执行“与与”运算,但运算的结果运算,但运算的结果不不送回目标地址。送回目标地址。l应用:常用于测试某些位的状态应用:常用于测试某些位的状态TESTAL,02HTESTAX,8000H122.移位指令移位指令非循环移位指令非循环移位指令循环移位指令循环移位指令l移动一位时由指令直接给出;移动两位移动一位时由指令直接给出;移动两位及以上,则移位次数由及以上,则移位次数由CL指定。指定。131)非循环移位指令非循环移位指令l逻辑左移逻辑左移l算术左移算术左移l逻辑右移逻辑右移l算术右移算术右移14(1)算术左移和逻辑左移算术左移和逻辑左移SAL/SHLl格式:格式:SALOPRD,1
4、SALOPRD,CLSHLOPRD,1SHLOPRD,CL有符号数有符号数无符号数无符号数逻辑逻辑左移左移移动一位后,若移动一位后,若CF与最高不相与最高不相等,则等,则OF=1;否则否则OF=0150操作数操作数区别区别:SHL将操作数视为无符号数将操作数视为无符号数,SAL将操作数将操作数视为有符号数。视为有符号数。OF=1对对SHL指令不表示左移溢出,对指令不表示左移溢出,对SAL指令表示左移后超出了符号数的表示范围。指令表示左移后超出了符号数的表示范围。例例MOVAL,41HSHLAL,1(AL)=82H,CF=0,OF=1。CF16例例把以把以DATA为首址的两个连续单元中的为首址的
5、两个连续单元中的16位无符号数乘以位无符号数乘以10。LEASI,DATA;(;(SI)=DATAMOVAX,SI;(;(AX)被乘数被乘数SHLAX,1;(;(AX)=DATA*2MOVBX,AX;MOVCL,2;(;(CL)=2次数次数SHLAX,CL;(;(AX)=DATA*8ADDAX,BX;(;(AX)=DATA*10HLT17(2)逻辑右移)逻辑右移SHRl格式:格式:SHROPRD,ISHROPRD,CL0CF无符号数无符号数的右移的右移移动一位后,若次高位与最高位移动一位后,若次高位与最高位不相等,则不相等,则OF=1;否则否则OF=018SHR指令影响标志位指令影响标志位CF
6、和和OF。如果移动次数为如果移动次数为1,且移位之后新的最高,且移位之后新的最高位和次高位不相等,则标志位位和次高位不相等,则标志位OF=1,否则,否则OF=0。若移位次数不为。若移位次数不为1,则,则OF状态不定。状态不定。SHR相当于无符号数整除以相当于无符号数整除以2iSHRAL,1SHRBX,CLSHRBYTEPTRSI,CL19(3)算术右移)算术右移SARl格式格式SAROPRD,1SAROPRD,CL有符号数有符号数的右移的右移CF20SARAL,1SARSI,CLSARWORDPTRBX,1SAR指令影响标志位:指令影响标志位:CF、OF、PF、SF和和ZF,AF值不变。值不变
7、。SHR相当于有符号数整除以相当于有符号数整除以2i212)循环移位指令)循环移位指令l不带进位位的循环移位不带进位位的循环移位l带进位位的循环移位带进位位的循环移位l循环移位指令的格式、对操作数的要求与非循循环移位指令的格式、对操作数的要求与非循环移位指令相同环移位指令相同左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR22(1)不带进位位的循环左移指令)不带进位位的循环左移指令ROL指令格式:指令格式:ROLOPRD,1ROLOPRD,CLCF23ROL指令影响标志位指令影响标志位CF和和OF。如果移动次数为如果移动次数为1,且移位之后新的最,且移位之后新的最高位和次高位不
8、相等,则标志位高位和次高位不相等,则标志位OF=1,否,否则则OF=0。若移位次数不为。若移位次数不为1,则,则OF状态不状态不定。定。ROLCH,1ROLBX,CLROLBYTEPTRBX,124(2)不带进位位的循环右移指令)不带进位位的循环右移指令ROR指令格式:指令格式:ROROPRD,1ROROPRD,CLCF25ROR指令影响标志位指令影响标志位CF和和OF。如果移动次数为如果移动次数为1,且移位之后新的最,且移位之后新的最高位和次高位不相等,则标志位高位和次高位不相等,则标志位OF=1,否,否则则OF=0。若移位次数不为。若移位次数不为1,则,则OF状态不状态不定。定。RORCH
9、,1RORBL,CLRORWORDPTRSI,126(3)带进位位的循环左移指令)带进位位的循环左移指令RCL指令格式:指令格式:RCLOPRD,1RCLOPRD,CLCFCF27ROL指令影响标志位指令影响标志位CF和和OF。如果移动次数为如果移动次数为1,且移位之后新的最高,且移位之后新的最高位和次高位不相等,则标志位位和次高位不相等,则标志位OF=1,否则,否则OF=0。若移位次数不为。若移位次数不为1,则,则OF状态不定。状态不定。RCLAX,1RCLBL,CLRCLBYTEPTRSIDATA,128(4)带进位位的循环右移指令)带进位位的循环右移指令RCR指令格式:指令格式:RCRO
10、PRD,1RCROPRD,CLCF29RCR指令影响标志位指令影响标志位CF和和OF。如果移动次数为如果移动次数为1,且移位之后新的最,且移位之后新的最高位和次高位不相等,则标志位高位和次高位不相等,则标志位OF=1,否,否则则OF=0。若移位次数不为。若移位次数不为1,则,则OF状态不状态不定。定。RCRAX,1RCRBL,CLRCRWORDPTRDIDATA,130循环移位指令的应用循环移位指令的应用l用于对某些位状态的测试用于对某些位状态的测试l高位部分和低位部分的交换高位部分和低位部分的交换l与非循环移位指令一起组成与非循环移位指令一起组成32位或更长位或更长字长数的移位字长数的移位3
11、1程序例程序例 MOV SI,1000H MOV SI,1000HMOV DI,3000HMOV DI,3000HMOV CX,4MOV CX,4BBBBBB:MOV AL,SIMOV AL,SI MOV BL,ALMOV BL,AL AND AL,0FH AND AL,0FH OR AL,30H OR AL,30HMOV DI,ALMOV DI,AL INC DI INC DI MOV AL,BL MOV AL,BLPUSH CXPUSH CXMOV CL,4MOV CL,4SHR AL,CLSHR AL,CLSHR AL,CLSHR AL,CLOR AL,30HOR AL,30HOR AL
12、,30HOR AL,30HMOV DI,ALMOV DI,ALMOV DI,ALMOV DI,ALINC DIINC DIINC DIINC DIINC SIINC SIINC SIINC SIPOP CXPOP CXPOP CXPOP CXDEC CXDEC CXDEC CXDEC CXJNZ BBBJNZ BBBJNZ BBBJNZ BBBHLTHLTHLTHLT程序程序功能?功能?32程序例程序例l将将10001000H H开始存放开始存放的四个压缩的四个压缩BCDBCD码码转换为转换为ASCIIASCII码存码存放在放在30003000H H开始的开始的单元中去单元中去 12H34H5
13、6H78H 1000H3000H33四、串操作指令四、串操作指令l针对数据块或字符串的操作针对数据块或字符串的操作l可实现存储器到存储器的数据传送可实现存储器到存储器的数据传送l待操作的数据串称为源串,目标地址称待操作的数据串称为源串,目标地址称为目标串为目标串34串操作指令的特点串操作指令的特点l源串一般存放在数据段,偏移地址由源串一般存放在数据段,偏移地址由SI指定。允指定。允许段重设许段重设l目标串必须在附加段,偏移地址由目标串必须在附加段,偏移地址由DI指定指定l指令自动修改地址指针,修改方向由指令自动修改地址指针,修改方向由DF决定。决定。DF=0增地址方向;增地址方向;DF=1减地
14、址方向减地址方向l数据块长度值由数据块长度值由CX指定指定l可增加自动重复前缀以实现自动修改可增加自动重复前缀以实现自动修改CX内容内容35串操作指令流程串操作指令流程取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?36重复前缀重复前缀lREP无条件重复无条件重复lREPE相等重复相等重复lREPZ结果为零重复结果为零重复lREPNE不相等重复不相等重复lREPNZ不为零重复不为零重复条件重复条件重复CX0ZF=1CX0 ZF=0CX=037串操作指令串操作指令l串传送串传送MOVS
15、l串比较串比较CMPSl串扫描串扫描SCASl串装入串装入LODSl串送存串送存STOS38(1)串传送指令串传送指令l格式:格式:MOVSOPRD1,OPRD2MOVSB;传送一个字节传送一个字节MOVSW;传送一个字传送一个字串传送指令常与无条件重复前缀串传送指令常与无条件重复前缀REP连用连用39串传送指令串传送指令例例对比用对比用MOV指令和指令和MOVS指令实现将指令实现将200B数据从内存的一个区域送到另一个区数据从内存的一个区域送到另一个区域的程序段域的程序段40串传送指令例串传送指令例将将2000H:1200H地址开始的地址开始的100字节传送到字节传送到6000H:0000H
16、开始的内存单元中。开始的内存单元中。MOVAX,2000HMOVDS,AXMOVAX,6000HMOVES,AXMOVSI,1200HMOVDI,0MOVCX,100CLDREPMOVSB41(2)串比较指令)串比较指令l格式:格式:CMPSOPRD1,OPRD2CMPSBCMPSWl串比较指令常与条件重复前缀(串比较指令常与条件重复前缀(REPE、REPZ、REPNE、REPNZ)连用,指令的执)连用,指令的执行不改变操作数,仅影响标志位。行不改变操作数,仅影响标志位。42串比较指令例串比较指令例比较两个字符串是否相同,并找出其中第一个比较两个字符串是否相同,并找出其中第一个不相同字符的地址
17、,将该地址送不相同字符的地址,将该地址送BX,不相同字符,不相同字符的送的送AL。两个字符串的长度均为。两个字符串的长度均为200B,M1、M2分别为源串、目标串的首地址。分别为源串、目标串的首地址。LEASI,M1LEADI,M2MOVCX,200CLDREPECMPSBTESTCX,00FFHJZSTOPDECSIMOVAL,SIMOVBX,SISTOP:HLT43(3)串扫描指令)串扫描指令l格式:格式:SCASOPRD(目的串目的串)SCASBSCASWl执行与执行与CMPSCMPS指令相似的操作,只是这里指令相似的操作,只是这里的源操作数是的源操作数是AXAX或或AL(AL(目的串由
18、目的串由ES:DIES:DI所所指向指向)目目 标标操作数操作数44串扫描指令的应用串扫描指令的应用l常用于在指定存储区域中寻找某个常用于在指定存储区域中寻找某个关键字关键字45串扫描指令例串扫描指令例在在ES段中从段中从2000H单元开始存放了单元开始存放了10个字符,寻个字符,寻找其中有无字符找其中有无字符“A”。若有则记下搜索次数(放在。若有则记下搜索次数(放在DATA1单元),并记下存放单元),并记下存放“A”的地址(放在的地址(放在DATA2单元)。单元)。MOVDI,2000HMOVDI,0MOVBX,2000HJMPDONEMOVCX,0AHFOUD:DECDIMOVAL,AMO
19、VDATA2,DICLDINCDIREPNZSCASBSUBDI,BXJZFOUDDONE:MOVDATA1,DI46(4)串装入指令)串装入指令l格式:格式:LODSOPRD(源串源串)LODSBLODSWl操作:操作:对字节:对字节:AL (DS:SI)AL (DS:SI)对对 字:字:AX (DS:SI)AX (DS:SI)源操作数源操作数47串装入指令串装入指令l用于将内存某个区域的数据串依次装入用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口;累加器,以便显示或输出到接口;lLODS指令一般不加重复前缀;指令一般不加重复前缀;lLODS指令不影响标志位。指令不影响标志位
20、。48例例以以MEM为首地址的内存区域中有为首地址的内存区域中有10个以非压缩个以非压缩BCD码形式存放的十进制数码形式存放的十进制数,它们的值可能是它们的值可能是09中中的任意一个的任意一个,现编程将这现编程将这10个数顺序显示在屏幕上。个数顺序显示在屏幕上。LEASI,MEMMOVCX,10CLDMOVAH,02HNEXT:LODSBADDAL,30HMOVDL,ALINT21HDECCXJNZNEXTHLT49(5)串存储指令)串存储指令l格式:格式:STOSOPRD(目的串目的串)STOSBSTOSW指令对标志位不影响指令对标志位不影响l操作:操作:对字节:对字节:AL (ES:DI)
21、AL (ES:DI)对对 字:字:AX (ES:DI)AX (ES:DI)STOS指令可以加重复前缀指令可以加重复前缀REP,对连续对连续的存储单元存入相同的值;的存储单元存入相同的值;目目 标标操作数操作数50串送存指令例串送存指令例 将内存某个区域清零将内存某个区域清零l设计思想:设计思想:区域首地址送区域首地址送ES:DI串长度送串长度送CX置方向标志置方向标志DF0送累加器送累加器AL执行串送存指令执行串送存指令p13951例例把把6000H:1200H单元开始的单元开始的100个字存个字存储单元内容清零。储单元内容清零。MOVAX,6000HMOVES,AXMOVDI,1200HMO
22、VCX,100CLDMOVAX,0REPSTOSW52五、程序控制指令五、程序控制指令转移指令转移指令循环控制循环控制过程调用过程调用中断控制中断控制531.无条件无条件转移指令转移指令无条件无条件转移指令转移指令 无条件转移到目标地址,执行新的指令无条件转移到目标地址,执行新的指令有条件转移指令有条件转移指令 在具备一定条件的情况下转移到目标地址在具备一定条件的情况下转移到目标地址通过修改指令的通过修改指令的偏移地址偏移地址或或段地址及偏移段地址及偏移地址地址实现程序的转移实现程序的转移54无条件无条件转移指令转移指令l格式:格式:JMPOPRD目标地址目标地址与与JMP在同在同一代码段一代
23、码段与与JMP不在不在同一代码段同一代码段原则上可实现在整个内存空间的转移原则上可实现在整个内存空间的转移55无条件无条件段内转移段内转移转移的转移的目标地址目标地址在当前代码段内在当前代码段内指令中直接给指令中直接给出目标地址出目标地址由指令中的寄存器由指令中的寄存器或存储器操作数指或存储器操作数指出目标地址出目标地址段内直接寻址段内直接寻址段内间接寻址段内间接寻址56(1)无条件段内直接转移无条件段内直接转移JMPLabel近地址标号近地址标号JMPLabel 代代码码段段位移量位移量下一条要执行指令的下一条要执行指令的偏移地址偏移地址=当前当前IP+位移量位移量57段内直接短转移段内直接
24、短转移 偏移地址为偏移地址为8位,转移范围为位,转移范围为128+127B,在标号前加运算符在标号前加运算符SHORT;段内直接近转移段内直接近转移 偏移地址为偏移地址为16位,转移范围为位,转移范围为32768+32767B,在标号前加运算符,在标号前加运算符NEAR,缺省时为,缺省时为近近转移。转移。58无条件段内无条件段内间接转移转移JMPBXJMPWORDPTRBX+DIJMP 代代码码段段数数据据段段BX=1200 50H23HIP JMP指令指令59指令中的操作数是指令中的操作数是16位的寄存器或者存位的寄存器或者存储器地址;储器地址;可以采用各种寻址方式;可以采用各种寻址方式;指
25、令的执行是用指定的寄存器内容或者指令的执行是用指定的寄存器内容或者两个存储器单元内容作为目标的偏移地两个存储器单元内容作为目标的偏移地址来代替原来的址来代替原来的IP的内容。的内容。60无条件转移指令无条件转移指令段间转移段间转移转移的转移的目标地址目标地址不在当前代码段内不在当前代码段内指令中直接给指令中直接给出目标地址出目标地址由指令中的由指令中的32位存位存储器操作数指出目储器操作数指出目标地址标地址段间直接寻址段间直接寻址段间间接寻址段间间接寻址61(3)无条件段间直接转移)无条件段间直接转移JMPFARLabel远地址标号远地址标号JMPLabel 代代码码段段1Label与与JMP
26、之间之间的位移量的位移量代代码码段段2段高字节段高字节IPCS段低字节段低字节偏高字节偏高字节偏低字节偏低字节62(3)无条件段间间接转移)无条件段间间接转移JMPDWORDPTRBX(DS)=3000H,(BX)=3000H指令执行后指令执行后(CS)=8010H(IP)=200BH目标地址:目标地址:8210BH0BH20H10H80H33000HIPCSJMP 指令码指令码代代码码段段1代代码码段段2数数据据段段632、条件转移指令、条件转移指令Jccl在满足一定条件下,程序转移到目标地在满足一定条件下,程序转移到目标地址继续执行址继续执行l条件转移指令均为段内短转移,即转移条件转移指令
27、均为段内短转移,即转移范围为:范围为:-128+127条件指令不影响标志位。条件指令不影响标志位。p14264JCXZtarget;(CX)=0转移转移JG/JNLEtarget;(SF)=(OF)且()且(ZF)=0;大于;大于/不小于或等于转移不小于或等于转移JGE/JNLtarget;(SF)=(OF);大于或等于;大于或等于/不小于转移不小于转移JL/JNGEtarget;(SF)(OF)且()且(ZF)=0;小于;小于/不大于或等于转移不大于或等于转移JLE/JNGtarget;(SF)(OF)且()且(ZF)=1;小于或等于;小于或等于/不大于转移不大于转移JOtarget;(OF
28、)=1,溢出转移,溢出转移JNOtarget;(OF)=0,无溢出转移,无溢出转移65JStarget;(SF)=1结果为负转移结果为负转移JNStarget;(SF)=0结果为正转移结果为正转移JA/JNBLtarget;(CF)=0且(且(ZF)=0;高于;高于/不低于或等于转移不低于或等于转移JAE/JNBtarget;(CF)=0;高于或等于;高于或等于/不低于转移不低于转移JB/JNAEtarget;(CF)=1;低于;低于/不高于或等于转移不高于或等于转移JBE/JNAtarget;(CF)=1或(或(ZF)=1;低于或等于;低于或等于/不高于转移不高于转移66JCtarget;(
29、CF)=1有进位转移有进位转移JNCtarget;(CF)=0无进位转移无进位转移JE/JZtarget;(SF)=1;等于或为零转移;等于或为零转移JNE/JNZtarget;(SF)=0;不等于或非零转移;不等于或非零转移JP/JPEtarget;(PF)=1;奇偶校验位为偶转移;奇偶校验位为偶转移JNP/JPOtarget;(PF)=0;奇偶校验位为奇转移;奇偶校验位为奇转移67例例在以在以DATA为首地址的内存数据段中,存放有为首地址的内存数据段中,存放有200个个16位位带符号数,试找出其中最大和最小的符号数,并分别放在带符号数,试找出其中最大和最小的符号数,并分别放在MAX和和MI
30、N为首的内存单元中。为首的内存单元中。START:LEASI,DATACMPAX,MINMOVCX,200JLSMALLCLD;若小于则转若小于则转LODSWJMPGOONMOVMAX,AXLARGER:MOVMAX,AXMOVMIN,AXJMPGOONDECCXSMALL:MOVMIN,AXNEXT:LODSWGOON:LOOPNEXTCMPAX,MAXHLTJGLARGER;若大于则转;若大于则转683.循环控制指令循环控制指令l控制程序在以当前控制程序在以当前IP为中心的为中心的-128+127范围内循环执行范围内循环执行l循环次数由循环次数由CX寄存器指定寄存器指定l不影响标志位不影响
31、标志位LOOP LOOPZ LOOPNZ69(1)无条件循环指令)无条件循环指令LOOPl格式:格式:LOOPLABELl循环条件:循环条件:CX0l操作:操作:DECCXJNZ符号地址符号地址70(2)条件循环指令)条件循环指令l格式:格式:LOOPZLABELLOOPELABELl循环条件:循环条件:CX0 ZF=1l格式:格式:LOOPNZLABELLOOPNELABELl循环条件:循环条件:CX0 ZF=071例例比较两组输入端口的数据是否一致,主端口的比较两组输入端口的数据是否一致,主端口的首地址为首地址为MAIN_PORT,冗余端口的首地址为,冗余端口的首地址为REDU_PORT,
32、端口数目均为,端口数目均为NUMBERMOVDX,MAIN_PORTMOVBX,REDU_PORTMOVCX,NUMBERTOP:INAX,DXXCHGAX,BPCMPAX,BPINCDXLOOPETOPXCHGBX,DXJNZERRORINAX,DXINCDXERROR:XCHGBX,DX724.过程调用和返回过程调用和返回段内调用段内调用段间调用段间调用段内直接调用段内直接调用段内间接调用段内间接调用段间直接调用段间直接调用段间间接调用段间间接调用73调用指令与转移指令的比较调用指令与转移指令的比较l用于调用一个子过程用于调用一个子过程l调用前须保护断点地址调用前须保护断点地址l子过程执行
33、结束后要返回原调用处继续子过程执行结束后要返回原调用处继续执行原程序执行原程序断点恢复断点恢复74调用指令的执行过程调用指令的执行过程l将调用指令的下一条指令的地址(断点)压入将调用指令的下一条指令的地址(断点)压入堆栈堆栈l获取子过程的入口地址(子过程第获取子过程的入口地址(子过程第1条指令的条指令的偏移地址)偏移地址)l(执行子过程,含相应参数的保存及恢复)(执行子过程,含相应参数的保存及恢复)l将断点偏移地址由堆栈弹出,返回原程序将断点偏移地址由堆栈弹出,返回原程序75(1)段内直接调用)段内直接调用l子过程与原调用程序在同一代码子过程与原调用程序在同一代码段,在调用之前只需保护断点的段
34、,在调用之前只需保护断点的偏移地址偏移地址l格式:格式:CALLNEARPROC近过程名近过程名断点断点入口入口地址地址可省略可省略76执行过程:执行过程:(SP)(SP)2(SP)+1(IPH)(SP)(IPL)(IP)(IP)+16位偏移量位偏移量77(2)段内间接调用)段内间接调用l指令格式:指令格式:CALLOPRDOPRD为为16位寄存器内容或者两个存位寄存器内容或者两个存储器单元内容。储器单元内容。CALLAX;(;(IP)(AX)CALLWORDPTRBX;(;(IP)(BX+1):():(BX)78段内调用例段内调用例lCALLTIMERlCALLWORDPTRSI直接调用直接
35、调用间接调用间接调用79(3)段间直接调用)段间直接调用l子过程与原调用程序不在同一代码段,子过程与原调用程序不在同一代码段,在调用之前需保护断点的段基地址和偏在调用之前需保护断点的段基地址和偏移地址。先将断点的移地址。先将断点的CS压栈,再压入压栈,再压入IPl格式:格式:CALLFARPROC80执行过程:执行过程:(SP)(SP)2,(SP+1):):(SP))(CS)(SP)(SP)2,(SP+1):):(SP))(IP)(CS)所调用过程入口的段地址所调用过程入口的段地址(IP)所调用过程入口的偏移地址所调用过程入口的偏移地址81(3)段间间接调用)段间间接调用l指令格式:指令格式:
36、CALLOPRDOPRD为为32位的存储器地址。位的存储器地址。CALLDWORDPTRSI;(IPL)(DS:SI);(IPH)(DS:(SI+1);(CSL)(DS:(SI+2);(CSH)(DS:(SI+3)82段间调用例段间调用例lCALLFARTIMERlCALLDWORDPTRSI83返回指令返回指令l从堆栈中弹出断点地址,返回原程序从堆栈中弹出断点地址,返回原程序l格式:格式:RETRETlRETRET指令一般位于子程序的最后指令一般位于子程序的最后lRETRET指令不影响标志位指令不影响标志位845.中断指令中断指令中断中断指令指令的用途的用途:l用户程序可通过中断指令调用操作
37、系统用户程序可通过中断指令调用操作系统提供的特殊子程序提供的特殊子程序(称为系统功能调用称为系统功能调用)。l用来实现一些特殊的功能。如调试程序用来实现一些特殊的功能。如调试程序时单时单步、断点等。步、断点等。l调用调用BIOS提供的硬件低层调用。提供的硬件低层调用。85(1)INT指令指令l格式:格式:INTnl说明:说明:n4=存放中断服务存放中断服务子程序入口地址的单子程序入口地址的单元地址元地址中断类型码中断类型码n=0 255n4XXHXXHXXHXXH入口偏移地址入口偏移地址IP入口段地址入口段地址CS86操作:操作:l将将FLAGS压入堆栈压入堆栈l(TF)0,(IF)0l将将I
38、NT指令下一条指令的指令下一条指令的CS、IP压栈压栈l取中断服务程序入口地址取中断服务程序入口地址(IP)(n4+1):(n4)(CS)(n4+3):(n4+2)87中断指令例中断指令例lINT21HIPLIPHCSLCSHSP=1200FLAGSLFLAGSHSP=11FA执行执行INT指指令后令后保护断点保护断点88中断指令例中断指令例l执行执行INT21H指令后指令后IP=?CS=?21H4=0084H23H11H00H20HIPCS89(2)溢出中断指令溢出中断指令INTOl格式:格式:INTOl若若OF=1,OF=1,则启动一个类型为则启动一个类型为4 4的中断过程的中断过程,给出
39、给出一个出错标志一个出错标志,如果如果OF=0,OF=0,不做任何操作。不做任何操作。lINTOINTO指令通常安排在有符号数加减运算指令之指令通常安排在有符号数加减运算指令之后。后。相当于相当于INT 490(3)中断返回指令中断返回指令l格式:格式:IRETl中断服务程序的最后一条指令,负责中断服务程序的最后一条指令,负责恢复断点恢复断点恢复标志寄存器内容恢复标志寄存器内容91指令的操作指令的操作(IP)(SP+1):(SP),(SP)(SP)+2(CS)(SP+1):(SP),(SP)(SP)+2(FLAGS)(SP+1):(SP),(SP)(SP)+2指令对对各标志位均有影响。指令对对
40、各标志位均有影响。92六、处理器控制指令六、处理器控制指令对标志位的操作对标志位的操作与外部设备的同步与外部设备的同步931、标志操作指令、标志操作指令lCLC;CF0lSTC;CF1lCMC;CFCFlCLD;DF0串操作从低到高串操作从低到高lSTD;DF1串操作从高到低串操作从高到低lCLI;IF0lSTI;IF1942、外部同步指令、外部同步指令省略省略95结束语:结束语:第第3章掌握:章掌握:l指令的格式及意义指令的格式及意义l指令对操作数的要求及对标志位的影响指令对操作数的要求及对标志位的影响l指令的应用指令的应用作业作业:P1533.1596结束语结束语谢谢大家聆听!谢谢大家聆听!97