单4片微机原理与应用5.pptVIP

  • 0
  • 0
  • 约1.55万字
  • 约 70页
  • 2016-11-29 发布于湖南
  • 举报
单4片微机原理与应用5

图 4.7 除法程序的流程 例 21 将(R4R5R6R7)除以(R2R3), 商放在(R6R7)中, 余数放在(R4R5)中。 NDIV: MOV A, R5 ; 判商是否产生溢出 CLR C SUBB A, R3 MOV A, R4 SUBB A, R2 JNC NDIV1 ; 溢出, 转溢出处理 MOV B, #16; 无溢出, 执行除法 NDIV2: CLR C ; 被除数左移一位, 低位送 0 MOV A, R7 RLC A MOV R7, A MOV A, R6 RLC A MOV R6, A MOV A, R5 RLC A MOV R5, A XCH A, R4 RLC A XCH A, R4 MOV F0, C ; 保护移出的最高位 CLR C SUBB A, R3 ; 部分余数与除数比较 MOV R1, A MOV A, R4 SUBB A, R2 JB F0, NDIV3; 移出的高位为 1, 肯定够减 JC NDIV4 ; 否则, (Cy) = 0才够减 NDIV3: MOV R4, A ; 回送减法结果 MOV A, R1 MOV R5, A INC R7 ; 商上1 NDIV4: DJNZ B, NDIV2; 循环次数减 1 ,若不为零则循环 CLR F0 ; 正常执行无溢出 F0 = 0 RET NDIV1: SETB F0 ; 溢出F0=1 RET 4.2.4 散转程序设计 散转程序是分支程序的一种, 它可根据运算结果或输入数据将程序转入不同的分支。MCS - 51 指令系统中有一条跳转指令JMP@A+DPTR, 用它可以很容易地实现散转功能。该指令把累加器的 8 位无符号数与 16 位数据指针的内容相加, 并把相加的结果装入程序计数器PC, 控制程序转向目标地址去执行。此指令的特点在于, 转移的目标地址不是在编程或汇编时预先确定的, 而是在程序运行过程中动态地确定的。目标地址是以数据指针 DPTR的内容为起始的 256 字节范围内的指定地址, 即由 DPTR的内容决定分支转移程序的首地址, 由累加器 A的内容来动态选择其中的某一个分支转移程序。 例 11 根据工作寄存器R0 内容的不同, 使程序转入相应的分支。  (R0)=0 对应的分支程序标号为PR0;  (R0)=1 对应的分支程序标号为PR1;   (R0)=N 对应的分支程序标号为PRN。 … 程序如下:  LP0: MOV DPTR, #TAB ; 取表头地址 MOV A, R0  ADD A, R0 ; R0内容乘以2 JNC LP1 ; 无进位转移 INC DPH ; 加进位位 LP1: JMP @A+DPTR; 跳至散转表中相应位置  TAB: AJMP PR0 AJMP PR1  AJMP PRN … … 本例程序仅适用于散转表首地址 TAB和处理程序入口地址 PR0, PR1, …, PRN在同一个 2 KB范围的存储区内的情形。若超出 2 KB范围可在分支程序入口处安排一条长跳转指令, 可采用如下程序: MOV DPTR, #TAB MOV A, R0  MOV B, #03H ; 长跳转指令占 3 个字节 MUL AB XCH A, B ADD A, DPH MOV DPH, A XCH A, B JMP @A+DPTR; 跳至散转表中相应的位置  TAB: LJMP PR0; 跳至不同的分支 LJMP PR1  LJMP PRN … … 4.2.5 子程序和参数传递 一、 子程序的概念 通常把这些基本操作功能编制为程序段作为独立的子程序, 以供不同程序

文档评论(0)

1亿VIP精品文档

相关文档