单片微型计算机C第6-7讲(机械)
举例 设累加器A的初值为57H,按照下列要求编写执行,并写出执行指令后A的值。 对累加器A中的1、3、5位清0,其余位不变 ANL A, 对累加器A中的2、4、6位置1,其余位不变 ORL A, 对累加器A中的0、1位取反,其余位不变 XRL A, 清0与取反指令 CLR A 将累加器A置成00H,等价于MOV A,#00H CPL A 将累加器A中数据按位取反。 如(A)=62H,则执行指令CPL A后,(A)=9DH 累加器移位指令 将数据按照指定方向一起移动 指令 符号 执行过程 左移 RL A 带进位左移 RLC A 右移 RR A 带进位右移 RRC A A7 A0 ← A6 A7 A7 A0 ← A6 CY CY A7 A7 A0 → A0 A1 A7 A0 → CY A1 CY A0 举例 设累加器A的初值为57H,CY的初值为1,分别执行下列指令后,累加器A及CY的内容是多少? RL A (A)=AEH,CY=1 RLC A (A)=AFH,CY=0 RR A (A)=ABH,CY=1 RRC A (A)=ABH,CY=1 4.3.4 控制转移类指令 共17条 无条件转移指令:将程序跳转到指定位置执行。 条件转移指令:若转移条件成立,将程序跳转到指定位置执行;否则顺序执行。 子程序操作指令:调用用户自定义的程序段,以及从子程序返回。 中断返回指令:中断服务子程序中最后一条指令,以便返回主程序。 空操作指令:消耗一个机器周期的时间,做软件延时用。 无条件转移指令 SJMP 短转移指令(常用) 跳转的距离较短,只允许在当前指令的-128~+127范围内转移。 LJMP 长跳转指令(常用) 可在整个64KROM区域跳转。 JMP @A+DPTR 多分支转移指令 无条件转移指令的使用 AAA:*** …… SJMP AAA …… LJMP AAA …… LJMP BBB …… BBB:*** AAA、BBB:符号地址 编译时,自动转换成存储地址,无须额外了解指令的详细执行过程。 SJMP $:原地跳转,即程序执行到此处后不往后执行。程序的最后一般为该指令。以避免程序越界。 条件转移指令 判累加器A结果转移指令 JZ rel;JNZ rel 例:判断A的值与R0的值是否相等,若相等,则将R1的内容传给A,否则将R2的内容传给A。 CLR C SUBB A,R0 JZ MOVR1 MOV A,R2 SJMP ED MOVR1:MOV A,R1 ED:SJMP $ 比较不相等转移指令 对给定的两个操作数,若不相等,则转移 CJNE dist,src,rel 符号 目的操作数 源操作数 操作 CJNE A direct;#data 若源操作数不等于目的操作数,则转移到符号地址处去执行;否则顺序执行。 同时,该指令不影响源操作数和目的操作数的值 Rn #data @Ri #data 减1不为0转移指令 将操作数减1后,若结果不为零,则转移。 DJNZ Rn,rel DJNZ direct,rel 有一段程序如下,分析该程序段的功能。 MOV 23H,#0AH CLR A LOOP: ADD A,23H DJNZ 23H, LOOP SJMP $ (A)=10+9+8+7+6+5+4+3+2+1=37H 4.3.5 位操作指令 共17条 数据位传送指令,其中一个操作数必须为进位标识。 位变量修改指令,包括清零、取反、置位。 位变量逻辑与指令。 位变量逻辑或指令。 条件转移类指令 位操作指令的说明 位操作是以位为单位进行的各种操作。位操作指令中的位地址有4 种表示形式,如表示PSW中的第5位: 直接地址 (如,0D5H); 点操作符 (如,(0D0H).5、PSW.5等); 位名称 (如,F0); 伪指令定义(如,MYFLAG BIT F0)。 ①数据位传送指令 将某个二进位与进位位C进行数据传递 MOV C,bit C←bit MOV bit,C bit←C 例 MOV C,06H。表