【例4-4】编程将20H单元中的8位无符号二进制数转换成3位 BCD码,并存放在2H(百位)和21H(10位,个位)两个单元中。 程序如下: ORG 1000H MOV A,20H ;取数送A MOV B, #64H ;除数100送B中 DIV AB 商(百位数BCD码)在A中,余数在B中 MOV 22H, A ;百位数送22H MOV a, B ;余数送A做被除数 MOV B, #OAH ;除数10送B中 DIV AB ;十位数BCD码在A中,个位数在B中 SWAP A :十位数BCD码移至高4位 ORL A, B ;并入个位数的BCD码 MOV 21H,A ;十位、个位BCD码存人21H END
【例4-4】编程将20H单元中的8位无符号二进制数转换成3位 BCD码,并存放在22H(百位)和21H(10位,个位)两个单元中。 程序如下: ORG 1000H MOV A ,20H ;取数送A MOV B ,# 64H ;除数100送B中 DIV AB ;商(百位数BCD码)在A中,余数在B中 MOV 22H ,A ;百位数送22H MOV A , B ;余数送A做被除数 MOV B , #0AH ;除数10送B中 DIV AB ;十位数BCD码在A中,个位数在B中 SWAP A ;十位数BCD码移至高4位 ORL A , B ;并入个位数的BCD码 MOV 21H , A ;十位、个位BCD码存人21H END
分支程序的结构有两种,如图42所示。 K=? 条佯成立 杈序段B 程序段A 分支][1分支 n分支 (a)双分支结构 (b)多分支结构 图42分支程序结构 图42(a)结构使用条件转移指令来实现分支, 当给出的条件成立时,执行程序段A,否则执行程序 段B。 图42(b)结构使用散转指令JMP来实现多分支转 移,它首先将分支程序按序号的值来实现分支转移
分支程序的结构有两种,如图4.2所示。 图4.2 分支程序结构 图4.2(a) 结构使用条件转移指令来实现分支, 当给出的条件成立时,执行程序段A,否则执行程序 段B。 图4.2 (b) 结构使用散转指令JMP来实现多分支转 移,它首先将分支程序按序号的值来实现分支转移
【例45】设补码X放在内部RAM3OH单元中,函数 Y与X有如下的关系式: x>0 20H x=0 x+5 x<0 试编写程序,根据Ⅹ的值求出Y,并放回原单元。 解取出X后先做取值范围的判断,用累加器A状态转 移指令判断X是否为0,用位状态转移指令判断X是大 于0还是小于0。程序流程图如图4.3所示 程序如下:
【例4-5】设补码X放在内部RAM30H单元中,函数 Y与X有如下的关系式: 试编写程序,根据X的值求出Y,并放回原单元。 解 取出X后先做取值范围的判断,用累加器A状态转 移指令判断X是否为0,用位状态转移指令判断X是大 于0还是小于0。程序流程图如图4.3所示。 程序如下:
4.3分支程序设计 MOV A, 30H 开始 Z ZERO JNB ACC. 7, PLUS H)→ ADD A,#5 A=0? MOV 30H, A PLUS: SJMP S A>0 2OH→>(30H ZERO: MOV 30H, #20H 0H)+5→(30H) SJMP S END (结束 图4.3[例4-5]程序框图
4.3 分支程序设计 MOV A,30H JZ ZER0 JNB ACC.7,PLUS ADD A,#5 MOV 30H,A PLUS: SJMP $ ZERO: MOV 30H,#20H SJMP $ END 开始 结束 A=0? A>0? (30H) A (30H)+5 (30H) 20H (30H) 图4.3 [例4-5]程序框图
【例46】内部RAM40H和4H单元中各有 无符号数,比较其大小,将大数存放于内部 RAM60H单元,小数存放于内部RAM6H单元, 如两数相等,则分别送往这2个单元。 解用比较不等转移指令CJNE比较力两个 无符号书,先确定它们是否相等,若不相等时 再根据借位标志确定这两个无符号书的大小 程序框图如图44所示 程序如下:
【例4-6】内部RAM40H和41H单元中各有 一无符号数,比较其大小,将大数存放于内部 RAM60H单元,小数存放于内部RAM61H单元, 如两数相等,则分别送往这2个单元。 解 用比较不等转移指令CJNE比较力两个 无符号书,先确定它们是否相等,若不相等时 再根据借位标志确定这两个无符号书的大小。 程序框图如图4.4所示。 程序如下: