2024年4月27日发(作者:)

指令中常用符号说明

Rn

Ri

Direct

#data

#data16

Add16

Addr11

Rel

Bit

@

( )

(( ))

当前寄存器区的8个工作寄存器R0~R7(n=0~7)

当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)

8位内部数据寄存器单元的地址及特殊功能寄存器的地址

表示8位常数(立即数)

表示16位常数

表示16位地址

表示11位地址

8位代符号的地址偏移量

表示位地址

间接寻址寄存器或基址寄存器的前缀

表示括号中单元的内容

表示间接寻址的内容

指令系统

 数据传送指令(8个助记符)

助记符

MOV

Move 移动

中英文注释

MOV A , Rn ;Rn→A,寄存器Rn的内容送到累加器A

MOV A , Direct ;(direct)→A,直接地址的内容送A

MOV A ,@ Ri ;(Ri)→A,RI间址的内容送A

MOV A , #data ;data→A,立即数送A

MOV Rn , A ;A→Rn,累加器A的内容送寄存器Rn

MOV Rn ,direct ;(direct)→Rn,直接地址中的内容送Rn

MOV Rn , #data ;data→Rn,立即数送Rn

MOV direct , A ;A→(direct),累加器A中的内容送直接地址中

MOV direct , Rn ;(Rn)→direct,寄存器的内容送到直接地址

MOV direct , direct ;(direct)→direct,直接地址的内容送到直接地址

MOV direct , @Ri ;((Ri))→direct,间址的内容送到直接地址

MOV direct , #data ;8位立即数送到直接地址中

MOV @Ri , A ;(A)→@Ri,累加器的内容送到间址中

MOV @Ri , direct ;direct→@Ri,直接地址中的内容送到间址中

MOV @Ri , #data ; data→@Ri ,8位立即数送到间址中

MOV DPTR , #data16 ;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8

位送入DPL中(单片机中唯一一条16位数据传送指令)

(MOV类指令共16条)

第1页 共6页

MOVC

Move Cod 查表指令

;PC+1→PC,(A+PC)→A

;(A+DPTR) →A

(MOVC类指令共两条)

;(DPTR)→A,DPTR间址单元内容送A

;A→(DPTR),A中内容送入DPTR间址单元

;(Ri)→A,Ri间址单元内容送A

;A→(Ri),A中内容送Ri间址单元

(MOVX类指令4条)

MOVC A , @A+PC

MOVC A , @A+DPTR

MOVX

Move External 与外部数据寄存区传送数据

MOVX A , @DPTR

MOVX @DPTR , A

MOVX A , @Ri

MOVX @Ri , A

XCH

Exchange 交换指令

XCH A , Rn ;RnA , Rn的内容与A的内容交换

XCH A , Direct ; Direct A , 直接地址的内容与A的内容交换

XCH A , @Ri ;(Ri)A , 间址的内容与A的内容交换

XCHD

Exchange Decimal十进制交换

XCHD A , @Ri ;(Ri.3~Ri.0) A.3~A.0,间址内容低四位与A中内容低四位交换

SWAP

SWAP A

PUSH

POP

Swap 交换

;A.3~A.0 A.7~A.4 , A中低四位与高四位内容交换

Push 入栈

PUSH direct ;SP+1SP , (direct)(SP)

;直接地址内容压入堆栈顶

Pop 出栈

POP direct ;(SP)(direct) , SP-1SP

;堆栈内容弹出到直接地址

 算术运算类指令(7个助记符)

ADD

Add 加法运算

ADD A , Rn ;A + RnA , A与Rn的内容相加,结果送到A中

ADD A , direct ;(direct)+AA,A与直接地址的内容相加,结果送到A中

ADD A , @Ri ;((Ri))+AA, A与间址中的内容相加,结果送到A中

ADD A , #data ;data+AA,A与立即数相加,和送入A

ADDC

ADD with Carry 带进位加法

ADDC A , Rn

ADDC A , direct

ADDC A , @Ri

ADDC A , #data

SUBB

SUBB A , Rn

SUBB A , direct

SUBB A , @Ri

SUBB A , #data

MUL

MUL AB

;A + Rn+CYA , A与Rn的内容、进位状态相加,结果送到A中

;(direct)+A+CYA,A与直接地址的内容、进位状态相加,结果送到A中

;((Ri))+A+CYA, A与间址中的内容、进位状态相加,结果送到A中

;data+A+CYA,A与立即数、进位状态相加,和送入A

;A-Rn-CYA,A减寄存器Rn的内容及进位标志,结果送A

; A-(direct)-CYA,A直接地址的内容及进位标志,结果送A

; A-((Ri))-CYA,A间址的内容及进位标志,结果送A

; A-data-CYA,A立即数及进位标志,结果送A

Subbtract with Borrow 带进位减法

Multiply 乘法指令

;A x BB和A,结果16位,高8位存入B,低8位存入A

;若结果大于FFH,则将溢出标志OV置1

第2页 共6页

DIV

DIV AB

INC

