[计算机]8051汇编语言指令速查表
h h 8051系列单片机汇编语言指令速查表
编号 指令名称 指令助记符 指令说明 数据传送类指令 1 一般传送 MOV A, #data 将立即数#data送累加器A
2 MOV direct, #data 将立即数#data送片内RAM direct地址单元内 3 Mov Rn, #data 将立即数#data送寄存器Rn
4 Mov @Ri, #data 寄存器Ri内为RAM地址,将立即数#data送该地址单元内
5 Mov direct2, direct1 将direct1地址单元的数据送 direct2地址单元内 6 Mov direct, rn 将Rn的数据送 direct地址单元内 7 Mov Rn, direct 将direct地址单元内的数据送Rn寄存器
8 Mov direct, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据送direct地址单元内
9 Mov @Ri, direct 寄存器Ri内为RAM地址,将direct地址单元内的数据送该地址单元内 10 Mov A, Rn 将寄存器Rn内的数据送累加器A 11 Mov Rn, A 将累加器A内的数据送寄存器Rn 12 Mov A, direct 将direct地址单元内的数据送累加器A 13 Mov direct, A 将累加器A内的数据送direct地址单元内
14 Mov A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据送累加器A
15 Mov @Ri , A 寄存器Ri内为RAM地址,将累加器A的数据送该地址单元内 16 目的地址传送 Mov DPTR, #data16 将16位立即数送数据指针DPTR寄存器 17 字节交换 SWAP A 累加器A高低4位数据交换 18 XCH A, Rn 将累加器A数据和寄存器Rn内的数据交换
19 XCH A, direct 将累加器A数据和direct地址单元内的数据交换
20 XCH A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据与累加器A的数据交换
21 XCHD A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据低4位与的低4位交换
22 与外部RAM传送 MOVX @DPTR, A 将累加器A的数据送数据指针DPTR寄存器所指外部RAM地址单元内
23 MOVX A , @DPTR 将DPTR寄存器所指外部RAM地址单元内的数据送累加器A h h 24 MOVX A, @Ri 寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A
25 MOVX @Ri, A 寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A
26 与ROM传送 MOVC A, @A+DPTR A+DPTR构成ROM地址,将该地址内的数据送累加器A内
27 MOVC A, @A+PC A+PC构成ROM地址,将该地址内的数据送累加器A内
28 栈操作 PUSH direct 堆栈指针SP自加1后,将direct地址单元的数据压进堆栈,
29 POP direct 堆栈的数据送direct地址单元中,后堆栈指针减1, 算术运算指令
30 加法指令 ADD A, Rn 将寄存器Rn与累加器A的数据相加后,结果保存到累加器A
31 ADD A, direct 将direct地址单元内的数据与累加器A的数据相加后结果保存到累加器A
32 ADD A, @Ri 寄存器Ri内位地址,将该地址单元内的数据与累加器A的数据相加后结果保存到累加器A
33 ADD A, #data 将立即数与累加器A的数据相加后结果保存到累加器A
34 带进位加法 ADDC A, Rn 将寄存器Rn与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A
35 ADDC A, direct 将direct地址单元内的数据与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A
36 ADDC A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A
37 ADDC A, #data 将立即数与累加器A的数据相加,再加上进位标志内的值后结果保存到累加器A
38 带借位减法 SUBB A, Rn 将与累加器A的数据减去寄存器Rn的数据,再减去进位标志内的值,结果保存到累加器A
39 SUBB A, direct 将与累加器A的数据减去direct地址单元内的数据,再减去进位标志内的值,结果保存到累加器A
40 SUBB A, @Ri 寄存器Ri内为RAM地址,将累加器A的数据减去该地址单元内的数据,再减去进位标志内的值后,结果保存到累加器A
41 SUBB A, #data 将累加器A的数据减去立即数,再减去进位标志内的值后,结果保存到累加器A h h 42 加1指令 INC A 累加器A的值自加1 43 INC Rn 寄存器Rn的值自加1 44 INC direct direct地址单元内值自加1
45 INC @Ri 寄存器Ri内为RAM地址,该地址单元内的值自加1 46 INC DPTR 数据指针寄存器DPTR内的值自加1 47 减1指令 DEC A 累加器A的值自减1 48 DEC Rn 寄存器Rn的值自减1 49 DEC direct direct地址单元内的值自减1
50 DEC @Ri 寄存器Ri内为RAM地址,该地址单元内的值自减1
51 乘法 MUL AB 累加器A与寄存器B内的值相乘,乘积的高8位保存在B寄存器,低8位保存在累加器A中
52 除法 DIV AB 累加器A的值除以寄存器B的值,商保存在累加器A中,余数保存在B寄存器
53 二-十进制调整 DA A 对累加器A的结果进行十进制调整 逻辑运算指令 54 逻辑与 ANL A, Rn 将累加器A的值和寄存器Rn的值进行与操作,结果保存到累加器A中
55 ANL A, direct 将累加器A的值和direct地址单元内的值进行与操作,结果保存到累加器A中
56 ANL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行与操作,结果保存到累加器A中
57 ANL A, #data 将累加器A的值和立即数进行与操作,结果保存到累加器A中
58 ANL direct, A 将累加器A的值和direct地址单元内的值进行与操作,结果保存到direct地址单元内
59 ANL direct, #data 将立即数和direct地址单元内的值进行与操作,结果保存到direct地址单元内
60 逻辑或 ORL A, Rn 将累加器A的值和寄存器Rn的值进行或操作,结果保存到累加器A中
61 ORL A, direct 将累加器A的值和direct地址单元内的值进行或操作,结果保存到累加器A中
62 ORL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行或操作,结果保存到累加器A中 h h 63 ORL A, #data 将累加器A的值和立即数进行或操作,结果保存到累加器A中
64 ORL direct, A 将累加器A的值和direct地址单元内的值进行或操作,结果保存到direct地址单元内
65 ORL direct, #data 将立即数和direct地址单元内的值进行或操作,结果保存到direct地址单元内
66 逻辑异或 XRL A, Rn 将累加器A的值和寄存器Rn的值进行异或操作,结果保存到累加器A中
67 XRL A, direct 将累加器A的值和direct地址单元内的值进行异或操作,结果保存到累加器A中
68 XRL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行异或操作,结果保存到累加器A中
69 XRL A, #data 将累加器A的值和立即数进行异或操作,结果保存到累加器A中
70 XRL direct, A 将累加器A的值和direct地址单元内的值进行异或操作,结果保存到direct地址单元内
71 XRL direct, #data 将立即数和direct地址单元内的值进行异或操作,结果保存到direct地址单元内 72 按位取反 CPL A 累加器A的值按位取反 73 累加器清零 CLR A 累加器A清0 74 逻辑右移 RR A 累加器A的值循环右移1位 75 逻辑左移 RL A 累加器A的值循环左移1位 76 带进位右移 RRC A 累加器A的值带进位循环右移1位 77 带进位左移 RLC A 累加器A的值带进位循环左移1位 控制转移指令
78 无条件转移 SJMP rel rel为地址偏移量,PC加2后的地址加上rel作为目标地址,程序跳到目标地址继续运行
79 AJMP addr11(a10- a0) addr11为11位地址,PC加2后的地址高5位与指令中的低11位地址构成目标地址,程序跳到目标地址继续运行
80 LJMP addr16 将addr16的16位地址送程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序
81 JMP @A+DPTR 目标地址的基地址放在DPTR中,目标地址对基地址的偏移量放在累加器A中,它们相加构成目标地址
82 条件转移 JZ rel If(累加器A=0)则PC加2再加上rel作为目标地址
80c51汇编语言指令格式
80C51汇编语言指令格式================本篇文档将详细介绍80C51汇编语言的指令格式,包括操作码、操作数、注释以及具体的汇编指令。
最后,将以将十六进制数10h存入累加器A为例,进行实际应用说明。
操作码---操作码是汇编指令的核心部分,它表示了指令进行的操作。
具体的操作码需要根据具体的指令来确定。
### 1.1 操作码的含义操作码指示了指令要执行的操作。
例如,某些操作码可能表示将一个值加载到寄存器中,或者对两个值进行加法运算等。
### 1.2 操作码的格式操作码通常是一个或者两个字节长,有时也会更长。
每个字节都有特定的含义,根据不同的指令,每个字节可能代表不同的操作。
操作数---操作数是汇编指令中指定要执行操作的数据。
它们可以是常量、寄存器、内存地址等。
### 2.1 操作数的定义操作数可以是常量、寄存器或内存地址等。
寄存器是CPU内部的存储单元,用于存储数据或计算结果。
内存地址则是用于访问存储在内存中的数据。
### 2.2 操作数的格式操作数的格式会因具体的指令而异。
例如,某些指令可能要求一个立即数作为操作数,而其他指令可能要求一个寄存器和一个内存地址作为操作数。
注释---注释是用于解释和说明汇编指令的文本。
它们不会影响程序的执行,但可以帮助理解和维护代码。
### 3.1 注释的作用注释的主要作用是解释代码的功能、行为和意图,以帮助其他开发者理解代码。
好的注释还可以提供代码的维护性和可读性。
### 3.2 注释的格式在80C51汇编语言中,注释通常以分号(`;`)开头。
在分号后面的文本都被视为注释。
例如:`; 这是一个注释`。
80C51汇编指令---------80C51是一款经典的8位单片机,其汇编指令集包括了多种基本的指令,如数据传输、算术运算、逻辑运算等。
### 4.1 指令的分类80C51的指令集可以根据功能分为以下几类:数据传输指令、算术运算指令、逻辑运算指令、控制指令等。
80C51单片机指令集
80C51指令系统数据传送指令助记符指令功能字节数周期数对标志位影响P OV AC CYMOV A , #data A←DATA 8位立即数送A 2 1 √×××MOV direct ,#data data←Direct 8立即数送直接寻址单元 3 2 ××××MOV @Ri ,#data (Ri)←Data 8位立即数送Ri间接寻址单元 2 1 ××××MOV Rn ,#data Rn←Data 8位立即数送寄存器 2 1 ××××MOV DPTR ,#data16 DPTR←Data16 16位立即数送DPTR高8位送DPH,低8位DPL3 2 ××××MOV direct2,direct1 Direct2←(direct1) 直接寻址单元送直接寻址单元 3 2 ××××MOV direct ,@Ri direct←((Ri)) 间接寻址数据送直接单元 2 2 ××××MOV direct ,Rn direct←(Rn) 寄存器内容送直接寻址单元 2 2 ××××MOV @Ri ,direct (Ri)←(direct) 直接寻址数据送Ri间接寻址单元 2 2 ××××MOV Rn ,direct Rn←(direct) 直接寻址数据送寄存器 2 2 ××××MOV A ,direct A←(direct) 直接寻址数据送累加器 2 1 ××××MOV A ,@Ri A←((Ri)) Ri间接寻址数据送累加器 1 1 ××××MOV A ,Rn A←(Rn) 寄存器类容送累加器 1 1 ××××MOV direct ,A direct←(A) 累加器内容送直接寻址单元 2 1 ××××MOV @Ri ,A (Ri)←(A) 累加器内容送Ri间接寻址单元 1 1 ××××MOV Rn ,A Rn←(A) 累加器内容送寄存器 1 1 ××××MOVX A ,@Ri A←((Ri)) Ri间接寻址的外部RAM单元读 1 2 ××××MOVX @Ri ,A (Ri)←(A) Ri间接寻址的外部RAM单元写 1 2 ××××MOVX A ,@DPTR A←((DPTR)) DPTR间接寻址的外部RAM单元读 1 2 ××××MOVX @DPTR ,A (DPTR)←(A) DPTR间接寻址的外部RAM单元写 1 2 ××××X代表外部,外部数据存储器读/写只能通过累加器A使用间接寻址方式进行,间接寄存器可是Ri或DPTR MOVC A ,@A+DPTR A←((A)+(DPTR)) 程序存储器读 1 2 √×××MOVC A ,@A+PC A←((A)+(PC)) 程序存储器读 1 2 √×××程序存储器只能读,不能写,包括内部存储器及外部存储器,通过累加器A进行XCH A ,Rn (A)⇔(Rn) 寄存器寻址字节交换 1 1 √×××XCH A ,direct (direct) ⇔(A) 直接寻址字节交换 2 1 √×××XCH A ,@Ri ((Ri)) ⇔(A) Ri间接寻址字节交换 1 1 √×××XCHD A ,@Ri ((Ri))3~0⇔(A)3~0 Ri间接寻址低半字节交换 1 1 √×××SWAP A (A)3~0⇔(A)7~4 累加器内容高低半字节交换 1 1 ××××PUSH direct SP←(SP)+1 , (SP)←(direct) 进栈 2 2 ××××POP direct direct←((SP)) , SP←(SP)-1 出栈 2 2 ××××进出栈只能写为“PUSH ACC”和“POP ACC”,不能用“A”算术运算类指令算术运算指令都按8位二进制无符号数执行助记符指令功能字节数周期数对标志位影响P OV AC CYADD A ,#data A←(A)+data 立即数加法 2 1 √√√√ADD A ,direct A←(A)+(direct) 直接寻址加法 2 1 √√√√ADD A ,@Ri A←(A)+((Ri)) 间接寻址加法 1 1 √√√√ADD A ,Rn A←(A)+(Rn) 寄存器寻址加法 1 1 √√√√ADDC A ,#data A←(A)+data+(CY) 立即数带进位加法 1 1 √√√√ADDC A ,direct A←(A)+(direct)+(CY) 直接寻址带进位加法 2 1 √√√√ADDC A ,@Ri A←((Ri))+(A)+(CY) 间接寻址带进位加法 1 1 √√√√ADDC A ,Rn A←(Rn)+(A)+(CY) 寄存器寻址带进位加法 1 1 √√√√SUBB A ,#data A←(A)-data-(CY) 立即数带借位减法 2 1 √√√√SUBB A ,direct A←(A)-(direct)-(CY) 直接寻址带借位减法 2 1 √√√√SUBB A ,@Ri A←(A)-((Ri))-(CY) 间接寻址带借位减法 1 1 √√√√SUBB A ,Rn A←(A)-(Rn)-(CY) 寄存器寻址带借位减法 1 1 √√√√INC A A←(A)+1 累加器加1 1 1 √√××INC direct direct←(direct)+1 直接寻址单元加1 2 1 ××××INC @Ri (Ri) ←((Ri))+1 间接寻址单元加1 1 1 ××××INC Rn Rn←(Rn)+1 寄存器加1 1 1 ××××INC DPTR DPTR←(DPTR)+1 16位数据指针加1 1 2 ××××DEC A A←(A)-1 累加器减1 1 1 √×××DEC direct direct←(direct)-1 直接寻址单元减1 2 1 ××××DEC @Ri (Ri) ←((Ri))-1 间接寻址单元减1 1 1 ××××DEC Rn Rn←(Rn)-1 寄存器减1 1 1 ××××MUL AB AB←(A)*(B) 乘法 1 4 √√×√乘法:CY总是被清0,OV与乘积有关。
80c51汇编语言指令格式
80c51汇编语言指令格式80C51汇编语言是一种低级编程语言,主要用于对8051系列单片机进行编程。
在80C51汇编语言中,指令格式基本上由操作码、操作数和注释组成。
下面将详细介绍80C51汇编指令的格式。
1.操作码(Opcode):操作码是指令的基本操作,决定了执行指令时处理器应该进行的具体操作。
80C51汇编指令的操作码包括一字节,可以是直接指令,也可以是扩展指令。
-直接指令:直接在指令中给出操作数,可以是寄存器、立即数、或者存储器地址。
指令的操作码如MOV、ADD等。
-扩展指令:扩展指令需要使用扩展二字节的形式,扩展二字节包括操作码和相关的操作数。
扩展指令的操作码如JMP、CALL等。
2.操作数(Operand):操作数位于指令的操作码之后,在指令中给出具体的数据或者数据的地址。
操作数的格式可以是直接给出的数据,也可以是通过地址访问的数据。
-立即数(Immediate value):直接给出的数据,一般用来作为常数或者立即加载到寄存器中的数据。
-寄存器(Register):指令操作数为特定的寄存器,分为通用寄存器和特殊功能寄存器两种。
-存储器(Memory):通过给出地址的方式访问存储器中的数据,可以是位于内部RAM或外部存储器中的数据。
3.注释(Comments):注释是对指令的解释和说明,用于增加代码的可读性。
在80C51汇编语言中,注释以分号(;)开头,并紧跟在指令或数据的后面。
下面是一些80C51汇编指令的例子以加深理解:1. MOV指令的格式:MOV A, #10 ;将立即数10加载到累加器A中MOV R1, R0 ;将R0的值复制到R1中2. ADD指令的格式:ADD A, R1 ;将累加器A与R1中的值相加,并将结果存回A中ADD A, #5 ;将累加器A与立即数5相加,并将结果存回A中3. JMP指令的格式:JMP 1000 ;无条件跳转到内存地址为1000的位置继续执行指令4. CALL指令的格式:CALL 2000 ;调用一个子程序,跳转到内存地址为2000的位置执行指令,并在子程序执行完成后返回到指令的下一条指令继续执行5. SJMP指令的格式:SJMP label ;有条件跳转指令,根据条件跳转到指定标签处执行指令6. RET指令的格式:RET ;用于从子程序返回主程序,并继续执行主程序的下一条指令总结:80C51汇编语言指令的格式主要由操作码、操作数和注释组成。
8051汇编语言概述一 ) 指令分类 42个助记符,33种功能,共...
3-3 数据传送类指令
数据传送操作是指把数据从源地址传送到目的地址, 源地址内容不变。共29条指令,使用8种助记符: 片内数据存储器传送指令MOV;
片外数据存储器传送指令MOVX;
程序存储器传送指令MOVC; 累加器交换指令 XCH、XCHD、SWAP; 堆栈操作指令 PUSH、 POP; 3-5
3-3-4 累加器交换指令
1) 字节交换指令XCH(3 条)
助记符格式
XCH A, Rn
机器码
11001rrrB
相应操作
A Rn
指令说明 机器周期
n=0~7 1 1
XCH A, direct 11000101B A (direct) direct
XCH A, @Ri
1100011iB data
MOV R2,#20h ;设臵传送次数 MOV DPTR,#TAB ;设臵数据源起始地址 MOV R0,#30H ;设臵目标起始地址 LOOP: MOV A, #00h ;设臵变址值 MOVC A, @A+DPTR ;读外部数据存储器 MOV @R0, A ;将数据传送到内部RAM INC R0 ;目标地址+1 INC DPTR ;源地址+1 DJNZ R2,LOOP ;传送个数判断
五)汇编语言的伪指令
伪指令不是真正的指令,它无对应的机器码,在汇编时不 产生目标程序,只是用来对汇编过程进行某种控制。 (p178)
1)ORG nnnnh ;设臵起始地址 例如: ORG 0030h mov a,#00h …… 2)END 汇编结束伪指令 3)EQU (data、bit)等值伪指令 例如:SDA EQU P1.0 ; sda bit P1.0 addr1 EQU 1000h ; addr1 data 1000h D5 EQU 5fh ; D5 data 5fh
51单片机汇编指令手册
B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7
A, R0 A, R1 A, R2 A, R3 A, R4 A, R5 A, R6 A, R7 @DPTR, A addr11 @R0, A @R1, A A direct, A @R0, A @R1, A R0, A R1, A R2, A R3, A R4, A R5, A R6, A R7, A
2 2 1 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 3 1 1 2 2 2 2 2 2 2 2 1 2 1 1 1 2 1 1
ACALL CPL CPL CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE PUSH AJMP CLR CLR SWAP XCH XCH XCH XCH XCH XCH XCH XCH XCH XCH XCH POP ACALL SETB SETB DA DJNZ XCHD XCHD DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ MOVX AJMP MOVX MOVX CLR MOV MOV MOV
A, R0 A, R1 A, R2 A, R3 A, R4 A, R5 A, R6 A, R7 offset addr11 C, bit @A+DPTR A, #immed direct, #immed @R0, #immed @R1, #immed R0, #immed R1, #immed R2, #immed R3, #immed R4, #immed R5, #immed R6, #immed R7, #immed
51单片机汇编语言指令集
说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存 器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器
说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位 (C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整, 若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或 (C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 25.ANL A,Rn 26.ANL A,direct 27.ANL A,@Ri 28.ANL A,#data 29.ANL direct,A 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器 2 1 将累加器的值与常数做AND的逻辑判断,结果存回累加器 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址
2 1 将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器 1 1 将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器 2 1 将累加器的值与常数作XOR的逻辑判断,结果存回累加器 2 1 将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址
42.XRL direct,#data 3 2 将直接地址的内容与常数的值做XOR的逻辑判断,结果存回该直接地址 43.CLR A 44.CPL A 45.RL A 46.RLC A 47.RR A 48.RRC A 49.SWAP A 数据转移指令 50.MOV A,Rn 51.MOV A,direct 52.MOV A,@Ri 53.MOV A,#data 54.MOV Rn,A 55.MOV Rn,direct 56.MOV Rn,gdata 57.MOV direct,A 58.MOV direct,Rn 59.MOV direct1, direct2 60.MOV direct,@Ri 1 1 将寄存器的内容载入累加器 2 1 将直接地址的内容载入累加器 1 1 将间接地址的内容载入累加器 2 1 将常数载入累加器 1 1 将累加器的内容载入寄存器 2 2 将直接地址的内容载入寄存器 2 1 将常数载入寄存器 2 1 将累加器的内容存入直接地址 2 2 将寄存器的内容存入直接地址 3 2 将直接地址2的内容存入直接地址1 2 2 将间接地址的内容存入直接地址 1 1 清除累加器的值为0 1 1 将累加器的值反相 1 1 将累加器的值左移一位 1 1 将累加器含进位C左移一位 1 1 将累加器的值右移一位 1 1 将累加器含进位C右移一位 1 1 将累加器的高4位与低4位的内容交换。(A)3-0←(A)7-4
8051汇编语言概述一 ) 指令分类 42个助记符,33种功能,共...
3-2-6 位寻址
位寻址的的操作数是RAM单元和特殊功能寄存器中可 用于位操作的位的地址。 例如: setb 40h ;将28h的最低位(第0位)臵1 mov c, 3fh ;将27h的最高位(第7位)送到CY mov 3fh , c ;将CY 送到27h的最高位(第7位) anl c, 3fh ;CY & (27h的第7位) -> CY
3-3-4 累加器交换指令
1) 字节交换指令XCH(3 条)
助记符格式
XCH A, Rn
机器码
11001rrrB
相应操作
A Rn
指令说明 机器周期
n=0~7 1 1
XCH A, direct 11000101B A (direct) direct
XCH A, ቤተ መጻሕፍቲ ባይዱRi
1100011iB data
相应操作
Rn ← A
指令说明
n=0~7, rrr=000~111
机器周期
1 1 1
10101rrr Rn←(direct) n=0~7, direct rrr=000~111 Rn←#data n=0~7, rrr=000~111
MOV Rn, #data 01111rrr data
注意:以上传送指令的结果均不影响程序状态字寄存器 PSW 的 P 和 Z 标志。
3-3-1 片内数据存储器传送指令MOV
片内数据存储器传送指令MOV 共17 条,指令基本格式: MOV <目的操作数>, <源操作数> 1)以累加器 A 为目的地址的传送指令(4 条)
助记符格式 MOV A, Rn MOV A, direct MOV A, @Ri MOV A, #data 机器码 11101rrrB 相应操作 A←Rn 指令说明 n=0~7, rrr=000~111 i=0,1 机器周期 1 1 1
8051单片机指令大全
1 MOV A,Rn 寄存器内容送入累加器2 MOV A,direct 直接地址单元中的数据送入累加器3 MOV A,@Ri 间接RAM 中的数据送入累加器4 MOV A,#tata 立即数送入累加器5 MOV Rn,A 累加器内容送入寄存器6 MOV Rn,direct 直接地址单元中的数据送入寄存器7 MOV Rn,#data 立即数送入寄存器8 MOV direct,A 累加器内容送入直接地址单元9 MOV direct,Rn 寄存器内容送入直接地址单元10 MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元11 MOV direct,@Ri 间接RAM 中的数据送入直接地址单元12 MOV direct,#data 立即数送入直接地址单元13 MOV @Ri,A 累加器内容送间接RAM 单元14 MOV @Ri,direct 直接地址单元数据送入间接RAM 单元15 MOV @RI,#data 立即数送入间接RAM 单元16 MOV DRTR,#dat16 16 位立即数送入地址寄存器17 MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器18 MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器19 MOVX A,@Ri 外部RAM(8 位地址)送入累加器20 MOVX A,@DPTR 外部RAM(16 位地址)送入累加器21 MOVX @Ri,A 累计器送外部RAM(8 位地址)22 MOVX @DPTR,A 累计器送外部RAM(16 位地址)23 PUSH direct 直接地址单元中的数据压入堆栈24 POP direct 弹栈送直接地址单元25 XCH A,Rn 寄存器与累加器交换26 XCH A,direct 直接地址单元与累加器交换27 XCH A,@Ri 间接RAM 与累加器交换28 XCHD A,@Ri 间接RAM 的低半字节与累加器低半字节交换算术操作类指令:1 ADD A,Rn 寄存器内容加到累加器2 ADD A,direct 直接地址单元的内容加到累加器3 ADD A,@Ri 间接ROM 的内容加到累加器4 ADD A,#data 立即数加到累加器5 ADDC A,Rn 寄存器内容带进位加到累加器6 ADDC A,direct 直接地址单元的内容带进位加到累加器7 ADDC A,@Ri 间接ROM 的内容带进位加到累加器8 ADDC A,#data 立即数带进位加到累加器9 SUBB A,Rn 累加器带借位减寄存器内容10 SUBB A,direct 累加器带借位减直接地址单元的内容11 SUBB A,@Ri 累加器带借位减间接RAM 中的内容12 SUBB A,#data 累加器带借位减立即数13 INC A 累加器加114 INC Rn 寄存器加115 INC direct 直接地址单元加116 INC @Ri 间接RAM 单元加117 DEC A 累加器减118 DEC Rn 寄存器减119 DEC direct 直接地址单元减120 DEC @Rj 间接RAM 单元减121 INC DPTR 地址寄存器DPTR 加122 MUL AB A 乘以B 两个八位无符号数相乘结果高八位放在B 低八位放在A23 DIV AB A 除以B,结果整数部分放在A 余数放在B24 DA A 累加器十进制调整实现BCD运算执行仅对进位位产生影响布尔变量操作类指令:1 CLR C 清进位位2 CLR bit 清直接地址位3 SETB C 置进位位4 SETB bit 置直接地址位5 CPL C 进位位求反6 CPL bit 置直接地址位求反7 ANL C,bit 进位位和直接地址位相“与”8 ANL C,/bit 进位位和直接地址位的反码相“与”9 ORL C,bit 进位位和直接地址位相“或”10 ORL C,/bit 进位位和直接地址位的反码相“或”11 MOV C,bit 直接地址位送入进位位12 MOV bit,C 进位位送入直接地址位13 JC rel 进位位为1 则转移14 JNC rel 进位位为0 则转移15 JB bit,rel 直接地址位为1 则转移16 JNB bit,rel 直接地址位为0 则转移17 JBC bit,rel 直接地址位为1 则转移,该位清零逻辑操作数指令:1 ANL A,Rn 累加器与寄存器相“与”2 ANL A,direct 累加器与直接地址单元相“与”3 ANL A,@Ri 累加器与间接RAM 单元相“与”4 ANL A,#data 累加器与立即数相“与”5 ANL direct,A 直接地址单元与累加器相“与”6 ANL direct,#data 直接地址单元与立即数相“与”7 ORL A,Rn 累加器与寄存器相“或”8 ORL A,direct 累加器与直接地址单元相“或”9 ORL A,@Ri 累加器与间接RAM 单元单元相“或”10 ORL A,#data 累加器与立即数相“或”11 ORL direct,A 直接地址单元与累加器相“或”12 ORL direct,#data 直接地址单元与立即数相“或”13 XRL A,Rn 累加器与寄存器相“异或”14 XRL A,direct 累加器与直接地址单元相“异或”15 XRL A,@Ri 累加器与间接RAM 单元单元相“异或”16 XRL A,#data 累加器与立即数相“异或”17 XRL direct,A 直接地址单元与累加器相“异或”18 XRL direct,#data 直接地址单元与立即数相“异或”19 CLR A 累加器清“0”20 CPL A 累加器求反21 RL A 累加器循环左移22 RLC A 累加器带进位位循环左移23 RR A 累加器循环右移24 RRC A 累加器带进位位循环右移25 SWAP A 累加器半字节交换控制转移类指令:1 ACALL addr11 绝对(短)调用子程序2 LCALL addr16 长调用子程序3 RET 子程序返回4 RETI 中断返回5 AJMP addr11 绝对转移6 LJMP addr16 长转移7 SJMP rel 短转移8 JMP @A+DPTR 变址寻址转移相对于DPTR 的间接转移9 JZ rel A为零转移10 JNZ rel ;A不等于0转移11 CJNE A,direct,rel 累加器与直接地址单元比较,不相等则转移12 CJNE A,#data,rel 累加器与立即数比较,不相等则转移13 CJNE Rn,#data,rel 寄存器与立即数比较,不相等则转移14 CJNE @Ri,#data,rel 间接RAM 单元与立即数比较,不相等则转移15 DJNZ Rn,rel 寄存器减1,非零转移16 DJNZ direct,erl 直接地址单元减1,非零转移17 NOP 空操作PC->PC+1。
8051指令集
8051指令集序号指令格式功能简述字节数周期一、数据传送类指令1MOV A,Rn寄存器送累加器11 2MOV Rn,A累加器送寄存器11 3MOV A,@Ri内部RAM单元送累加器11 4MOV @Ri,A累加器送内部RAM单元11 5MOV A,#data立即数送累加器21 6MOV A,direct直接寻址单元送累加器21 7MOV direct,A累加器送直接寻址单元21 8MOV Rn,#data立即数送寄存器21 9MOV direct,#data立即数送直接寻址单元32 10MOV @Ri,#data立即数送内部RAM单元21 11MOV direct,Rn寄存器送直接寻址单元22 12MOV Rn,direct直接寻址单元送寄存器22 13MOV direct,@Ri内部RAM单元送直接寻址单元22 14MOV @Ri,direct直接寻址单元送内部RAM单元22 15MOV direct2,direct1直接寻址单元送直接寻址单元32 16MOV DPTR,#data1616位立即数送数据指针32 17MOVX A,@Ri外部RAM单元送累加器(8位地址)12 18MOVX @Ri,A累加器送外部RAM单元(8位地址)12 19MOVX A,@DPTR外部RAM单元送累加器(16位地址)12 20MOVX @DPTR,A累加器送外部RAM单元(16位地址)12 21MOVC A,@A+DPTR查表数据送累加器(DPTR为基址)12 22MOVC A,@A+PC查表数据送累加器(PC为基址)12 23XCH A,Rn累加器与寄存器交换11 24XCH A,@Ri累加器与内部RAM单元交换11 25XCHD A,direct累加器与直接寻址单元交换21 26XCHD A,@Ri累加器与内部RAM单元低4位交换11 27SWAP A累加器高4位与低4位交换11 28POP direct栈顶弹出指令直接寻址单元22 29PUSH direct直接寻址单元压入栈顶22二、算术运算类指令32ADD A,Rn累加器加寄存器11 31ADD A,@Ri累加器加内部RAM单元11 32ADD A,direct累加器加直接寻址单元21 33ADD A,#data累加器加立即数21 34ADDC A,Rn累加器加寄存器和进位标志11 35ADDC A,@Ri累加器加内部RAM单元和进位标志11 36ADDC A,#data累加器加立即数和进位标志21 37ADDC A,direct累加器加直接寻址单元和进位标志21 38INC A累加器加111 39INC Rn寄存器加11140INC direct直接寻址单元加121 41INC @Ri内部RAM单元加111 42INC DPTR数据指针加112 43DA A十进制调整11 44SUBB A,Rn累加器减寄存器和进位标志11 45SUBB A,@Ri累加器减内部RAM单元和进位标志11 46SUBB A,#data累加器减立即数和进位标志21 47SUBB A,direct累加器减直接寻址单元和进位标志21 48DEC A累加器减111 49DEC Rn寄存器减111 50DEC @Ri内部RAM单元减111 51DEC direct直接寻址单元减121 52MUL AB累加器乘寄存器B14 53DIV AB累加器除以寄存器B14三、逻辑运算类指令54ANL A,Rn累加器与寄存器11 55ANL A,@Ri累加器与内部RAM单元11 56ANL A,#data累加器与立即数21 57ANL A,direct累加器与直接寻址单元21 58ANL direct,A直接寻址单元与累加器21 59ANL direct,#data直接寻址单元与立即数31 60ORL A,Rn累加器或寄存器11 61ORL A,@Ri累加器或内部RAM单元11 62ORL A,#data累加器或立即数21 63ORL A,direct累加器或直接寻址单元21 64ORL direct,A直接寻址单元或累加器21 65ORL direct,#data直接寻址单元或立即数31 66XRL A,Rn累加器异或寄存器11 67XRL A,@Ri累加器异或内部RAM单元11 68XRL A,#data累加器异或立即数21 69XRL A,direct累加器异或直接寻址单元21 70XRL direct,A直接寻址单元异或累加器21 71XRL direct,#data直接寻址单元异或立即数32 72RL A累加器左循环移位11 73RLC A累加器连进位标志左循环移位11 74RR A累加器右循环移位11 75RRC A累加器连进位标志右循环移位11 76CPL A累加器取反11 77CLR A累加器清零11四、控制转移类指令类78ACCALL addr112KB范围内绝对调用22 79AJMP addr112KB范围内绝对转移22 80LCALL addr162KB范围内长调用32 81LJMP addr162KB范围内长转移3282SJMP rel相对短转移22 83JMP @A+DPTR相对长转移12 84RET子程序返回12 85RET1中断返回12 86JZ rel累加器为零转移22 87JNZ rel累加器非零转移22 88CJNE A,#data,rel累加器与立即数不等转移32 89CJNE A,direct,rel累加器与直接寻址单元不等转移32 90CJNE Rn,#data,rel寄存器与立即数不等转移32 91CJNE @Ri,#data,rel RAM单元与立即数不等转移32 92DJNZ Rn,rel寄存器减1不为零转移22 93DJNZ direct,rel直接寻址单元减1不为零转移32 94NOP空操作11五、布尔操作类指令95MOV C,bit直接寻址位送C21 96MOV bit,C C送直接寻址位21 97CLR C C清零11 98CLR bit直接寻址位清零21 99CPL C C取反11 100CPL bit直接寻址位取反21 101SETB C C置位11 102SETB bit直接寻址位置位21 103ANL C,bit C逻辑与直接寻址位22 104ANL C,/bit C逻辑与直接寻址位的反22 105ORL C,bit C逻辑或直接寻址位22 106ORL C,/bit C逻辑或直接寻址位的反22 107JC rel C为1转移22 108JNC rel C为零转移22 109JB bit,rel直接寻址位为1转移32 110JNB bit,rel直接寻址为0转移32 111JBC bit,rel直接寻址位为1转移并清该位32。
8051单片机指令详解
数据传递类指令(1)以累加器为目的操作数的指令MOV A,RnMOV A,directMOV A,@RiMOV A,#data第一条指令中,Rn代表的是R0-R7。
第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。
第四条指令是将立即数data送到A中。
下面我们通过一些例子加以说明:MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。
MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。
MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。
如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。
MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。
(2)以寄存器Rn为目的操作的指令MOV Rn,AMOV Rn,directMOV Rn,#data这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。
(3)以直接地址为目的操作数的指令MOV direct,A 例: MOV 20H,AMOV direct,Rn MOV 20H,R1MOV direct1,direct2 MOV 20H,30HMOV direct,@Ri MOV 20H,@R1MOV direct,#data MOV 20H,#34H(4)以间接地址为目的操作数的指令MOV @Ri,A 例:MOV @R0,AMOV @Ri,direct MOV @R1,20HMOV @Ri,#data MOV @R0,#34H(5)十六位数的传递指令MOV DPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。
其中高8位送入DPH,低8位送入DPL。
例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。
