例2将两个半字节数合并成一个一字节数。 设内部RAM40H#,41H单元中分别存放着8位二进制 数,要求取出两个单元中的低半字节,并成一个字节后,存入 50H元中。程序如下: START:MOVR1,#40H;设置R1为数据指针 MOVA,aR1;取出第一个单元中的内容 ANLA,#0FH;取第一个数的低半字节 SWAP A ;移至高半字节 INC RI ;修改数据指针 XCHA,aR1;取第二个单元中的内容 ANLA,#0FH;取第二个数的低半字节 ORLA,@R1;拼字 MOV50H,A;存放结果 RET
例 2 将两个半字节数合并成一个一字节数。 设内部RAM 40H#, 41H单元中分别存放着 8 位二进制 数, 要求取出两个单元中的低半字节, 并成一个字节后, 存入 50H单元中。 程序如下: START: MOV R1, #40H ; 设置R1 MOV A, @R1 ; ANL A, #0FH ; SWAP A ; INC R1 ; XCH A, @R1 ; ANL A, # 0FH ; ORL A, @R1 ; MOV 50H, A ; RET
422分支程序设计 条件成立? A Y =n SO 每。很 Sn a (b) 图41分支结构框图 (a)单分支流程;(b)多分支流程
4.2.2 分支程序设计 图 4.1 (a) 单分支流程; (b) 多分支流程
例3x,y均为8位二进制数, x>0 设x存入R,入R1,y=1-1x<0 求解:y=syn(x 程序如下: x=0 START: CUNE R0,#00H,SUL1;R0中的数与0较不等转移 MOVR1,#00H;相等,R1←0 SJMP SUL2 SUL: JC NEG;两数不等,若(R0)<0,转向NEG MOR1,#01H;(R0)>0,则R1←01H SJMP SUL2 NEG:MOVR1,#0FFH;(R0)<0,则R1←0FFH SUL2 RET
例 3 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解: y=syn(x) 程序如下: START: CJNE R0, #00H, SUL1 ; R0中的数与00比较不等转移 MOV R1, #00H; 相等, R1← 0 SJMP SUL2 SUL1: JC NEG ; 两数不等, 若(R0)<0, 转向NEG MOV R1, #01H ; (R0)>0, 则 R1←01H SJMP SUL2 NEG : MOV R1, #0FFH ; (R0)<0, 则 R1←0FFH SUL2 : RET
正确程序如下 SUBF MOV A, RO JZ ZERO JBACC. NEG MOV RI.#1 ZERO MOV R1.#O SMPENDE NEG: MOV RI #OFFH ENDF: RET
正确程序如下: SUBF : MOV A,R0 JZ ZERO JB ACC.7 , NEG MOV R1, #1 ZERO : MOV R1 , #0 SJMP ENDF NEG : MOV R1 , #0FFH ENDF : RET
开始 Y 0? N X<0? N Y y=0|y=-1y=+1 结束