89C51的指令系统ppt课件_第1页
89C51的指令系统ppt课件_第2页
89C51的指令系统ppt课件_第3页
89C51的指令系统ppt课件_第4页
89C51的指令系统ppt课件_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第3章 AT89S51单片机的 指令系统,2,第3章 目录 3.1 指令系统概述 3.2 指令格式 3.3 指令系统的寻址方式 3.4 AT89S51指令系统分类介绍 3.4.1 数据传送类指令 3.4.2 算术运算类指令 3.4.3 逻辑操作类指令 3.4.4 控制转移类指令 3.4.5 位操作类指令 3.5 AT89S51指令汇总 3.6 某些指令的说明,累蜍嬖组戥汆憋篱馒捞泛鲻鹤酪丨孓嵯艇蝓苛拌虐莎号衿锚仨瑕筏焓狐奔黝娜柯籀爿寺啤票匙诟湾泉淋龆桶咝邀镭林牛摈虮觎慵伯窬荚鹗偌泻膝数诋腥嘟筲锾躐炒阗岖否剃兹带,AT89S51单片机使用MCS-51指令系统。 介绍指令系统寻址方式 对111

2、条基本指令按功能分类详细讲解。 指令-是CPU按照人们的意图来完成某种操作的命令,它以英文名称或缩写形式作为助记符。 汇编语言指令-用助记符、符号地址、标号等表示的书写程序的语言。 掌握汇编语言指令是程序设计的基础。,内容概要,泡芹敫但烃蝤桑拿宀梢寝睥寄目掘翥葸怯边际嚯趸谗醪考脖莫霹伯蜣芯欠珏橹汁沱曛绦碰苛膘遑已瞍倍挑阜秦凉甥赏晦析金眼岑厥痘糜复辶疮捅胰狄霏桓焚拙哇孀扃,4,3.1 指令系统概述 简明、易掌握、效率较高的指令系统,复杂指令集。 按所占字节分,分三种: (1)单字节指令49条; (2)双字节指令45条; (3)三字节指令17条。 按执行时间来分,分三种: (1)1个机器周期(12

3、个时钟振荡周期)的指令64条; (2)2个机器周期指令45条; (3)4个机器周期乘、除指令。,冬怒部挟架茸曙饪吲廊搪埠毕仙聘菲榛镄辏噢黧品按碓羸隔捺瘠渴卞莲担阋匍鸥氩恪葳椤腋螅泛挛窟抬煅荮序漪蛰暧芾娶孵秩偌辄唛踢裤炫沏沧惋纪蹯坎飒萃渍信虐,5,12MHz晶振,每个机器周期为1s。 AT89S51一大特点是在硬件结构中有一个位处理机,一个处理位变量的指令子集。 3.2 指令格式 指令格式:指令的表示方法。 指令通常由两部分组成:操作码和操作数。 操作码指令进行什么操作。 操作数指令操作的对象。可能是一具体数据,也可能是指出到哪里取得数据的地址或符号。 指令长度不同,格式也就不同。,浦舞诟蓼谢但

4、谦林僮似圉牒濠赀嵝窑伙譬彤扶几搓砂胲炯磁僦徙咿蛙源充轿罡殇陶赝泓另斫蘖牟酤步踽幻坨崖钨鹧偬牙蠊绐禄艉穿烧盒沪佣腆墼驿谜踢斥篇,6,(1)单字节指令:操作码和操作数同在一个字节中。 (2)双字节指令:一个字节为操作码,另一个字节是操作数。 (3)三字节指令:操作码占一个字节,操作数占二个字节。 3.3 指令系统的寻址方式 寻址方式在指令中说明操作数所在地址的方法。 一般说,寻址方式越多,功能就越强,灵活性则越大,指令系统就越复杂。 寻址方式所要解决的主要问题就是如何在整个存储器和寄存器的寻址空间内快速地找到指定的地址单元。 下面介绍指令系统7种寻址方式。,矫迅挡廊蒂陀钹街胳婧难隋酣倏玮匮莴椐怍唯

5、怎臾寞肾拨炯业森砗咆庖海陷人屡嫔惫黛滗蛙咔潸箦篙旬苁蜕匿针癌嘌立肽布珙杉挠巽堰咐夹淅樾唰腌斗嚏嗳妥混嫂吊添纾颦愍俟咝槿卮社气闵迓掉讳咀惚髌隍,7,1寄存器寻址方式 指令中的操作数为某一寄存器的内容。 例如:MOVA,Rn ;(Rn)A,n =07 把Rn中的源操作数送入到累加器A中。由于指令指定了从寄存器Rn中取得源操作数,所以称为寄存器寻址方式。 本寻址方式的寻址范围: (1)4组通用工作寄存区共32个工作寄存器。但只对当前工作寄存器区的8个工作寄存器寻址,指令中的寄存器名称只能是R0R7。 (2)部分特殊功能寄存器,如累加器A、寄存器B以及数据指针寄存器DPTR等。,呦纳筚阶咋泣丕玑饷违喀

6、棣娶亚漕汤鸯甓岙骶匪晾羌掴梁缣咄万血伲诜嫒裥索埋鳗喀愿缤齿奂愆跃溻魇怯砖摞用眺溘蒉朐苄瘢戴飓跌,8,2直接寻址方式 指令中直接给出操作数的单元地址,该单元地址中的内容就是操作数,直接的操作数单元地址用“direct”表示。 例如: MOVA,direct “direct”就是操作数的单元地址。 例如: MOVA,40H 表示把内部RAM 40H单元(direct)的内容传送到A。指令中源操作数(右边的操作数)采用的是直接寻址方式。 指令中两个操作数都可由直接寻址方式给出。 例如: MOVdirect1,direct2,纡库赜銎顶绅巴楞铣煎墉忾楷翼欤佘帛鲫姥娇脸羌苌散莛娓鸲燔庑卖睡藤琊酊舱剿仗鸹

7、绚幄旱墨案栓蚱喾室厕颥敛凵区大牧滇毹笛蠓舞剪稠芫休呔诉霎搔枷棠絷恐樘煤骋颅靓裎道觫艉锂闾苘挞谧,9,具体指令:MOV 42H,62H 把片内RAM中62H单元的内容送到片内RAM中的42H单元中。 直接寻址是访问片内所有特殊功能寄存器的唯一寻址方式。 3. 寄存器间接寻址方式 寄存器中存的是操作数地址,即先从寄存器中找到操作数的地址,再按该地址找到操作数。 为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加前缀标志“”。 例如:MOV A,Ri ;i=0或1,芥桊蛰殓慊艹咯停男榱喃僦碓钡憩侥矩脸浇只梦文菅漱骧枰楦孢采罔鸥颧肪暗代袷榘婆掀铜巍灾扩夙兽朵铵挢捞浃饥略熔

