




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片微型计算机原理及接口技术(9)1/37内容提纲一位操作指令二控制转移类指令2/37位操作指令一3/37位操作指令简介位操作指令以位为处理对象,分别完成位传送、位状态控制、位逻辑操作、位条件转移等功能,共有17条。可被汇编程序所识别的位地址表示方式如下:1)直接用位地址(十进制或十六进制数)表示,或写成位地址表达式表示。2)写成“字节地址.位号”的形式。例如0B8H.0,20H.1等。3)位寄存器的定义名称,如C、EA等。4)对于可位寻址寄存器,使用“字节寄存器名.位号”的形式。例如P1.0,PSW.4等。5)用户使用伪指令事先定义过的符号地址。4/37位操作指令简介表4-4位操作指令的操作码助记符及对应的操作数操
作功
能操
作
码操
作
数备
注位传送
MOVC,bit或者bit,C源地址和目的地址可互换位状态控制位清0CLRC或bitbit表示直接寻址位位取反CPL位置位SETB位逻辑操作逻辑与操作ANLC
∧bit(或/bit)→C/bit表示直接寻址位的非逻辑或操作ORLC∨bit(或/bit)→C位跳转判C转移JCrelrel为相对偏移量JNC判直接寻址位转移JBbit,relJNB为0转移,JB为1转移JNBJBC寻址位为1转移并清0该位5/371.
位数据传送指令
MOV C,bit ;(C)←(bit)MOV bit,C ;(bit)←(C)指令的功能是把第二操作数所指出的布尔变量送到由第一操作数指定的布尔变量中。其中一个操作数必为位累加器(进位标志CY),另一个可以是任何直接寻址位(bit)。指令执行结果不影响其他寄存器或标志。例:设片内数据RAM中(20H)=79H,执行指令:
MOVC,07H;07H是位地址,即字节地址20H的第7位,将使(C)=0。6/372.位状态控制指令位状态控制指令包括位的清零、取反和置位。(1)位清0指令CLR bit ;(bit)←0CLR C ;(C)←0上述指令可使直接寻址位(bit)或位累加器C清零,不影响其他标志。例: 片内数据RAM字节地址25H的内容为34H(00110100B),执行指令:
CLR2AH;2AH为字节地址25H第2位的位地址
25H的内容变为30H(00110000B)。7/37例:
执行指令序列MOV 25H,#5DH ;(25H)=(01011101B)CPL 2BH ;(25H)=(01010101B)CPL P1.2 ;P1.2求反(2)位求反指令CPL bit ;(bit)←(/bit)CPL C ;(C)←(/C)上述指令可把直接寻址位(bit)或位累加器C内容取反,不影响其他标志。(3)位置位指令SETBbit ;(bit)←1SETBC ;CY←1例如,输出口P1原已写入了49H(01001001B),则执行:SETBP1.7将使P1口输出数据变为C9H(11001001B)。8/373.位逻辑操作指令位逻辑操作有两种:位逻辑与,位逻辑或。(1)位逻辑“与”指令ANLC,bit ;(C)∧(bit)ANLC,/bit ;(C)∧(/bit
)上述指令将直接寻址位的内容或直接寻址位内容取反后(不改变原内容)与位累加器C相与,结果保存在C中。“/bit”表示对将位内容取反后再参与位操作。“与”逻辑操作示意图如图所示。例当位地址(7FH)=1并且累加器中(ACC.7)=1时,进位标志CY置1,否则CY清0,可编程序如下:
MOV C,7FH ;(7FH)=1送CANLC,ACC.7;(C)∧(ACC.7)→(C)9/37(2)位逻辑“或”指令ORLC,bit ;(C)←(C)∨(bit)ORLC,/bit ;(C)←(C)∨(/bit)上述指令把直接寻址位的内容或直接寻址位的内容取反后(不改变原内容)与位累加器C进行逻辑“或”,结果保存在C中。位逻辑“或”操作的示意图如图所示:。例:
位地址7FH中的内容和累加器ACC.7中的内容相“或”的程序如下:
MOVC,7FHORLC,ACC.7 ;相“或”的结果存C中。10/374.位条件转移指令
位条件转移指令分为判进位标志C或判直接寻址位状态转移两种。(1)判进位标志C转移指令JC rel ;若(CY)=1,则(PC)←(PC)+rel,否则顺序执行。 JNC rel ;若(CY)=0,则(PC)←(PC)+rel,否则顺序执行。前一条若进位标志为1,后一条若进位标志为0,可使程序转向目标地址,否则顺序执行下一条指令。目标地址为第二字节中的带符号的偏移量与PC当前值之和,不影响任何标志。11/37
实际应用中,一般在rel的位置写入欲跳转到的标号地址,偏移量由汇编程序自动进行计算。这样做有两个好处,一是程序的可读性好,二是不必进行偏移量的计算。例如,ADDA,#30H;加法指令,影响标志位CJC YESC ;若C=1(有进位),则转YESC,否则,继续执行
… YESC: … 12/37(2)判直接寻址位转移指令JBbit,rel ;若(bit)=1,(PC)←(PC)+relJNBbit,rel ;若(bit)=0,(PC)←(PC)+relJBCbit,rel ;若(bit)=1,(PC)←(PC)+rel,(bit)←0
上述指令检测直接寻址位,若位变量为1(第一、三条指令)或位变量为0(第二条指令),则程序转向目标地址去执行,否则顺序执行下条指令。
目标地址为PC当前值((PC)←(PC)+3)与第三字节所给带符号的相对偏移量之和。测试位变量时,不影响任何标志,前两条指令不影响原变量值,但后一条指令不管原变量为何值,检测后即行清0。13/37在实际应用中,一般在rel的位置写入欲跳转到的标号地址,偏移量由汇编程序自动进行计算。例
指令序列:MOV P1,#0CAH ;(P1)←0CAH(11001010B)MOV A,#56H ;(A)←56H(01010110B)JB P1.2,P12SET ;(P1.2)=0不转,继续执行JNB ACC.3,ACC3CLR ;(ACC.3)=0转ACC3CLR处执行P12SET:…… ACC3CLR:……
14/37指令序列:
MOVA,#43H ;A←43H(01000011B)
JBCACC.6,ACC6CLR;ACC.6=1转ACC6CLR,且ACC.6←0 … ACC6CLR:… 执行后使程序转向ACC6CLR处,并把ACC.6清0。15/37控制转移类指令二16/37控制转移类指令简介控制转移类类指令用于控制程序的走向。控制转移类指令可分为两种:一种是程序转移指令,另一种称为子程序调用和返回指令。17/371.程序转移指令(1)无条件转移指令无条件转移指令操作码助记符中的基本部分是“JMP”(转移或者跳转),它表示要把目标地址(要转去的某段程序第一条指令的地址号)送入程序计数器PC,根据转移距离和寻址方式不同又可分为LJMP(长转移)、AJMP(绝对转移)、SJMP(相对短转移)和JMP(间接转移)。1)长转移指令LJMPaddr16;(PC)←addr16
指令提供16位目标地址,将指令中第二、第三字节地址码分别装入PC的高8位和低8位中,程序无条件转向指定的目标地址去执行,不影响标志位。例:
如果在程序存储器0000H单元存放一条指令
LJMP0100H
则复位后程序将跳到0100H单元去执行。18/372)绝对转移指令AJMPaddrlla10a9a800001a7~a0;(PC)←(PC)+2,(PC11~15)不变;(PC0~10)←addr0~10第二字节存放的是低8位地址,第一字节5、6、7位存放着高3位地址a8~a10。指令执行时分别把高3位和低8位地址值取出送入程序计数器PC的低11位,维持PC的高5位((PC)+2后的)地址值不变,实现2K范围内的程序转移,如图所示。AJMP为双字节指令,当程序真正转移时PC值已加2了,因此,目标地址应与AJMP后面相邻指令的第一字节地址在同一2K字节范围内。如果超过了2K范围,汇编程序会提示出错(可以采用多级跳转的方式解决该错误)。本指令不影响标志位。跳转范围有限,很少使用。19/373)相对短转移指令SJMPrel;(PC)←(PC)+2,(PC)←(PC)+rel其中,rel为相对偏移量,是一个8位带符号的数
指令控制程序无条件转向指定地址。该指定地址由指令第二字节的相对地址和程序计数器PC的当前值(执行SJMP前的PC值加2)相加形成。由于AJMP和SJMP指令的跳转范围有限,而LJMP(长转移指令)不受跳转范围的限制,因此,一般情况下都可使用LJMP指令代替AJMP和SJMP指令。4)间接转移指令JMP@A+DPTR ;(PC)←(A)+(DPTR)该指令把累加器里的8位无符号数与作为基址寄存器DPTR中的16位数据相加,所得的值装入程序计数器PC做为转移的目标地址。由于执行16位加法,从低8位产生的进位将传送到高位去。指令执行后不影响累加器和数据指针中的原内容,不影响任何标志。20/37程序转移指令是一条极其有用的多分支选择转移指令,其转移地址不是汇编或编程时确定的,而是在程序运行时动态决定的。因此,可在DPTR中装入多分支转移程序的首地址,而由累加器A的内容来动态选择其中的某一个分支予以转移,这就可用一条指令代替众多转移指令,实现以DPTR内容为起始的256个字节范围的选择转移。对比C语言中的switch…case语句?21/37例:
要求当(A)=0转处理程序CASE_0,(A)=1转处理程序CASE_1,(A)=2转处理程序CASE_2(A)=3转处理程序CASE_3,(A)=4转处理程序CASE_4。程序代码如下:MOVDPTR,#JUMP_TABLE ;表首址送入DPTR中MOVA,INDEX_NUMBER ;取得跳转索引号RLA ;将索引号乘以2(由于AJMP指令是2字节指令)JMP@A+DPTR ;以A中内容为偏移量JUMP_TABLE:AJMP CASE_0 ;(A)=0转CASE_0执行AJMP CASE_1 ;(A)=1转CASE_1执行AJMP CASE_2 ;(A)=2转CASE_2执行AJMP CASE_3 ;(A)=3转CASE_3执行AJMP CASE_4 ;(A)=4转CASE_4执行22/37无条件转移指令跳转小结注:在实际应用中,由于AJMP和SJMP指令的跳转范围有限,而LJMP(长转移指令)不受跳转范围的限制,因此一般情况下可以使用LJMP指令代替AJMP和SJMP指令。23/37(2)条件转移指令条件转移指令执行满足某种特定条件的转移,其目标地址在以下一条指令的起始地址为中心的256字节范围中(-128到+127)。1)累加器判零转移指令JZrel ;累加器为0转移JNZrel ;累加器不为0转移JZ表示累加器的内容为0,则转向指定的地址,否则顺序执行下条指令;JNZ指令刚好相反,只须累加器不等于0,则转向指定地址,否则顺序执行下条指令。两条指令均为双字节,其中第二条字节为符号的相对偏移量,PC现行值(PC加2后)与偏移量相加即得转移地址。该指令不改变累加器内容,不影响标志位。a)JZrel指令 b)JNZrel指令24/37例如,
MOV A,P0 ;P0口内容送累加器A JZ AIS0 ;A不为0,则不跳转,继续执行;A=0,则跳转到AIS0 DEC A ;A减1AIS0: …25/372)比较转移指令CJNE(目的字节),(源字节),relCJNE类指令比较前面两个操作数的大小,如果它们的值不相等则转移,相等则继续执行。该类指令均为三字节指令,PC当前值((PC)+3→
(PC))与指令第三字节带符号的偏移量相加即得到转移地址,如果目的字节的无符号整数值小于源字节的无符号整数值,则置位进位标志,否则清0进位位,指令不影响任何一个操作数。比较转移指令的源和目的操作数有4种寻址方式组合:累加器可以和任何直接寻址字节或立即数比较,而任何间接寻址RAM单元或工作寄存器能与立即数比较,如图所示。CJNE指令的源、目的操作数关系26/37比较转移指令有4条:CJNE A,#data8,rel CJNE A,addr8,rel CJNE @Ri,#data8,rel CJNE Rn,#data8,rel例如,设(R7)=53H,则执行下列指令时,将转移到K1执行,且CY←1。CJNER7,#68H,NOTEQ;由于(R7)<68H,转移到NOTEQ执行,且CY←1
… ;在此处理相等的情况NOTEQ:JCLESS68 ;因为CY=1,判出(R7)<68H,转LESS68执行
…
LESS68:…27/373)循环转移指令DJNZ(字节),rel
该指令是一条减1与0比较指令,程序每执行一次该指令,就把第一操作数字节变量减1,结果送回到第一操作数中,并判字节变量是否为0,不为0转移,否则顺序执行。如果字节变量值原为00H,则变为0FFH,不影响任何标志。在循环转移类指令中,有两条常用指令:DJNZ addr8,relDJNZ Rn,rel由图可以看出,循环转移的目标地址为DJNZ之后相邻指令的第一个字节地址与带符号的相对偏移量相加之和。使用该指令可以很容易地构成循环,只要给直接地址或工作寄存器赋不同初值,就可方便地控制循环次数。28/37例,利用DJNZ指令可实现软件延时。下面的程序可产生50us的软件延时:DELAY50US: ;@11.0592MHz NOPNOP PUSH30H MOV30H,#181NEXT: DJNZ30H,NEXT POP30H RET29/37多项单字节数求和。设数组长度放R0,数组存放首地址在R1中,数组之和则存在20H单元中,因为是8位字长,所以此和不应大于256。可编程如下:CLR A ;A清0SUMD: ADD A,@R1 ;相加 INC R1 ;地址指针增1 DJNZ R0,SUMD ;字节数减1不为0继续加 MOV 20H,A ;结果存20H单元30/372.子程序调用和返回指令有两条调用指令:LCALL(长调用)及ACALL(绝对调用)和一条与之配对的子程序返回指令RET。LCALL和ACALL指令类似于转移指令LJMP和AJMP,不同之处在于它们在转移前,要把执行完该指令后PC的内容自动压入堆栈,才做addr16(或addr11)→PC的工作(其中addr16或addr11是子程序的首地址或称子程序入口地址)。RET指令是子程序返回指令,执行时,从堆栈中把原出发地址弹回PC,让CPU返回执行原主程序。由此可见,RET指令一定在子程序中。31/37(1)长调用指令LCALLaddr16
;
(PC)
←addr0~15((SP))←(PC8~15)(SP)←
(SP)+1((SP))←(PC0~7)(SP)←(SP)+1(PC)←(PC)+3
长调用与LJMP一样提供16位地址,可调用64K范围内所指定的子程序。
由于为三字节指令,执行时首先(PC)+3→(PC)以获得下一条指令地址,并把此时PC内容压入(作为返回地址,先压入低字节后压入高字节)堆栈,堆栈指针SP加2指向栈顶,然后把目标地址addr16装入PC,转去执行子程序。
使用该指令可使子程序在64K范围内任意存放。指令执行不影响标志位。例:
LCALL STR
;表示调用STR子程序32/37(2)绝对调用指令ACALLaddr11a10a9a810001
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 村庄自拆自建协议书
- 注销企业委托协议书
- 林业工程移交协议书
- 深圳劳务派遣协议书
- 暂缓缴纳罚款协议书
- 清扫保洁服务协议书
- 旅游损害赔偿协议书
- 树枝收购合同协议书
- 暖气分期还款协议书
- 智能产品合伙协议书
- 2025年全民营养周科学实现吃动平衡健康中国营养先行课件
- 键盘采购合同协议
- 卖车合同协议书模板下载
- 非标自动化设备设计培训
- 行政检查业务培训课件
- 银泰证券公司融资融券业务方案设计
- 2025年高校教师岗前培训《高等教育学》考试模拟试卷及答案(共五套)
- 主题班会少年强则国强纪念五四青年节【课件】
- 湖南省张家界市慈利县实验高中-奋进关键期跨越分水岭-高二下开学家长会【课件】
- 2025年湖北省建设投资集团有限公司招聘笔试参考题库含答案解析
- 2025年中国红外光理疗仪行业市场全景评估及发展战略规划报告
评论
0/150
提交评论