0000 20 00 30 ORG 0000 H LJMP

  • Slides: 19
Download presentation

二、汇编语言格式: 地址 0000 机器码 20 00 30 源程序 注释 ORG 0000 H ; 整个程序起始地址

二、汇编语言格式: 地址 0000 机器码 20 00 30 源程序 注释 ORG 0000 H ; 整个程序起始地址 LJMP MAIN ; 跳向主程序 ORG 0030 H ; 主程序起始地址 0030 C 3 MAIN: CLR C ; MAIN为程序标号 0031 E 6 LOOP: MOV 0032 37 ADDC A, 0033 08 INC 0034 DA FB DJNZ R 1, LOOP ;相对转移 0036 80 03 SJMP NEXT 0038 78 03 MOV R 0, #03 H 003 A 18 003 B 80 FE A , @R 0 @R 1 R 0 NEXT: DEC R 0 SJMP $ ;HERE: SJMP HERE END ; 结束标记

四、伪操作指令例子 MATH EQU 03 H ORG 0000 H MAIN: CLR C LOOP: MOV A

四、伪操作指令例子 MATH EQU 03 H ORG 0000 H MAIN: CLR C LOOP: MOV A , @R 0 MOV R 1, #MATH ;相当于 MOV R 1, #03 H NEXT: SJMP $ ORG 1100 H DB END 01 H , 04 H, 09 H , 05 H ; ROM中 地址 数据 1100 01 1101 04 1102 09 1103 05

举例 ORG AJMP ORG MAIN: CLR LOOP: MOV ADDC INC DJNZ SJMP MOV NEXT:

举例 ORG AJMP ORG MAIN: CLR LOOP: MOV ADDC INC DJNZ SJMP MOV NEXT: DEC SJMP END 0000 H ; 整个程序起始地址 MAIN ; 跳向主程序 0030 H ; 主程序起始地址 C ; MAIN为程序标号 A , @R 0 A, @R 1 R 0 R 1, LOOP ;相对转移 NEXT R 1, #03 H R 0 $ ;相当于 LOOP 1: SJMP LOOP 1 ; 结束标记

4. 3 查表程序设计 一. 用DPTR查表(查 0~ 9平方表) 1000 C 083 TA: PUSH DPH 1002

4. 3 查表程序设计 一. 用DPTR查表(查 0~ 9平方表) 1000 C 083 TA: PUSH DPH 1002 C 082 PUSH DPL 1004 902000 MOV DPTR, #TAB 1007 93 MOVC A, @A+DPTR 1008 D 082 POP DPL 100 A D 083 POP DPH 100 C 22 RET ORG 2000 H TAB: DB 00 H, 01 H, 04 H, 09 H 2000 00 2001 01 2002 04 2003 09

二. 用PC查表(查 0~ 9平方表) 1000 1002 1003 1004 1005 1006 1007 C 083 83

二. 用PC查表(查 0~ 9平方表) 1000 1002 1003 1004 1005 1006 1007 C 083 83 22 00 01 04 09 ORG 1000 H TA: ADD A, #01 H ; # 01 H 为偏移量 MOVC A, @A+PC RET DB 00 H, 01 H, 04 H, 09 H END 偏移量=表首地址-(查表指令下一条指令地址) = 1004 H - 1003 H = 01 H

4. 4 循环程序设计 一. 延时 50 ms程序 DEL: MOV R 7, #200 DEL 1:

4. 4 循环程序设计 一. 延时 50 ms程序 DEL: MOV R 7, #200 DEL 1: MOV R 6, #125 DEL 2: DJNZ R 6, DEL 2 ; 125*2=250 us DJNZ R 7, DEL 1 ; 0. 25 ms*200= 50 ms RET 使用 12 MHz晶振时,一个机器周期为 1 us, 执行 DJNZ指令为 2 us,加其他指令的时间(250+1+2) *200+1= 50. 301 ms 精确计算见 P 327

二、分支程序例1 例1:按下面公式编写程序, x为无符号数,存在 20 h单元 y存放在 21 h单元。 ORG 0030 H MOV A, 20

二、分支程序例1 例1:按下面公式编写程序, x为无符号数,存在 20 h单元 y存放在 21 h单元。 ORG 0030 H MOV A, 20 H CJNE A, #21 H, LOOP 1: JC NEXT 1 CJNE A, #40 H, LOOP 2: JNC NEXT 2 MOV B, #2 MUL AB AJMP NEXT 2 NEXT 1: CPL A NEXT 2: MOV 21 H, A END 最终结果存在 21 h中

4. 6 散转程序设计 ORG 0030 H 根据R 7中的内容,转向各个子程序。 CLR A R 7= ? MOV

4. 6 散转程序设计 ORG 0030 H 根据R 7中的内容,转向各个子程序。 CLR A R 7= ? MOV A, R 7 0 1 处 理 处 理 1 n n 0 R 7= 0,转入Prog 0 R 7= 1,转入Prog 1 R 7= 2,转入Prog 2 …… R 7=n,转入Progn JUMP 1: MOV DPTR, #TAB TAB: *AJMP … 即把PC指向子程序的起始地址; ADD A, R 7 AJMP @A+DPTR ORG 0100 H AJMP Prog 0 AJMP Prog 1 AJMP Prog 2 …… *R 7 x 2 是AJMP @A+DPTR的机器码匹配;此处 n<127; *如用LJMP @A+DPTR,则R 7 x 3, 程序还要作相应修改。