微机原理与接口技术第4章指令系统9.ppt
1,4.3 80 x86指令系统,可分成如下7类:数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 程序控制指令 处理器控制指令 中断指令,碧阐轧们锑日厅簧仔辐即如蝗卞蚁智湖刚隧魁振师宙虾匀手筏暑鸭诵砧糯微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,2,4.3.4 程序控制指令,用于控制指令流程的指令有转移、循环、过程调用和中断调用等指令。分类按转移条件分:无条件转移和有条件转移;按转移的范围分:段内转移和段间转移;按获取地址的方法分:直接转移和间接转移。,钎辅辕桑颂蛹似驻褪砷猪胆埋巢俗胀中刀碴脑纺镇确绎衰他匣情袁颧彩浆微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,3,转移指令的实质:改变IP(或CS)的内容。所有转移指令不会影响标志位。分为无条件转移和条件转移两种。,1.转移指令,湃急虹助元秦雍玫追蜜狱酸悦晋端苗鳖奖葬蛆冲贬恕榆汕差珍拐蛙呼立贤微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,4,1)无条件转移指令-JMP本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。根据设置CS、IP的方法,JMP指令分成4种情况。,晨夕艰字须筐寓漳咐那妈誉生发舀栈诅灼隧憎潘绩稚刨槽燕怪览岭缆驱湾微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,5,格式:JMP Lable功能:跳转到Lable处开始执行下一跳指令。指令代码中给出的目标地址实际上是一个相对于IP的位移量:位移量 转移范围 汇编语言中格式 8位-128+127 JMP SHORT OPRD 16位-32768+32767 JMP NEAR PTR OPRD例:JMP0120H;直接转向0120H JMPSHORT LP;转向LP JMPNEAR PTR BBB;转向BBB由于是段内转移,故转移后CS内容保持不变,段内直接转移,Lable=IP,蕊痞战痪收暖政昨免兼哭暇情粱泪摩罩豺溜死磋蹬锭社闪厘苔滁狈炉尧育微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,6,格式:JMP reg/mem功能:跳转到由寄存器或存储单元的内容给出目标地址处执行。例1:JMP SI若(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处开始执行。说明:寄存器、内存单元存放的是有效地址。所谓“间接”,是指当CPU执行指令时,将寄存器或内存单元内的有效地址写入IP或EIP,从而实现转移。,段内间接转移,(reg/mem)16=IP,蔽该袁萝坐哨那狄滇骚魂倔锚汛坑漏野结押岩娱湾镣论橱安宽撕盗宇还禾微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,7,例2:JMP BX+DI设指令执行前:DS=3000H,BX=1300H,DI=1200H,32500H=2350H;则指令执行后:IP=2350H在汇编语言中,段内间接寻址通常写成:JMPWORD PTRBX+DI表示所取得的目标地址是一个字。,挠屠菜梭耀费避隆纱刺暮苔篓葡俊观暮隔同戚弓交炔感芋珐惦辗厌隐硬民微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,8,DS:POINTERDW P11 DW P12 CS:.MOV BX,OFFSET POINTERJMP WORD PTR BX MOV SI,OFFSET POINTER+2JMP WORD PTR SI P11:P12:,P107例子(改错),特掠纠浙栖监杆乾芍衰其伺氧坞挣址例吃贱丰宠敝阿母挣爪滔轧莹烫飘线微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,9,格式:JMP Lable功能:跨段跳转到far_Lable处执行。指令中直接给出要转移到的目的段地址和偏移地址。例:JMP 2000H:1000H执行时,IP1000H,CS2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FAR PTR。例:JMP FAR PTR label在模块设计时,从一个模块转移到另一个模块,用段间直接转移。,段间直接转移,Lable低16=IPLable高16=CS,又族勒盒赏古丈粱姚刃协洛禁播褐庭赏骏匪忱柔拎圃计贺叼渠辩澈撂玫酣微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,10,格式:JMP mem32功能:跨段跳转到由一个双字内存单元的内容确定的地址处执行。例如:JMPDWORD PTRSI设指令执行前:DS=4000H,SI=1212H,41212H=1000H,41214H=4A00H则指令执行后:IP=1000H,CS=4A00H于是转到4B000H处开始执行指令。例中的DWORD PTR表示转移地址是一个双字。,段间间接转移,mem低16=IPmem高16=CS,捅吞迸雌坠荧遂峨蔬羞刘罗赁睁壁哑撩张酗掘面医带布窜蓄雷娠泰蹦脸久微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,11,DS:SI,00,10,00,4A,1000,4A00,IP,CS,段间间接转移操作示意图,11111111,11101100,JMP DWORD PTR SI的机器码,DS:SI,41212H,41214H,械肚冗蛤馁罗产摆皂喻皱衍臣抖融下惧哼襄鞍崇挎卿义怀届肪支坑骄狞辊微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,12,条件转移指令可实现程序的条件分支。条件转移指令根据标志位的状态来决定是否进行分支转移。格式:JXX label;xx为条件名称缩写指令的转移范围为-128+127字节。,2)条件转移指令-Jxx,分类判断单个标志的条件转移指令判断无符号数大小的条件转移指令判断有符号数大小的条件转移指令循环控制转移,廖司议钻鉴丰卑葡寝掀小醉太输淆粱啃亿虹晾升奈葵性庞详葵粕念氰春本微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,13,表4-4 判断单个标志的条件转移指令,教材P108,狮旱茎嗅傀猪谁眷垦窑怎坯博史广带琢扎谓吁臣虽弄艰条肠绘烷爬岛恐拎微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,14,表4-5 判断无符号数大小的条件转移指令,教材P108,婴呀骨抱生舟鬼奎萧帕圈筛拳咳顿难隐盐骸沤遥晾犀沛毡孟暴差孔霜佰裕微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,15,表4-6 判断有符号数大小的条件转移指令,教材P109,辽味遵涕径觅山孪沁慢储妈闸翅际欢雌恿揪韦洛殿忍藩闯穆而陨帧畸孝流微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,16,根据CX内容来决定是否转移的转移指令 JCXZ label 若CX=0,则转移到label处开始执行。,孽家鉴癸柑晤眯妈极饭份忧秩瓷多姑执窒驶官畸迄稿政撅漫宠雕磅企许试微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,17,例 P109,设有10个字节属性的无符号数据存放在以2000H单元为首地址的数据缓冲器中,编程找出其中的最大数,并存入2100H单元。,展枚阔岛陨哪愚锻玄骗狰潮绿柯半顾坏恿作恕卜落涝平翌额戮住肪晰剃韩微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,18,找最大数的程序,MOV BX,2000H MOV AL,BX MOV CX,9;正确取值应为9LAB:INC BX CMP AL,BX JAE LABLE MOV AL,BXLABLE:DEC CX JNZ LAB MOV BX,2100H MOV BX,AL,甫侈戊灭颊测侣硒冤某善作跪哆稿换桌穆迈钮浇聂辜蓬祁避害蚂铂栗娠芍微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,19,找最大数,MOV BX,2000HMOV AL,BX,36H,AL,弘态雅谩铺依荧旺搅衬宿镑鱼豢密佬竖仁魄装兢稠腑喳客萍透盂响宫串坯微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,20,找最大数,INC BXCMP AL,BXJAE LABLEMOV AL,BX,36H,AL,36H,28H,AL,BX,PK,;条件成立,转移,;这条指令不执行,绷束眉亏诀陛撇嚏侠铡搏吻猖书否泊陌务漫漏齿枕阜操澄介敢银歉蚁少拖微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,21,找最大数,INC BXCMP AL,BXJAE LABLEMOV AL,BX,36H,AL,36H,48H,AL,BX,PK,;条件不成立,;执行这条指令,48H,翌灯礼浑荫匀符奉咋蒜慕褒硷捍迭挛邮制崔范吩粤壬污菠曝驭滓询池迁属微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,22,2.循环控制指令,用在循环程序中以确定是否要继续循环。循环次数通常置于CX中。转移的目标应在距离本指令-128+127的范围之内。循环控制指令不影响标志位。,古踊披矗易侄锄付矛部阜徊倡描棠贤虎填堰虑蜕囱硝夕肆库瘟件瘁溉美枷微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,23,(1)LOOP-循环计数格式:LOOP label操作:CX-1CX;若CX0,则转至label处执行;否则退出循环,执行LOOP后面的指令。注:LOOP指令与下面的指令段等价,但不影响标志位。DEC CX JNZ label,舷乍古宽兽请磋坎饺趁蜘贴算贪陇掌窜徒帚薪肿豹斡恿唬偿葫你牺坑实聚微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,24,(2)LOOPZ(LOOPE)-相等继续格式:LOOPZ label操作:CX-1CX;若CX0ZF=1,则转至label处执行;否则退出循环,执行LOOP后面的指令。(3)LOOPNZ(LOOPNE)-不相等继续格式:LOOPNZ label操作:CX-1CX;若CX0ZF=0,则转至label处执行;否则退出循环,执行LOOP后面的指令。,耀噎币饲镭尧岭贝雷辗垢踩枯瞩恐秸特葛迫朴帐狠唐愚未政毕觅采团齐梆微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,25,例:编写程序,计算 X=1+2+3+99+100,结果保存到AX。MOVAX,0MOVCX,100NEXT:ADDAX,CXLOOP NEXT,int i,sum=0;for(i=100;i=1;i-)sum+=i;,MOV AX,0 MOV CX,100NEXT:ADD AX,CX DEC CX JNZ NEXT,郎沛半袒犹狞哭倔侈旦莉起虑汽曝色英詹浴群交趟脾侗洗镍照糜裔毁哥袒微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,26,例(P110):找出以ARRAY为首地址的100个字数组中的第一个非0元素,送入AX中。DS:ARRAY DW 0,0,0,1010H,;(100个数)CS:对DS初始化 MOV CX,100 LEA BX,ARRAY MOV SI,0FFFEH;-2ZERO:INC SI INC SI CMP WORD PTR BX+SI,0 LOOPZ ZERO MOV AX,BX+SI,信才滩拽斌维东皇蛊妨炽独徘嫉挞沧迫砂臻仑谷应下跨匡绢颇帆告壹溢荆微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,27,3.过程调用和返回指令,主程序调用子程序,用CALL指令实现,子程序结束须用一条返回指令RET返回到主程序。CPU在读取CALL指令时,IP自动递增,使它指向下一条指令的存储单元地址。CALL指令执行时,必须保存CALL指令后面的第一条指令地址(断点地址)。,统饰暴杠乳琅臂矾衙沂煮挡矗劈胶涉谷菊移即兴廖怒石系叹仅蜀参俊聘涣微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,28,CALL指令的功能:先将断点地址(IP或CS:IP)压栈,然后将子程序首地址送IP或CS:IP中,从而转到子程序入口,再顺序执行子程序。返回指令RET在子程序最后。CPU执行返回指令时,会从堆栈中弹出断点地址,重新装入IP 或CS:IP中,从而返回主程序。,胁棋矛耐再催蝎虐弊阳识安寡粘员涛柴冠陷汗襟狱阂华糕杭仗矩放柠肪歧微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,29,图4.36 子程序调用与返回,榆躯峪灸贾齐饯遭桂状陨瀑棉燎到尝集驰湛够剪琢灾涵蚂土祭阉楚露名埂微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,30,1)子程序调用指令,(1)段内直接调用 格式:CALL sub 执行的操作:SP)SP-2;将IP寄存器内容入栈,SP IP;IP sub;,一般格式:CALL sub;sub为子程序的入口根据子程序入口的寻址方式,子程序调用有四类:,例:CALL 1000H CALL TIMER;TIMER为子程序名,糜虏占析茹裕脸锁拷绽擎她驾霹摇狭数幽揣钒鳖挖另棒加殉磅伶盐医晤壁微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,31,(2)段内间接调用,格式:CALL MEM/REG执行的操作:SP SP2;将IP寄存器内容入栈:SP IP IP EA例:CALLBX;子程序地址由BX给出 CALLWORD PTRSI;子程序地址在存储器中,照咎季牙搓艰皑菩赊煽坟借骗炮敷来维梭猎讫滔掣沁丸彰施峰亮冠圆系捣微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,32,(3)段间直接调用,格式:CALLsub 注意:sub用FAR属性定义在另一代码段中,执行的操作:SP SP-2;SP CS SP SP-2;SP IP IP sub低16位,CS sub高16位,例:CALL 2000H:1000H CALL TIMER;TIMER为远过程,京尊苦博侈柔抹遏胯孙缚哎肆娠赡废攫有损竟蛔耙寸旬立希沤饱铲弗倍裸微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,33,(4)段间间接调用,格式:CALL MEM32 当CALL执行段间调用指令时,将当前的CS和IP压栈,将目标的段基址和偏移量送给CS和IP。,执行的操作:SP SP-2;SP CS SP SP-2;SP IP IP MEM,CS MEM+2,例:CALL DWORD PTR DI,芦睫皋刚咳袍枷狰男扣前枝酗伶煽抚导猖啦针卸色吻妥昂乓扬唇逗衙柑鸳微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,34,CALL,代码段,数据段,IPH IPL,CSH CSL,DI,DI+1,DI+2,DI+3,段间间接调用示意图,CALL DWORD PTRDI,蝎涣肆巡箱写建泵辽丈积乏尾憾棱尸奈瘴裂柄井疤面途狞缨表蕊辗蒲迟烯微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,35,段内返回指令RET的操作为:(RETN)恢复子程序执行前IP的内容。段间返回指令RET的操作为:(RETF)恢复子程序执行前CS:IP的内容。,2)子程序返回指令RET,颠钝很簧边上凛数灸东凭靠窝门熬烧丢津证影蘸横喊廊哑刹吵巷猴益吊厘微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,36,有参数返回指令,格式:RET N;(N为偶数)功能:首先完成RET指令的操作,再执行SP+NSP,吠茫砾目瀑忻硼磺瘩兔镶附烽询咀屏贾约遭锭蔚指扮尉灼郝驼恍共艳陈铸微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,37,4.中断指令,8086/8088 CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫内部中断,或叫软中断。被中断的指令地址处称为“断点”。有关中断的详细情况将在第七章讨论。中断指令有:(1)INT n;执行类型n的中断服务程序(2)IRET;从中断服务程序返回调用程序,皑嚼缄翱谩都便藏敞袍侍名佳钱动堡矣什楔触烤抬拔险虾搔倦舱饶半夫犊微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,38,(1)中断调用指令,格式:INT n说明:n4=向量地址。该向量地址中的内容即为中断服务程序入口地址(段:偏移),入口地址也称为“中断向量”。,0000:n4,XXH,XXH,YYH,YYH,中断服务程序入口的偏移地址(IP),中断服务程序入口的段地址(CS),中断类型码n=0255,内存,中断向量,腊局翱益怪冗觉迸艾刘盆觅沸去宫锭砂涪渐誓郁拽刚鹏芭栈踩晦髓鞠田矛微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,39,INT指令的操作:将FLAGS压入堆栈;将INT指令下一条指令的地址压栈(即把CS和IP的内容压栈);取中断服务程序入口地址送入CS和IP。INT指令只影响IF和TF,对其余标志位无影响INT指令可用于调用系统服务程序,如INT 21H,赚裂彬微窒沽吻诊亭爵柠帅芦鞘部乙赌臭埠镊能绸棋谐敛帛暮孝侣兵焕蛰微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,40,INT指令的操作例:,INT 21H,IPL,IPH,CSL,CSH,SP=1200,FLAGSL,FLAGSH,SP=11FA,执行INT 21H指令后,保护断点,堆栈,执行INT 21H指令前,涝辈耍柄楼斑锨儡皱榜扼按釉截睡师狂兽怕服峻孝磊庸炬毗休钟蓬划耸唤微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,41,INT指令的操作例(续):,执行INT 21H指令后,CS=?IP=?因为n=21H,所以n4=84H。下图中,0:0084H=2000H:1123H所以:CS=2000H IP=1123H,0000:0084H,23H,11H,00H,20H,IP,CS,0000:21H4,窥击顽促泞谋猖匣狮郭冗规原淬播荐萄商晋馁声码甸迷阿沦咐隋逃佰善盼微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,42,用于从中断服务程序返回被中断的程序。IRET负责恢复断点(CS和IP)和恢复标志寄存器内容。任何中断服务程序不管是外部中断引起的,还是内部中断引起的,最后都要用IRET返回。IRET指令执行的操作为:栈顶内容弹出到IP 栈顶内容弹出到CS 栈顶内容弹出到FLAG,(2)中断返回指令IRET,摄纺渐翁氖框翌逆寂罪恒棒僻零肛砂怂葛派移蕾骚愈帝呀甚溅盔私泄圈棍微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,43,作业:,P124P1253、4、8、9、7、10、15,咕或撇绳扒茧啄听慰挡攘哦驰袭时篆寥琅储持弃棕枫绒涕啥深辊惜晰老碱微机原理与接口技术-第4章指令系统9微机原理与接口技术-第4章指令系统9,