ORG 1000 H BUF 1 DB 38 H
例: ORG 1000 H� BUF 1: DB 38 H, 7 FH, 80 H� BUF 2: DB 45 H, 66 H�
4、 定义字指令DW�(Define Word) 指令格式: [标号: ] DW 例: ORG 1500 H START: MOV A, #20 H …. ORG 1520 H TAB: DW 1234 H, 8 AH, 10 16 位数据表�
例1: MOVC A, @A+PC ; PC PC 0100 MOV A, #02 H 0102 MOVC A, @A+PC 0103 NOP 0104 NOP 0105 DB 32 H (PC )+1 结果把0105 H单元的内容 32 H送到A中。 只能存放在以PC为当前值为起始地址的256 B范围内 例2:MOVC A, @A+DPTR 可以给DPTR赋任意值, 可达整个 64 KB的ROM空间
3. 以直接地址为目的操作数的指令 MOV direct, A MOV direct, Rn MOV direct, @Ri ;direct← (A) ; direct← (Rn) , n=0~7 ; direct← (( Ri ) ) , i=0, 1 MOV direct 1, direct 2 ;direct 1← (direct 2) MOV direct, #data ;direct← #data
5. 十六位数据传送 MOV DPTR, #data 16; DPTR← #data 16 DPTR----数据指针,为SFR中(DPH)、(DPL) MOV DPTR, #2010 H 相当于:MOV DPH, #20 H MOV DPL, #10 H
6. 查表指令 MOVC A , @A+ DPTR A, @A+PC ; A ((A)+(PC)) 指向下 一条指令的地址。 MOVC A, @A+DPTR; A ←((A)+(DPTR)) 例: (DPTR)=0300 H, (A)= 02 H ROM中 (0302 H)=55 H 执行: MOVC A, @A+DPTR 结果:(A)=55 H
7. A与片外RAM或I/O传送指令 MOVX A, @DPTR ; A← ((DPTR)) 地址范围 64 K MOVX A, @Ri ; A← ((Ri)) 地址范围 0~ 256 MOVX @DPTR, A ; (DPTR) ←(A) MOVX @Ri , A ; (Ri) ←(A)
3. 加 1指令 INC INC INC A ;A←(A)+1 Rn ;Rn←( Rn)+1 direct ;direct←(direct)+1 @Ri ;((Ri))←((Ri))+1 DPTR ;DPTR←(DPTR)+1 对标志位不产生影响 若: (A)= 0 FFH , (Cy)=0 执行: INC A 结果:(A)= 00 H , (Cy)=0
7. 乘法指令(Multiplication) MUL AB ; BA (A)×(B) 低8位→A 高 8位→B
2. 移位指令 (1) 左循环指令 (Rotate Accumulator Left) RL A Cy a 7 ← a 0 例 (A)= 6 CH = 0110 1100 B RL A (A)=1101 1000 B=0 D 8 H
(2)带进位左循环指令(Rotate Accumulator Left through Carry flag) RLC A Cy a 7 ← a 0 例(A)= 6 CH = 0110 1100 B, (Cy) =1 RLC A (A)=1101 1001 B=0 D 9 H
(3) 右循环指令(Rotate Accumulator Right) RR A Cy a 7 a 0 例(A)= 6 CH = 0110 1100 B RR A (A)=0011 0110 B=36 H
(4)带进位右循环指令(Rotate A Right with C) RRC A Cy a 7 a 0 例(A)= 6 CH = 0110 1100 B, (Cy) =1 RRC A (A)=1011 0110 B=0 B 6 H
3. 逻辑与指令(按位操作) ANL A, Rn ANL A, direct ANL A, #data ANL A, @Ri ANL direct, A ANL direct, #data ∧-- “与” , “有0即 0,全 1为 1” 0000 0111 ∧)1111 1101 0000 0101 B = 05 H
4. 逻辑或指令 ORL A, Rn ORL A, direct ORL A, #data ORL A, @Ri ORL direct, A ORL direct, #data ∨-- “或” , “有1即 1,全 0为 0” 0000 0110 ∨ ) 0110 1101 0110 1111 B = 6 FH
5. 逻辑异或指令 XRL A, Rn XRL A, direct XRL A, #data XRL A, @Ri XRL direct, A XRL direct, #data -- “异或” , “相异为 1,相同为 0” 0000 0110 ) 0110 1101 0110 1011 B = 6 BH
例: P 1原值 00001111 B CLR C MOV P 1. 0 , C MOV P 1. 2, C SETB C MOV P 1. 4 , C MOV P 1. 6 , C P 1原值 00001111 B=0 FH 现为 01011010 B=5 AH
(3) 减 1 不为 0转移指令 有如下两条: DJNZ Rn, rel ; (Rn) ← (Rn)-1 若(Rn)=0, 则(PC) ← (PC)+2 否则, (PC) ← (PC)+2+rel DJNZ direct, rel ; (direct)← (direct)-1 若(direct)=0, 则(PC) ← (PC)+3 否则, (PC) ← (PC)+3+rel
例:设计一个延时 1 ms程序,设晶振=6 MHZ DELAY: MOV R 2, #250 DEL 1:DJNZ R 2, DEL 1
- Slides: 80