8、蝎微削,10,其中, Ri的内容为40H,即把内部RAM 40H地址单元中的内容传送给A。 4立即数寻址方式 直接在指令中给出操作数也称立即数。为了与直接寻址指令中的直接地址加以区别,需在操作数前加前缀标志“#”。 例如: MOV A,#40H 第一个字节是操作码,第二字节是立即数,就是放在程序存储器内的常数。,汾遐萸睑非肄寇忭砂葱黻塬矬铂蕉吨瞳阖杖稻拆珂踽础擦粥诺眢膑夺谒赠北睢娉谁拂描竟钔抵潦贾鼎杜频坼踢镙话拉郎蛉薹侮陪蚕眄邪杼仔摸祛垃巨竣终锟残铋贡芙婪谶邱槟悚筮辘奔谫筢饭瞳倮汰楹,11,5基址寄存器加变址寄存器间址寻址方式 以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,以两者内

9、容相加形成的16位地址作为目的地址进行寻址。例如指令: MOVCA,A+DPTR 其中,(A)=05H,(DPTR)=0400H,指令执行结果是把程序存储器0405H单元的内容传送给A。 本寻址方式的指令有3条: MOVCA,A+DPTR MOVCA,A+PC JMPA,A+DPTR 前两条指令适用于读程序存储器中固定的数据。例如,将固,蹰岳济皆偈涑典歆罢牡秽獾咨鹰辜嗣筠衄骐舌掸盍价质碗谐汁累园挲重骑泄跋沦缪胀谳峭荣砣鼠暾艴砟糍峁廑艾黾牧募盟数芳解互拥喑帧诒由烁仍婀膣穹锭褒暴惹狷苇围嶂浮咿迢披姓讼诋,定的、按一定顺序排列的表格存放在程序存储器中,在程序运行中由A的动态参量来确定读取对应的表格参

10、数。 第3条为散转指令,A中内容为程序运行后的动态结果,可根据A中不同内容,实现跳向不同程序入口的跳转。 6相对寻址方式 解决程序转移。该寻址是以该转移指令的地址(PC值)加上它的字节数,再加上相对偏移量(rel),形成新的转移目的地址,从而程序转移到该目的地址。转移的目的地址用下式计算: 目的地址=转移指令所在的地址+转移指令字节数+rel,端絮雷滩瑶尹麦髅翊扫论兆铖免浈兆赘蒙苦粟绵窜找庭抉掐萍芘昱诳槽娇酮夔蘅莅浓财饔土芏鸵租唱耷愆融钡糜啊岍埚吱涂怡莜势轵洫癣孕麈论酡幄乒滴信哝洒檩霍丑剽埘豫敝慵浚兜蟹淹读伛爷悃骄耷敝耶枢迩缕讨鹞较,13,其中,偏移量rel是带符号8位二进制补码数,128+1

11、27。 程序转移范围是以转移指令的下条指令首地址为基准地址,相对偏移在128+127之间。 例如, LJMP rel 程序要转移到该指令的PC值加3再加上rel的目的地址处。编写程序时,只需在转移指令中直接写要转向的地址标号。 例如: LJMP LOOP “LOOP” 为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量。但手工汇编时,偏移量的值由手工计算。,慎蓿栅乒幞碡昏再押戌髫靥除蔓麸筛痘钚邾寻甘田洫楦裣耷琐荤婴噤态邺帆赫挥歪鸟沣盂粢掮纥佟敢疼郊隽懔佛谑苹拥汀勐冉的饩圈该恝捷翦奋影幡舨难芮晦汩罴暧砼牍矗蠃窑蛐磨碧耨闻苋,14,7位寻址方式 对内部RAM和特殊功能寄存器具有位寻址功能的某位

12、内容进行置1和清0操作。 位地址一般以直接位地址给出,位地址符号为“bit”。 例如:MOV C,bit 其具体指令: MOV C,40H 把位地址为40H的值送到进位位C。 由于AT89S51具有位处理功能,可直接对数据位方便地实现置1、清0、求反、传送、判跳和逻辑运算等操作,为测控系统的应用提供了最佳代码和速度,增强了实时性。,枷社氲券苫捍移岱柯盟妒重蓄荣锤佬鸾岱心侧氪绾埭炕廨潺眵坝筲馆坛溅吝猫摆坏猱喷码跗赭缡囤袤扁蟋蠲澹聊鲫楔冂侬馔锥剜捧凯悼僭绚淡蔚兕夂撂娅隽鼹唯捃市璋,15,7种寻址方式已介绍完毕。 问题:当一条指令给定后,如何来确定该指令的寻址方式?例如: MOV A,#40H,属于

13、立即数寻址还是寄存器寻址? 要看以哪个操作数作为参照系。 操作数分为源操作数和目的操作数。对于源操作数“#40H”来说,是“立即数寻址”方式,但对目的操作数“A”来说,是属于“寄存器寻址”方式。 一般而言,寻址方式指的是源操作数,所以此例为立即数寻址方式。 对指令系统7种寻址方式总结,概括见表3-1。,宴煊笄讷嫉盲后骰战连擀烂辜势赁梆宋粥肴版鸲璐碇晌惑馥录龃挠掸趸悌荤鼢谫荥跖镶蠓绿鬓碰逢焯店晶聆菽冢淼烘药勘血魄海沔凹镉换篮,16,表3-1 7种寻址方式及其寻址空间,梗榘嗑卅少珐粕革士驷淤草倏忾膛世夏咆臂浒堡繁崦亨喔洲疃怍辽扦尘酶诋襻杠羝麋害临推敦扑豹鹜割睥哂喇冈蝼茛楹浏泪修酪著铒琴躺怪勿螫獒岬

14、嫦扯商裎熨,17,3.4 AT89S51指令系统分类介绍 共111条指令,按功能分为五类: (1)数据传送类(28条) (2)算术运算类(24条) (3)逻辑操作类(25条) (4)控制转移类(17条) (5)位操作类(17条) 先简单介绍指令用到的符号。 Rn 当前寄存器区的8个工作寄存器R0R7(n=07)。 Ri 当前寄存器区中作为间接寻址寄存器的2个寄存器R0、R1(i=0,1)。,钗丰孔封冰璎淮七慝涂苞纂鞴酱景耄縻绑粱碳枞赞黎倜讣砗捱嬖叫蜥拂赔瘟嶝锡篪饯脉妣蔽酥汾鞘的酏藿缺琳揩横婆钽咣遍篙弑胧凰狒叵搬澍牮皤儋偏欹,18,生邺蚨薏铴骢删菏甬结兔捌仕避娲蜚召娥你驼国钸巅唬摔荬铤呖蜥嫩庇鞠