INC A

INC Rn

INC direct

INC @Ri

INC DPTR

DEC

INC A

INC Rn

INC direct

INC @Ri

DA

DA A

ANL

Divide 除法指令

;A÷B 商→A,余数→B

;若除数为0,结果不确定,则将溢出标志OV置1

Increment 加1指令

;A+1A,A加1,结果放在A

; Rn +1 Rn, Rn加1,结果放在Rn

; (direct) +1 direct,直接地址的内容加1,结果放在该地址中

;((Ri))+1( Ri),间址中的内容加1,结果放在该间址中

;(DPTR)+1DPTR,数据指针内容加1,结果放在数据指针寄存器(DPTR)中

Decrement 减1指令

;A-1A,A减1,结果放在A

; Rn -1 Rn, Rn减1,结果放在Rn

; (direct) -1 direct,直接地址的内容减1,结果放在该地址中

;((Ri))-1( Ri),间址中的内容减1,结果放在该间址中

Decimal Adjust 十进制加法调整指令

;在加法指令后,把A中二进制码自动调整为BCD码

;DA A只能更跟在ADD或ADDC加法指令后,不适用于减法

 逻辑运算指令(9个助记符)

Logical And 逻辑与运算

ANL A , Rn ; (A)与(Rn)→A, A的内容与Rn中的内容相与,结果放在A中

ANL A , direct ; (A)与(direct)→A, A的内容与直接地址中的内容相与,结果放在A中

ANL A , @Ri ; (A)与((Ri))→A, A的内容与间址的内容相与,结果放在A中

ANL A , #data ; (A)与(data)→A, A的内容与立即数相与,结果放在A中

ANL direct , A ; (direct)与(A)→direct, 直接地址中的内容相与A的内容相与,结果放在直

接地址中

ANL direct , #data ;(direct)与#data→direct, 直接地址中的内容相与立即数相与,结果放在直

接地址中

ORL

Logical OR 逻辑或运算

ORL A , Rn ; (A) 或(Rn)→A, A的内容与Rn中的内容相或,结果放在A中

ORL A , direct ; (A) 或(direct)→A, A的内容与直接地址中的内容相或,结果放在A中

ORL A , @Ri ; (A) 或((Ri))→A, A的内容与间址的内容相或,结果放在A中

ORL A , #data ; (A) 或(data)→A, A的内容与立即数相或,结果放在A中

ORL direct , A ; (direct) 或A)→direct, 直接地址中的内容相与A的内容相或,结果放在

直接地址中

ORL direct , #data ;(direct) 或#data→direct, 直接地址中的内容相与立即数相或,结果放在

直接地址中

XRL

Logical exclusive or 逻辑异或运算

ORL A , Rn

ORL A , direct

ORL A , @Ri

ORL A , #data

ORL direct , A

ORL direct , #data

; (A) 异或(Rn)→A, A的内容与Rn中的内容相异或,结果放在A中

;

(A) 异或(direct)→A, A的内容与直接地址中的内容相异或,结果放在A中

; (A) 异或((Ri))→A, A的内容与间址的内容相异或,结果放在A中

; (A) 异或(data)→A, A的内容与立即数相异或,结果放在A中

; (direct) 或A)→direct, 直接地址中的内容相与A的内容相异或,结果放

在直接地址中

;

(direct) 异或#data→direct, 直接地址中的内容相与立即数相异或,结果放在直接地址

第3页 共6页

RL

RL A

RR

RR A

RLC

RLC A

RRC

RRC A

CPL

CPL A

CLR

CLR A

LJMP

Rotate Left 循环左移指令

;每执行一次,A中的内容左移一位

Rotate Right 循环右移指令

;每执行一次,A中的内容右移一位

Rotate Left with the Carry flag 带进位循环左移指令

;每执行一次,CY和A中的内容左移一位

Rotate Right with the Carry flag带进位循环又移指令

;每执行一次,CY和A中的内容右移一位

注意:循环移位指令只能对A中的内容进行移位操作

Complement 取反指令(求补指令)

;累加器内容按位取反,0变1,1变0

Clear 清零指令

;累加器清零(A各位全变为0)

 控制转移指令(9个助记符)

Long Jump 长跳转指令

LJMP add16 ;add16PC,无条件跳转到add16地址,可在64KB范围内转移

AJMP

Absolute Jump 绝对跳转指令

AJMP add11 ;add11PC,无条件跳转到add11地址,可在2KB范围内转移

SJMP

Short Jump 短跳转指令

SJMP rel

JMP

;PC+2+relPC,rel是偏移量,8位有符号数(-127~127),可向前后跳转

±128个地址单元

;A+DPTRPC,属于散转指令,无条件转向A与DPTR内容相加后形成的新

地址

Jump 跳转指令

JMP @A+DPTR

JZ

JZ rel

JNZ

JNZ rel

CJNE

Jump if acc is Zero累加器为零转移

;A=0转向PC+2+relPC,A≠0,顺序执行

Jump if acc is Not Zero累加器不为零转移