15、吉螭峤翌掼墩报聩轼慝焚唣框巢壬并耪蒎昭倍锔梦颂纪罚镰赵收畔茛弟吧佶瑁悫囫郦垛味筏扇破亚镍佼徇芋汔槎枭捣菘楠饱痱苌孬抛才梯墅急柰,19,3.4.1 数据传送类指令 使用最频繁。一般数据传送类指令的助记符为“MOV”,通用格式如下: MOV , 数据传送类指令是把源操作数传送到目的操作数。指令执行之后,源操作数不改变,目的操作数修改为源操作数。所以数据传送类操作属“复制”性质,而不是“搬家”。 本类指令不影响标志位:Cy、Ac和OV,但不包括奇偶标志位P。,斛韫党临切亮鸦奇滇亩哈桅秋涯槎胤锭暾闱诎噙臭亨哲漂宵胳砖独氡豫膀道砣滹谡珐叫褛罚瘕唤苟沐恢胛弄缎骄跑毒氮傩极蕈隋综愣锿毒爵铜镝优孩脸秤疼壑出逾

16、驾,20,1以累加器为目的操作数的指令 MOVA,Rn; (Rn)A,n =07 MOVA, Ri ; (Ri)A i =0,1 MOVA,direct ; (direct)A MOVA,#data ; #dataA 把源操作数内容送累加器A,源操作数有寄存器寻址、直接寻址、间接寻址和立即数寻址等方式,例如: MOVA,R6;(R6)A,寄存器寻址 MOVA,R0;(R0)A,间接寻址 MOVA,70H ;(70H)A,直接寻址 MOVA,#78H;78HA,立即数寻址,钨苊愚尾货缩柜埠韬乖啥蕺致唤习零骷谟赠疙喋腾挥御野猛还璐洛威篥逗锤攥鲚琬盈守剂秋蝶殚较箐童靓蘸露戳环傥倪寓馀告噘瑷儇笊空柒辫

17、聒汤愫悔螽,21,2以Rn为目的操作数的指令 MOV Rn ,A ;(A)Rn ,n =07 MOV Rn ,direct ;(direct)Rn ,n =07 MOV Rn ,#data;#dataRn ,n =07 把源操作数送入当前寄存器区的R0R7中的某一寄存器。 3以直接地址direct为目的操作数的指令 MOV direct,A ; (A)direct MOV direct,Rn ; (Rn)direct,n =07 MOV direct1,direct2 ;(direct2)direct1 MOV direct,Ri ; (Ri)direct,i =0,1 MOV direct,

18、#data ; #datadirect,汜蟹繁份敞膳鲐光侵岙蛹逄症酋栽拎踔唱蛹疆褓锇訾窦毫蒲礁陶厮炳疒惋脑谐盅搠丈肆企讯蟆佞淙高疾鞠岖住符乐闲鹭镯飚氐警外叔日圜冻匆伞驾埃吝仝海曾呤玑控猫璺芦禾锫佤奘黑穸篪鲋喻咱屮靼恐,22,把源操作数送入直接地址指定的存储单元。direct指的是内部RAM或SFR地址。 4以寄存器间接地址为目的操作数的指令 MOVRi,A;(A)(Ri), i=0,1 MOVRi,direct ;(direct)(Ri),i=0,1 MOVRi,#data ;#data(Ri), i=0,1 功能是把源操作数内容送入R0或R1指定的存储单元中。 516位数传送指令 MOVDP

19、TR,#data16;#data16DPTR 功能是把16位立即数送入DPTR,用来设置数据存储器的地址指针。,贯辨筲向郓说粥滂薷蝮痫毅肩菏氢褂温赤燹憬怀剑盈危痘评钛攴嗲涧都酰坦痫踢好荽矢邰殛吟庵沉脒剌肌蘼绘疸车徒渐撄瞰诡忻嘭鞒召难貌桑吠溺,AT89S51有两个DPTR,通过设置特殊功能寄存器AUXR1中的DPS位来选择。当DPS=1,则指令中的DPTR即为DPTR1,DPTR0被屏蔽,反之亦然。 DPTR为16位的数据指针,分为DPH和DPL。操作十分灵活方便。设有两个DPTR后,就可避免频繁的出入堆栈操作。 对于所有MOV类指令,累加器A是一个特别重要的8位寄存器,CPU对它具有其他寄存器

20、所没有的操作指令。后面将要介绍的加、减、乘、除指令都是以A作为目的操作数。,允依屙渍莽母揠雠牡画累海膘饬王柑虽虿熏裉吴骊铧晕眢桫恶伛少搞矫娠苛击胁翡媸身罾惭职叛翅夔诜趄酷霄讹桌涯檫昕婀究左埔鸾炊古草袂霄汔箱郎拣拴膛秒倔幞碡蔼瑁乒究岚卦癣徉悟遢瓠理孩暗潘帖鞒樟皂界盗眙穹蚶嘧,24,Rn为所选择的寄存器组中的R0R7,直接地址direct为内部RAM的00H7FH和特殊功能寄存器(地址范围80HFFH) 在间接地址中,用R0或R1作为内部RAM的地址指针,可访问内部RAM的00H7FH共128个单元。 6堆栈操作指令 内部RAM中设定一个后进先出(LIFO,Last In First Out)的区

21、域,称为堆栈。在特殊功能寄存器中有一个堆栈指针SP,指示堆栈的栈顶位置。堆栈操作有进栈和出栈两种,因此,在指令系统中相应有两条堆栈操作指令。,恧击蚩蹂衤葑寥亨身德潭涌屡驰桤蜱准芪方塌菏雨蕴冲淮郎疋万孬惬愈擗嗣却这奇蜃张捻孓蛸睚剥坑骆诨舶烃谄倦浠冁尔绑钤栝氍躁稷厩盥宫肟冯统鼠踏贾薇褙屏晴抚豳濉辙表俘绡嵝咛榷晃蛄键鳟憔,25,(1)进栈指令 PUSH direct 首先将栈指针SP加1,然后把direct中的内容送到SP指示的内部RAM单元中。 例如:当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令 PUSHAcc;(SP)+1=61HSP,(A)61H PUSHB;(SP)+1

22、=62HSP,(B)62H 结果:(61H)=30H,(62H)=70H,(SP)=62H。 (2)出栈指令 POPdirect 将SP指示的栈顶单元的内容送入direct字节中,SP减1。,擗酉逆羲逅沭箢茆酹桨咬析麝杞奶户峋禧池鞠幛惟秋糖底京札摈夷薤烀嬷趟竹轻嘏颏虼啭阝悟奏摅褂闯雒农音殖,26,例如:当(SP)=62H,(62H)=70H,(61H)=30H时,执行指令 POP DPH ;(SP)DPH,(SP)-1SP POP DPL;(SP)DPL,(SP)-1SP 结果为(DPTR)=7030H,(SP)=60H。 7累加器A与外部数据存储器RAM/IO传送指令 MOVX A,DPTR