;A≠0转向PC+2+relPC,A=0,顺序执行

Compare and Jump if Not Equal比较不相等则转移

CJNE A , direct , rel ;A≠(direct)转向PC+3+relPC,否则顺序执行(PC+3 PC)

;(A)>(direct)CY=0, (A)<(direct)CY=1

CJNE A , #data , rel ;A≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC)

;(A)>(data)CY=0,( A)<(data)CY=1

CJNE Rn , #data , rel ; Rn≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC)

; (Rn) >(data)CY=0, (Rn) <(data)CY=1

CJNE @Ri , #data , rel ;((Ri))≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC)

; ((Ri))>(data)CY=0, ((Ri)) <(data)CY=1

DJNE

Decrement and Jump if Not Zero 减1不为0则转移

DJNE Rn , rel ;Rn-1Rn, Rn≠0转向PC+2+relPC,否则顺序执行(PC+2PC)

DJNZ direct , rel ;(direct-1)direct, direct≠0转向PC+2+relPC,否则顺序执行

(PC+2PC)

LCALL

Long Call 长条用指令

LCALL addr16

;调用程序入口地址为addr16的之程序

第4页 共6页

ACALL

RET

RET

RETI

RETI

NOP

NOP

MOV

MOV C , bit

MOV bit , C

CLR

CLR C

CLR bit

CPL

CPL C

CPL bit

SETB

SETB C

SETB bit

ANL

Absolute Call短调用

;调用程序入口地址为addr11的之程序

Return

;放在子程序最后,使程序准确返回到主程序断点处

Return from Interrupt

;中断返回指令,能清楚优先级状态

;空操作,产生一个机器周期延时

 位操作指令

Move 数据传送指令

;(bit)→C,寻址位的状态送入C

;(C)→bit,C的转态送入地址中

No Operation 空操作指令

ACALL addr11

Clear 清零指令

;0C,清零累加器

;清零直接寻址位

Complement 取反指令(求补指令)

;c取反

;直接寻址位取反

Set Bit 置位

;C置1

;直接寻址位置1

And Logical 与逻辑运算

ANL C , bit ;直接寻址位与C相与,结果放在C

ANL C , /bit ; 直接寻址位与非C相与,结果放在C

ORL

OR Logical 或逻辑运算

ORL C , bit

ORL C , /bit

JC

JC rel

JNC

;直接寻址位与C相或,结果放在C

; 直接寻址位与非C相或,结果放在C

Jump if Carry is set 进位位为1则转移

;C=1,转向PC+2+rel→PC,否则顺序执行PC+2→PC

Jump if Carry is Not set 进位位为不为1则转移

;C=0,转向PC+2+rel→PC,否则顺序执行PC+2→PC

Jump if Bit is set 进位位为1则转移

;(bit)=1,转向PC+3+rel→PC,否则顺序执行PC+3→PC

Jump if Bit is Not set 进位位为1则转移

JNC rel

JB

JB bit , rel

JNB

JNB bit , rel ;(bit)=0,转向PC+3+rel→PC,否则顺序执行PC+3→PC

JBC

Jump if Bit is set and Clear bit指定位等于1转移并清该位

JBC bit , rel

ORG

; (bit)=1,转向PC+3+rel→PC,同时0→bit否则顺序执行PC+3→PC

伪指令

Origin 代码起始地址指令

ORG 0000H

MOV A , #0010H ;这条指令从0000H这个地址单元开始写起

END

End 汇编程序结束指令

END

;汇编指令结束

第5页 共6页

DB

字节定义伪指令

;则(1000H)=01H,(1001H)=02H

;则(1100H)=30H,30H是0的ASCII码,(1101H)=31H,31H是1的ASCII码

ORG 1000H

DB 01H , 02H

ORG 1100H

DB ‘01’

DW

双字节定义伪指令

ORG 2000H

DW 2546H , 0178H ; (2000H)=25H, (2001H)=46H, (2002H)=01H, (2003H)=78H,

EQU

X EQU n

BIT

y BIT b

MACRO

数据赋值伪指令

;将n的值赋给x

;y是用户定义标号,b为0或1

位数据赋值伪指令

宏指令

宏指令名 MACRO 形式参数

······

代码段

······

ENDM

;宏指令定义结束

寻址方式及相关的存储空间

寻址方式

寄存器寻址

寻址范围

R0~R7

A 、B、C(CY)、AB(双字节)、DPTR(双字节)、PC(双字节)

直接寻址 内部RAM低128字节

特殊功能寄存器

内部RAM位寻区的128个位

特殊功能寄存器中可寻址的位

寄存器间接寻址 内部数据存储器RAM【@R0,@R1,@SP(仅PUSH,POP)】

内部数据存储器单元的低4位(@R0,@R1)

外部RAM或I/O口(@R0,@R1,@DPTR)

立即寻址

基寄存器加变址

寄存器间接寻址

第6页 共6页

程序存储器(常数)

程序存储器(@A+PC,@A+DPTR)