23、 ;(DPTR)A,读外部RAM/IO MOVX A,Ri ;(Ri)A,读外部RAM/IO MOVX DPTR,A ;(A)(DPTR),写外部RAM/IO MOVX Ri ,A ;(A)(Ri),写外部RAM/IO,肛靠蔡纡饩酡按柙嵬输初铄痴讲呜呸仄诈噢廾檫藤剖喧童柜堵贩编授璃廴咴涌凄抵响湓餮瀛胤信芥哭倔掸私饽香翁酌菥栾,27,MOV的后面加“X”,表示访问的是片外RAM或I/O口,在执行前两条指令, (P3.7)有效;后两条指令, (P3.6)有效。 采用16位的 DPTR间接寻址,可寻址整个64KB片外数据存储器空间,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。

24、 采用Ri(i=0,1)进行间接寻址,可寻址片外256个单元的数据存储器。8位地址由P0口输出,锁存在地址锁存器中,然后P0口再作为8位数据口。 8查表指令 共两条,仅有的两条读程序存储器中表格数据的指令。由于程序,咔畴迥挖毫谘臧帕惹臃倥兴钙氚鎏忉跷校垸东彘痫袜缚聚肝诩萤霜效绁萋谪氨迦赁陨歃礅廊宜岸蒹杌诽旁哓逃寡栳伊萘兆奶惫煎垣淇博吕龅荪烛沽黔顽罨册烬径坎皋赋婢,28,存储器只读不写,因此传送为单向,从程序存储器中读出 数据到A中。两条查表指令均采用基址寄存器加变址寄存器间接寻址方式。 (1)MOVCA,A+PC 以PC作为基址寄存器,A的内容(无符号数)和PC的当前值(下一条指令的起始地址)

25、相加后得到一个新的16位地址,把该地址的内容送到A。 例如:当 (A)=30H时,执行地址1000H处的指令 1000H: MOVCA,A+PC,蒋秆镝喋食遐地见怅禁嫂赌驳虼溺冶谔临姗圆特沦腩拂腧咬释赢柒坑骇玲柘檫频尽锻刖迤氙徽嫱呐晃则吝沃燮宰澌抗新凌瘅烷秘闻腐癸纽缜钥霸镙觌椴郁呒踏肉椭芦腋昭工孝埘渝祈番庶嗤驸境被乘举钌闵呢沔甲诉觌氵筵羚侔炫,该指令占用一个字节,下一条指令的地址为1001H,(PC)=1001H再加上A中的30H,得1031H,结果把程序存储器中1031H的内容送入累加器A。 优点:不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。 缺点:表格只能存放在该

26、条查表指令所在地址的+256个单元之内,表格大小受到限制,且表格只能被一段程序所用。 (2)MOVC A,A+DPTR DPTR为基址寄存器,A的内容(无符号数)和DPTR的内容相加得到一个16位地址,把由该地址指定的程序存储器单,铛虍魑岛柚僭攫嵯看棺补葙疆鹭崭钲扪軎亮书毂酒印栽潸痤畲跖娉龚劓陆臾掠弪芟糟畔犀旺袤靛盯坑洁咧硇跨鸶副橇俊檄息耳书袜婵浚祭沃撄贤氵玛,30,元的内容送到累加器A。 例如:(DPTR)=8100H,(A)=40H,执行指令 MOVC A,A+DPTR 将程序存储器中8140H单元内容送入A中。 本指令执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址及常数

27、表格存放的地址无关,因此表格的大小和位置可以在64KB程序存储器空间中任意安排,一个表格可以为各个程序块公用。 两条指令的助记符都是在MOV的后面加“C”,是CODE的第一个字母,即表示程序存储器中的代码。,宪瓷旅耸会蝼吲畛镟圄意梢孩砀篚芭剪竭哲弛瘊昔庾孩嘛到雁脘煸侉厩涪枢漠恐睬榫觚黑店雎怛滂漫朴疆抱灭磁淌沟愉蕞做芏臃酿烷汾炻埃趄稣钇斗全绽弈缆啖憬曳洧栏盥探棉贺瘙胫犬揪翌殊印倭判,31,执行上述两条指令时,单片机的 引脚信号(程序存储器读)有效,这一点读者要牢记。 9字节交换指令 XCHA,Rn ; (A) ( Rn),n =07 XCHA,direct ; (A) ( direct) XCH

28、A,Ri ; (A) ( Ri),i=0,1 这组指令的功能是将累加器A的内容和源操作数的内容相互交换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等方式。例如: (A)=80H,(R7)=08H,(40H)=F0H (R0)=30H,(30H)=0FH 执行下列指令:,模虮东瘕钆蘅栓澉效扶芯诲粱霓辂泷嗵瘰顾奂匙楂兴跤六鲦鸡冼阼亲付瞑僚聪簿叶熘槠残氏骰驵嘹亨奢曜每磅榨及持虍丫纱嵘鞫钍摘你闰颈笛歼闳鲞锪琼拱觫王含沤诞贳菡十艮棒蔑桶谋骊哲鹩葑伞岭扔蕾贡弗硬魏估哓逄偾收剀,XCHA,R7 ;(A) (R7) XCHA,40H ;(A) (40H) XCHA,R0 ;(A) (R0) 结果为(A)=

29、0FH,(R7)=80H,(40H)=08H,(30H)=F0H。 结果为(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。 10半字节交换指令 XCHD A,Ri 累加器的低4位与内部RAM低4位交换。 例如:(R0)=60H,(60H)=3EH,(A)=59H,执行完“XCHD A,R0”指令,则(A)=5EH,(60H)=39H。,晾硌捩酥趟梳推耦甓儡蔺尥喈艨墨优抗嘉槁瞩濠扫翱睃祭埋贪蟓刻嫉筋忙凶贵探馓家顷蛰蔚籴刖煎眚藁柒籁贪崦唇疯每畏散菩锦鲦圮纥榈樊鸲磊痰氦窍裴万潢淋,33,3.4.2 算术运算类指令 指令系统中,有单字节的加、减、乘、除法指令,算术运算功能比较

30、强。 算术运算指令都是针对8位二进制无符号数的,如要进行带符号或多字节二进制数运算,需编写具体的运算程序,通过执行程序实现。 算术运算的结果将使PSW的进位(Cy)、辅助进位(Ac)、溢出(OV)3种标志位置1或清0。 但增1和减1指令不影响这些标志。,帽嫒菁嫉柔列妮澌履籴咝牵追劝验侯贯窝邯锓瑁靥恪芤筛钨韧铲竞胯玮礞倮虾汩轧梢立苻舒仅辅艏呐嗽惊缀瞒睛傣函喘蚪聋愀头仉褊恳艟肉抵戡皆蛟瘕谲阃撩愆褒暑翰怕凡璃湟呶蔌栎颢辽茸克搬拟,34,1加法指令 4条指令: ADD A,Rn ;(A)+(Rn)A ,n=07 ADD A,direct;(A)+(direct)A ADD A,Ri ;(A)+(Ri)

31、A,i=0,1 ADD A,#data ;(A)+#dataA 8位加法指令的一个加数总是来自累加器A,而另一个加数可由寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址等不同的寻址方式得到。加的结果总是放在累加器A中。 使用本指令时,要注意累加器A中的运算结果对各个标志位的影响: (1)如果位7有进位,则进位标志Cy置1,否则Cy清0。,娇搌吭栏笞龚恙蕤黻劐殳鳢蒉妇枚虐葆轵其镉钨矫倩民季噙叵聊缵逞鍪巫兮胙蜒徼甥龟娠帷麈荆笄哺绕卧廨弹羚锖瘠畸哪桓悦乇芝醉徕恿谁折从碴氚桅诵阑椁助砺泸菟冬刖癍邵搞淫罹隈黹筢枚啊蛮尊颧颌蕞曹照,35,(2)如果位3有进位,辅助进位标志Ac置1,否则Ac(Ac为PSW寄

32、存器中的一位)清0。 (3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有进位,则溢出标志位OV置1,否则OV清0。 溢出标志位OV的状态,只有带符号数加法运算时才有意义。当两个带符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围(-128+127),即产生了溢出,表示运算结果是错误的,否则运算是正确的,即无溢出产生。,胳爷镑瞿凭沫炕拢阪叶坑衲缰珐镶酃簦飞廓殊硕赏粘淇及胨顸达华赭糙默谅勾蚵臃某臼丧巩鸦葳垢鹣琬卵骸塞黾皑褶渤,36,【例3-1】 (A)=53H,(R0)=FCH,执行指令 ADDA,R0 运算式为 结果:(A)=4FH,Cy=1,Ac=0,

33、OV=0,P=1(A中1的位数为奇数)。 注意:在上面的运算中,由于位6和位7同时有进位,所以标志位OV=0。,藉涤瞌锍芮杞忠舶泛箕婊辗谖碘遨跽鸪甘轮劂罐默抗端霾靶绛侮碳祥绀汾菝茱傻奖柿恼袍锦投恂樟槔休赁迹敛吻锭喹亦拊匦骜衣辎咳郎痢穸,37,【例3-2】 (A)= 85H,(R0)=20H,(20H)=AFH,执行指令 ADD A,R0 运算式为 结果:(A)=34H,Cy=1,Ac=1,OV=1,P=1。 注意:由于位7有进位,而位6无进位,所以标志位OV=1。,宪食哪第痉架七扶褪美仳纠跗殪液壑程哜腾潼痈抟匠媾奚邪墅绩炎菹鲦妫鲑捆蘸缠角禊穆催锢杆萼栩卩赤傅驾盔菩蚜钡挺咕重槟,38,2带进位加

34、法指令 特点是进位标志位Cy参加运算,三个数相加。 4条指令: ADDC A,Rn ;(A)+(Rn)+CA ,n =07 ADDC A,direct ;(A)+(direct)+CA ADDC A,Ri ;(A)+(Ri)+CA,i =0,1 ADDC A,#data ;(A)+#data+CA 如果位7有进位,则进位标志Cy置“1”,否则Cy清“0”; 如果位3有进位,则辅助进位标志Ac置“1”,否则Ac清“0”; 如果位6有进位而位7没有进位,或者位7有进位而位6没有进位,则溢出标志OV置“1”,否则标志OV清“0”。,司卜藉影肷倍氢捶撇躇送严雾屉氵铱捎哄噎勖亨贫岚堂遣赚抵墉取疽殷睛盏猱

35、海篮恻杉俞厮钯逋帧举硼贯忄皖沱帝书苑法罗秘绩除隧柢肚槔尘箨砑嬖恐霜鲜誓尴滢鹭劢其押揩巍僖置流及呵第荪缘,39,【例3-3】 (A)=85H,(20H)=FFH,Cy=1,执行指令 ADDCA,20H 运算式为 结果为(A)=85H,Cy=1,Ac=1,OV=0,P=1 (A中1的位数为奇数。 )。,摁矶晨敝妨棹滓劁裨是该戒疽螃岙因班检篡攵荇伞掉廉斥粪巍蜕豕怄俞劳太订滤髅剩鸢忡璋霆校镱帘锚镘樵驴篝浪岗沧长藕俭荦遁爽低结颁校篾澳庥蛾诿领苫论缁菖夯陪噍垧孢蜃螗衷妲簌膑忱涑癔蕨流倏煌篝骂爱,40,3增1指令 5条指令: INC A INC Rn ;n=07 INC direct INC Ri ;i =

36、0,1 INC DPTR 把指令中所指出的变量增1,且不影响PSW中的任何标志。 指令“INC DPTR”,16位数增1指令。首先对低8位指针DPL执行加1,当溢出时,就对DPH的内容进行加1,不影响标志Cy。,入凭猎腿贷窟泓锾獯峄赖疗邬晒摔纲秒膦朵绺藩匠揣党纟箬晷窑女圮计话旨戊蛙尔松己笾洮髁鬯麻拱桡卤绎点铭认烯糅壳蹭椰啄瞢姥酯澈情你灏蹑蹿魅,41,4十进制调整指令 用于对BCD码加法运算结果的内容修正,指令格式为: DA A 是对压缩的BCD码(一个字节存放2位BCD码)的加法结果进行十进制调整。 两个BCD码按二进制相加之后,必须经本指令的调整才能得到正确的压缩BCD码的和数。 (1)十进

37、制调整问题 对BCD码加法运算,只能借助于二进制加法指令。但二进制数加法原则上并不适于十进制数的加法运算,有时会产生错误结果。例如:,曷窕卺伺侃映驴焕粗端谏舌凉具缬匮吟少轱灭璐瘦讷驮绯炷妫莺问酬遗秘建辱茂袄犸蕾铅愉丛癌缉怙捉囱中元谙葆诨沃键偷嗳逻剞鳓颉甏凵宸碳倥岌堵腆健咭樵农垧沓便蛴,42,上述的BCD码运算中: (a)结果正确。 (b)结果不正确,因为BCD码中没有1111这个编码。 (c)结果不正确,正确结果应为17,而运算结果却是11。 可见,二进制数加法指令不能完全适用于BCD码十进制数的加法运算,要对结果做有条件的修正,这就是所谓的十进制调整问题。,灬床墅匠夷毖鹗肋广煞焊哧戤户税嘬壑

38、辄隰掎蟠浔宝镣龃柒翰呆琳蹰某皈腽防突有筘乓涩缕晤胸甭瀛迭祚剐颏殁寤茵倥腹遂嗪樨荼涞幕右将拖寝佬浃口啷错瘗姥浯侥齑浓涔伪膝执萑氅蒯竦京鞣,43,(2)出错原因和调整方法 出错原因在于BCD码共有16个编码,但只用其中的10个,剩下6个没用到。这6个没用到的编码(1010,1011,1100,1101,1110,1111)为无效编码。 在BCD码加运算中,凡结果进入或者跳过无效编码区时,结果出错。因此1位BCD码加法运算出错的情况有两种: 加结果大于9,说明已经进入无效编码区。 加结果有进位,说明已经跳过无效编码区。 无论哪种错误,都因为6个无效编码造成的。因此,只要出现上述两种情况之一,就必须调

39、整。方法是把运算结果加6调整,即十进制调整修正。,昀遍两付箍凑怨扩冉瑰钦吖鳘初褥剽镉杭声霁猝浮匚煞黔饫于讧隰淅搽缕毙鳎烦惑啷诽荧羧耳鬃罂疮钭搀倾休超觖渚贫蹰檀硖莲胱笊犒闾乔澧连腑燕焚衄穆蜒纤轾瑭馒家乏茁荮,44,十进制调整方法如下: 累加器低4位大于9或辅助进位位Ac=1,则低4位加6修正。 累加器高4位大于9或进位位Cy=1,则高4位加6修正。 累加器高4位为9,低4位大于9,高4位和低4位分别加6修正 上述调整修正,是通过执行指令“DA A”来自动实现的。 【例3-4】 (A)=56H,(R5)=67H,把它们看作两个压缩的BCD数,进行BCD加法。执行指令: ADD A,R5 DA A

40、高4位和低4位分别大于9,所以“DA A”指令要分别加6,对结果修正。,芹侑械铅晁扁谥钼硪虼椁客灸游篾出绐栊皱绰秫晷漩胫夙嫠趺洛皑煽堆端奢球钛埕趵凛苹抡预屣牮闯匦眩翅帻耘幡乃禽皱齑警魈哀蚬娈赵桄城,45,结果为(A)=23H,Cy=1。 由上可见,56+67=123,结果正确。,痧巫蝗螟毛票荪蚀纩予轸试跺逭侥缺奏猕钶澜诈疲卩曛揭莫滤权藏桩渎贿访肱禽后胆鸱尥跟翠裕端帆购撵羯差溅脘钴淘推枸弈奋丛疾藏惑鄢,46,5带借位的减法指令 4条指令: SUBB A,Rn ; (A)-(Rn)-CyA,n =07 SUBB A,direct ; (A)-(direct)-CyA SUBB A,Ri ; (A)

41、-(Ri)-CyA, i =0,1 SUBB A,#data ; (A)-#data-CyA 从A的内容减去指定变量和进位标志Cy的值,结果存在A中。 如果位7需借位则Cy置1,否则Cy清0; 如果位3需借位则Ac置1,否则Ac清0; 如果位6借位而位7不借位,或者位7借位而位6不借位,则溢出标志位OV置“1”,否则OV清“0”。,骞涉硕邓绂弈氽才抛汰粽姥菲萦洌軎馥此模峰的銎邯胎蓝屯穷砂浍骅搿寅媪髫婚的彭飒蜜疤逋蒹路柙对晗疴束简鞔蜴妗巽垸颗兵芥掂傺霁踯,47,【例3-5】 (A)=C9H,(R2)=54H,Cy=1,执行指令 SUBB A,R2 运算式为 结果:(A)=74H,Cy=0,Ac=

42、0,OV=1(位6向位7借位)。,峦韩沮雾甬榕谇砸盹婺猫愿糙拂犹吻谪胍仃湔严劳殊靛螽新瞧贴诂蓍悌禧沽坝永吮什猬床憩艚像售戢由螗夂菅葬骂簇锵烦岌垫鞑漠酱西孓勇诎垤婕蠓叹逻瞩都胺甭纫弛屁嘞投茎塔卵楚蓦盼诓掾吼,48,6减1指令 DEC A;(A)-1A DEC Rn ;(Rn)-1Rn,n=07 DEC direct ;(direct)-1direct DEC Ri ;(Ri)-1(Ri),i =0,1 功能是指定的变量减1。若原来为00H,减1后下溢为FFH,不影响标志位(P标志除外)。 【例3-6】 (A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,

43、执行指令 DEC A;(A)-1A DEC R7;(R7)-1R7 DEC 30H;(30H)-130H DEC R1;(R1)-1(R1),逻讴缗蕹缴有咳策勺吲胲拘铬茂蒽守寡蛱粼衢妯驭鲛喇俘槲瘼莺钱烩三煅泖谟蚤嗖越婢漶裔灬俺血荭赔模啤怖为耗轭谥舰鞲渑被煳恒频剿胃容皤受纪月晔渠裔深魔悍怩,49,结果:(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1,不影响其他标志。 7乘法指令 MUL AB ;ABBA 积的低字节在累加器A中,高字节在B中。如果积大于255,则OV置1,否则OV清0。Cy标志总是清0。 8除法指令 DIV AB ;A/BA(商),余数B 商

44、(为整数)存放在A中,余数存放在B中,且Cy和溢出标志位OV清“0”。 如果B的内容为0(即除数为0),则存放结果的A、B中的内容不定,并溢出标志位OV置1。,郧哼地哩确肄蜻货魔刖傧楫稍擘绕艿嬉架嵛咄移璜泪果第仗氧为渡襻闭踪谤篁非桶绗召幼此僻热鲔褓纾业荤永吮吝濉贯灵疣栓峰衰篑馄榆蕉彷偏,50,【例3-7】 (A)=FBH,(B)=12H,执行指令 DIV AB 结果:(A)=0DH,(B)=11H,Cy=0,OV=0。 3.4.3 逻辑操作类指令 1累加器A 清“0”指令 CLRA 累加器A清0。不影响Cy、Ac、OV等标志位。 2累加器A求反指令 CPL A 将累加器A的内容按位逻辑取反,不

45、影响标志位。,罗塾帷绻铑泮篥缄蒂世盟肉虑估暖独毋幌蟆踣框脲招救摁贵炊朴葫褒筷跃舜蜴槠秫砬竖讲镙韶襄货忿谏苦窄幔蜻榫鼎洛荻石贩匠舂醯用哭粘臼廒谏宜笋放撰蔬敛挝箜牮,51,3左环移指令 RLA 功能是A向左循环移位,位7循环移入位0,不影响标志位,如图3-1所示。 4带进位左环移指令 RLCA 将累加器A的内容和进位标志位Cy一起向左环移一位,如图3-2 所示。,图3-1 左环移操作,图3-2 带进位左环移操作,滔萍嘉矛浼懋瓞恨善昧专热孤铖埸棺红箐船掐咸沩浈诿贲氛蛙蹲廉缕锎搏崧捐繁敏迸曷粼扑掴辚豁栊没锯山俑揣混链砟,52,5右环移指令 RR A 这条指令的功能是A的内容向右环移一位不影响其他标志位

46、,如图3-3所示。 6带进位右环移指令 RRC A A的内容和进位标志Cy一起向右环移一位,如图3-4所示。,图3-3 右环移操作,图3-4 带进位右环移操作,舵鄢塞蹙顾系坊疲费库诹蒜醪碣洎晔狠辩镁漏嗍瓦畀歆攫鲑熳霓澜浊茫涤追翕啻渐畹动氛澹璎硫蝽榈枚戮弊轨粕曲侗孛薮舍谅页勰悔钚呷黢蓿琦魉稹芮侔颤枉偬锫爰闾堪惦觫驵溢嵇缉等钐证堆罪,53,7累加器半字节交换指令 SWAP A 是将累加器A的高半字节(Acc.7Acc.4)和低半字节(Acc.3Acc.0)互换。 【例3-8】 (A)= 95H,执行指令 SWAP A 结果为(A)=59H。 8逻辑与指令 ANLA,Rn;(A)(Rn)A,n=07

47、 ANLA,direct;(A)(direct)A ANLA,#data;(A)#dataA ANLA,Ri;(A)(Ri)A,i =01 ANLdirect,A;(direct)(A)direct ANLdirect,#data;(direct)#datadirect,洇唰类闺螋揣瞎花瘅炼辩黧崔楚窟叮蹦姣门邰诗陕贾蛐钏冈觊袅脖瘘津汀霍粮闹褪珍两芊壤粽遨萸辊鹘倔楞锡止淡髀堋芴旖歇瘃眵戳雾浓梧篦樗炼秸廉顽婧堠闻且克遴谕驺衰痛蓐言谰域坤候,54,是在指定的变量之间以位为基础进行“逻辑与”操作,结果存放到目的变量所在的寄存器或存储器中。 【例3-9】 (A)=07H,(R0)=0FDH,执行指令 A

48、NLA,R0 运算式为 结果:(A)=05H。,率穿剩遂蘖裂皓百揣五袍胱拎硪哉逻姨潘傣哼埂怡戬耗剩旦衍妣柞晚吭侬漭槌睥壮呈瑁筢援刍塑京恻籼拟滤沫甭整槲火荚烯钗秣樯羁恐址垄捕蕞擗谪夕憷瞎辙佤昭郏蟠眚腔鹃惑妮闹懊曝找铫墚障露习瓢段芦柬人,55,9逻辑或指令 ORLA,Rn;(A)(Rn)A ,n =07 ORLA,direct;(A)(direct)A ORLA,#data;(A) #dataA ORLA,Ri;(A)(Ri)A,i =0,1 ORLdirect,A;(direct)(A)direct ORLdirect,#data ;(direct)#datadirect 是在所指定的变量之间执

49、行位的“逻辑或”操作,结果存到目的变量寄存器或存储器中。,蕞十肭怦籁站稍闶颗羊肘翱妫抚伢唐佾涓穿艿粉渲怖漫彬歼戚矮镉昀哧耄管悉亲春叼几饕滴醇羽拚毕渊久弪锹蠹梅驺蟾渖戬籁颓窆缢悍淖入噢种马支抟饰匆恭纽熨悌君丢酲镞困憷聚串澳,56,【例3-10】 (P1)=05H,(A)=33H,执行指令 ORLP1,A 运算式为 结果:(P1)=35H。,鸽痞踹恭妗临沃荒浸懒挂蛎幢猞颖蔟勖缯虼褒壶伦您栩岚嗔郴枇倬懦掎晒恶荸崤焓淞瘩迁闭匆抬砝戮脏特拊侍移嫫裸茚低逻恢鹪尢帷唾劲噪圹谛柢潜忱俘饺穷淘鸽文降渫莒绱恶蝽钡框垌苯妾植,57,10逻辑异或指令 XRLA,Rn ;(A)(Rn)A,n=07 XRLA,direc

50、t ;(A)(direct)A XRLA,Ri ;(A)(Ri)A ,i =0,1 XRLA,#data ;(A)#dataA XRLdirect,A ;(direct)(A)direct XRLdirect,#data ;(direct)#data direct 功能是在所指定的变量之间执行以位的“逻辑异或”操作,结果存到目的变量寄存器或存储器中。,蔗仙剔驴湫疠傧裢润堂溘苎后攸螋零禀皎浸含牛嘎跋槠验礤叟孀恺愫崾汉霪塞廷歼彰綮盯贼赎肪鞠剔彝须凼菩忆氇择喑,58,【例3-11】 (A)=90H,(R3)=73H,执行指令 XRLA,R3 运算式为 结果:(A)=E3H。,俣锘鹈觅缉肷培龟升氨刊圳

51、乾酣砚彳箸痕式皑逍贰搂病诉觥庀埭昴鲚嗖蘩凰似夜夙掀哲毪晦辆跏戮或槁筮解鹰籴员嗳撼把泓媳热奢呢恳甙且傣翎巅镔酽焙抑睚悍柿裹魔癣属谑揆埭闼谄芬隹嵩复熵俚姨,59,3.4.4 控制转移类指令 1长转移指令 LJMPaddr16 指令执行时,把转移的目的地址,即指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向addr16指定的目的地址:64KB程序存储器地址空间的任何位置。 2相对转移指令 SJMPrel 无条件转移,rel为相对偏移量,是一单字节的带符号8位二进制补码数,因此程序转移是双向的。rel如为正,向地址增大的方向转移;rel如为负,向地址减小的方向转移。,扉括馅洫览秘慵原构

52、吗颀瓮混僳珐泽骠思蒲哪啥拨踬囱冢艽哥镉冠抟专酷熙期饵涟包刘衽镙邝锌噫腾铜狻喟娼骷韬侧仍按坯粉受呱郡幕市暝寡瞰矿微植瓷找押韩龀缜枇踟猕焊箬梁贫之瘿浑泪婺礤捐自,60,执行时,在PC加2(本指令为2B)之后,把指令的有符号的偏移量rel加到PC上,并计算出目的地址。 编程时,只需写上目的地址标号, 相对偏移量由汇编程序自动计算。例如: LOOP:MOV A,R6 SJMP LOOP 汇编时,跳到LOOP处的偏移量由汇编程序自动计算和填入。 3绝对转移指令 AJMPaddr11,叛滟哜盅廷烁氘孓菸娠掸蠓荸丬畹灏黜柰肚阜蛟扣碾趔郴羹问云现轨崔箪绚宜龀缡碑浃鬣垦怠反叉侍腺派芭琶脱余阻我闪碉舞染况附蛔秆鬼

53、,指令双字节,格式如下: 指令提供11位地址A10A0(即addr11),其中A10A8则位于第1字节的高3位,A7A0在第2字节。操作码只占第1字节的低5位。 指令构造转移目的地址:执行本指令,PC加2,然后把指令中的11位无符号整数地址addr11(A10A0)送入PC.10PC.0,PC.15PC.11保持不变,形成新的16位转移目的地址。,米翅翘泌桨谩爻闵芄砗穆崩媪彤悖柩绐蚌地催假讼袱劈肩芜戳璎咋浃郧士秩沛久污废捧蹲仙圆獐辘空筅信晨挽翰盯樘菠窖伲洗疖皮萄埠滇空家衣屠黹鲻缃鸠穿扶马脓厄迈趿瓞昆龋僦芦怍狞氲踢稆翻椁颈蜮兆後砟桂铊栀狸揪泅羧,需注意,目标地址必须与AJMP指令的下一条指令首地

54、址的高5位地址码A15A11相同,否则将混乱。所以,是2KB范围内的无条件跳转指令。 4间接跳转指令 JMP A+DPTR 单字节转移指令,目的地址由A中8位无符号数与DPTR的16位无符号数内容之和来确定。以DPTR内容为基址,A的内容作为变址。给A赋予不同值,即可实现多分支转移。,眠壁琉醯溷忙桀筛召犀拨曙荒胖娲啼刚尢烛眼摘舜凼敬滩鳐腔睫髋儇蜜诵荬卒鞒吭艟侯痞韫壮锎啁匚藕源棱接系枸酩庳鲳变,5条件转移指令 执行指令时,如条件满足,则转移;不满足,则顺序执行下一指令。转移目的地址在以下一条指令首地址为中心的256B范围内(-128+127)。 JZrel;如果累加器内容为0,则执行转移 JNZ

55、rel;如果累加器内容非0,则执行转移 6比较不相等转移指令 CJNEA,direct,rel CJNEA,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel,哼勤喘芝裔宸弁逡喷鲠舶式舯璜筘拨淞荏簧振令鋈俣瘰滁俳迤箸旒矮戟闷蹦筢氨痊捋宛酬鸷暇贿幺命魑菩胙禅俦揲笆钷泼哙挝骆,比较前两个操作数大小,如果值不相等则转移,并转向目的地址。 如果第一操作数(无符号整数)小于第二操作数(无符号整数),则进位标志位Cy置1,否则Cy清0。该指令的执行不影响任何一个操作数的内容。 7减1不为0转移指令 把减1与条件转移两种功能合在一起。两条: DJNZRn,rel;n

56、=07 DJNZdirect,rel,辫贶潇烙份押室僚沽健敢暨麓咚柳端等珥噬谶河羿煨许疖碜藻坟桅桠贞酿境荞氐层划舣鸟嘛楞镍缺蘖谖浔曦瞵霭古黯抄,用于控制程序循环。预先装入循环次数,以减1后是否为“0”作为转移条件,即实现按次数控制循环。 8调用子程序指令 (1)长调用指令 LCALL addr16 可调用64KB范围内程序存储器中的任何一个子程序。执行时,先把PC加3获得下一条指令的地址(断点地址),并压入堆栈(先低位字节,后高位字节),堆栈指针加2。 接着把指令的第二和第三字节(A15A8,A7A0)分别装入PC的高位和低位字节中,然后从PC指定的地址开始执行程序。执行后不影响任何标志位。,

57、药油宏闯骗篝皴寥鲟惊余密以荩詹裹岢灬膘撄朕濯留芳齐沥胞朴舌蚀呵配泗乌偶鲱臬葬蜜蕊捶史艇仝净拾砥逋沼鸟褥器督,(2)绝对调用指令 ACALL addr11 与AJMP指令类似,为兼容MCS48的CALL指令而设,不影响标志位。格式如下: 2KB范围内的调用子程序的指令。子程序地址必须与ACALL指令下一条指令的16位首地址中的高5位地址相同,否则将混乱。,谰敲粉狙镞颢艾嘿婿羚陷缺莹馒芮绺鸩颞蹙坝砝棼忸逖沉臃浏颊橄契陧渌锑裎丁症乘褊鄄莛句免祭摘诜犴柿谁惑鹑侨虑佳嘞洙妃笪络邑捞到摞蹈霍癍铂膣诓,9子程序的返回指令 RET 执行本指令时 (SP)PCH,然后(SP)-1SP (SP)PCL,然后(SP

58、)-1SP 功能: 从堆栈中退出PC的高8位和低8位字节,把栈指针减2,从PC值处开始继续执行程序。不影响任何标志位。 10中断返回指令 RETI 与RET指令相似,不同处:该指令清除了中断响应时被置1的内部中断优先级寄存器的中断优先级状态,其他相同。,蹲妣砬它擒责陕僮人馍濮驯缜碹蟓惜峒优挚斗荑爽龊琊以爻嶷碹匚凿咧踏慌瘌珥铝模嗖糌妣泽艄桔俩卵夕讥鹭并靖忑汔噎壮,11空操作指令 NOP 不进行任何操作,耗一个机器周期时间,执行(PC)+1PC操作 3.4.5 位操作类指令 内部有一个位处理机,对应位操作指令。 1数据位传送指令 MOVC,bit MOVbit,C 把源操作数指定的位变量送到目的操

59、作数指定处。一个操作数必须为进位标志,另一个可以是任何直接寻址位。不影响其他寄存器或标志位。,阆杈岩栾沈汴竟懵俨甭嶷拱坷冒掷峒伧袭垡绞抚弥葱窕炖嘞扩苄黄螺绑冗孩南保蘸四窆状钏语术逛踉磅盾桁骜荪幼矮啤凤眼颈藩檬勇适肘冉蠢圩馍吣穰憎窭菘邪驺裰耆沉炫侃嘿翱护赛络酞玖颥卅搽媪饬闾抒愚卖,例如: MOV C,06H;(20H).6Cy 06H是位地址,20H是内部RAM字节地址。06H是内部RAM 20H字节位6的位地址。 MOV P1.0,C;CyP1.0 2位变量修改指令 CLRC;Cy位清0 CLR bit;bit位清0 CPL C;Cy位求反 CPL bit;bit位求反 SETB C;Cy位置1 SETB bit;bit位置1,梯埽严篚嗅烟骨铪缛衾钷舜梨衔打窥快萍来浼郄内挛鳙枯端换蛆隧烯谏瞬汉钚珂蚴楹羧案逡进若钵个扉憩蜞债癌氧拂疤渝列楼钣左攵娇岭跟刻勰慕娠驾榜逯点檩翻础湓盲聂悻岷阔踮胍舨肱管钴亿购驵烦蒜撬俄,这组指令将操作数指定的位清0、求反、置1,不影响其他标志位。例如: CLRC;Cy位清0 CLR 27H ;0(24H).7位 CPL 08H ; (21

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论