51单片机111条指令
C51汇编111条指令
54 逻辑与 ANL A, Rn 将累加器A的值和寄存器Rn的值进行与操作,结果保存到累加器A中
55 ANL A, direct 将累加器A的值和direct地址单元内的值进行与操作,结果保存到累加器A中
56 ANL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行与操作,结果保存到累加器A中
23 MOVX A , @DPTR 将DPTR寄存器所指外部RAM地址单元内的数据送累加器A
24 MOVX A, @Ri 寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A
25 MOVX @Ri, A 寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A
26 与ROM传送 MOVC A, @A+DPTR A+DPTR构成ROM地址,将该地址内的数据送累加器A内
85 CJNE A, #data, rel If(累加器A!= 立即数)则PC加2再加上rel作为目标地址
86 CJNE Rn, #data, rel If(寄存器Rn的值!= 立即数)则PC加2再加上rel作为目标地址
87 CJNE @Ri, #data, rel 寄存器Ri内为RAM地址,If(该地址单元的值!= 立即数)则PC加2再加上rel作为目标地址
66 逻辑异或 XRL A, Rn 将累加器A的值和寄存器Rn的值进行异或操作,结果保存到累加器A中
67 XRL A, direct 将累加器A的值和direct地址单元内的值进行异或操作,结果保存到累加器A中
68 XRL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行异或操作,结果保存到累加器A中
控制转移指令
MCS51单片机指令系统
第一条指令为远查表指令,可以在64K的程序存储器空间寻 址。基地址寄存器为DPTR,其意思为,DPTR里面存放的是 程序存储器中数据表格的首地址,A为数据地址的偏移量。
这条指令执行以后,以 (A)+(DPTR)的数值为地址数 据就送进A里面来了,也就是从表格首地址开始以后的第(A) 个数据被送进A了。(举例子说明)
编写好的程序都放在程序存储器中,由于一个存储地址所 指示的存储单元只能存放一字节的数据。所以,在存放指令时, 必须将指令拆分成一个一个字节进行连续存放。
比如: 实现“累加器加10H”这条指令,其机器语言为 0111010000010000, 占用了两个字节,就必须拆成两个字节 进行连续存储。
但是,用二进制来表示比较麻烦,因此,也常用十六进制来 表示如:74H 10H来表示以上这条机器语言。可见,用十六进 制表示指令比较简单,但是,指令系统有上百条指令,不易记 住。所以,一般采用容易记住的一些缩写符号来表示机器语言,
2. 在指令中直接给出操作数的地址, 这种寻址方式就属
于直接寻址方式。在这种方式中, 指令的操作数部分直接 是操作数的地址。
比如:MOV A,30H;将30H里面的数送到A里面 MOV 21H,30H;将30H里面的数存放到21H里面 在MCS -51 单片机指令系统中, 直接寻址方式中可
以访问 3 种存储器空间: (1) 内部数据存储器的低 128 个字节单元(00H~
7. 位寻址 指按照位进行的寻址操作,(前面讲的都是按字节进
行的寻址操作)。该种寻址方式中, 操作数是内部RAM单元 中20H到2FH的128个位地址以及SFR中的11个可进行 位寻址的寄存器中的位地址寻址。
比如:MOV C,20H;就是将RAM中位寻址区中20H位地 址中的内容送给C。区别与MOV A,20H;这个是将内部 RAM中20H单元的内容送给A。
MCS-51系列单片机指令系统共有111条指令,其中有49条单字节指令、45条双字节指令和17条三字节指令。
XCH A,Rn ;(A)←→(Rn)累加器与工作寄存器Rn中的内容互换
XCH A,@Ri ;(A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的内容互换
XCH A,data ;(A)←→(data)累加器与直接地址单元中的内容互换
[8]. 十进制调整指令(1条)
在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。
DA A
XCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换
SWAP A ;(A 3-0 )←→(A 7-4 )累加器中的内容高低半字节互换
[9]. 16位数据传送指令(1条)
这条指令的功能是把16位常数送入数据指针寄存器。
PUSH data ;(SP)+1→(SP),(data)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中
POP data ;(SP)→(data)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作
[8]. 交换指令(5条)
MOV Rn,data ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中
MOV Rn,#data ;#data→(Rn) 立即数直接送到寄存器Rn中
MOV Rn,A ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中
[3]. 以直接地址为目的操作数的指令(5条)
这组指令的功能是把源操作数指定的内容送到由直接地址data所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式:
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
第3章 51单片机指令系统
3.1.3 堆栈操作指令
(1)入栈指令:
PUSH direct; SP ← SP+1, (SP) ← (direct)
入栈操作:栈指针SP+1指向栈顶的上 一个空单元,将直接地址direct寻址的单元 内容压入当前SP所指示的堆栈单元中。 (本操作不影响标志位)
例3-3 在中断响应时,SP=09H,数据 指针DPTR的内容为0123H。执行下列指令 后:
MOV @Ri , A ; (Ri)←A MOV @Ri , direct ; (Ri)←(direct) MOV @Ri , data ; (Ri)←#data 上述指令将累加器A,直接地址单元内 容或立即数送到Ri间接寻址单元中。由于内 容较多,下面需要说明:
累加器A是个使用最多的寄存器,MCS-51单 片机以A为中心体系结构。绝大部分指令均需通 过A送到ALU进行运算,结果存于A中,有些指令 仅在A中进行。 直接地址direct ,8位直接地址可寻址0~255个 单元。对于8051则直接寻址内部RAM0~127地址 空间的单元及128~255地址空间的特殊功能寄存 器。这里需注意128~255地址空间很多单元开始 时无定义,对无定义单元进行读/写,则读数不定, 欲写入的数将丢失。 间接寻址@Ri,@间接寻址的符号,是以Ri 的内容作为地址进行寻址,亦即Ri的内容不是操 作数,而是地址。此地址所对应的单元内容才是 所要找的操作数。间接寻址的寻址范围与直接寻 址相同(0~255)。直接寻址单元在编程时就已 明确,而间接寻址单元是在程序运行中明确。
51单片机指令
MCS-51共有111条指令,可分为5类:[1].数据传送类指令(共29条)[2].算数运算类指令(共24条)[3].逻辑运算及移位类指令(共24条)[4].控制转移类指令(共17条)[5].布尔变量操作类指令(共17条)一些特殊符号的意义Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。
包含0—127(255)内部存储单元地址和特殊功能寄存地址。
#data—指令中的8位常数。
#data16—指令中的16位常数。
addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。
#addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间之中。
rel—8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128——+127范围内。
@—间接寄存器寻址或基址寄存器的前缀。
/—为操作的前缀,声明对该位操作书取反。
DPTR—数据指针。
bit—内部RAM和特殊功能寄存器的直接寻址位。
A—累加器。
B—累加器B。
用于乘法和除法指令中。
C—进位标志位。
(x)—某地址单元中的内容。
((x))—由X寻址单元中的内容。
MCS-51的寻址方式[1].直接寻址指令中操作数直接以单元地址形式出现,例如:MOV A,68H这条指令的意义是把内部RAM中的68H单元中的数据内容传送到累加器A中。
值得注意的是直接寻址方式只能使用8位二进制地址,因此这种寻址方式仅限于内部RAM进行寻址。
低128位单元在指令中直接以单元地址的形式给出。
对于特殊功能寄存器可以使用其直接地址进行访问,还可以以它们的符号形式给出,只是特殊功能寄存器只能用直接寻址方式访问,而无其它方法。
第9章 单片机的指令系统说明
计算机总是把操作数当作有符号数(补码形式)看待 并影响PSW的相关标志位。影响情况如下: 进位/借位标志CY: 两数和的D7位有进位时,(CY)=1,否则,(CY)=0。 半进位/借位标志AC: 两数和的D3位有进位时,(AC)=1,否则,(AC)=0。 溢出标志OV: 两数和的D7,D6位只有一位有进位时,(OV)=1;否则, (OV)=0,即OV=C6⊕C7。 奇偶标志P: 当累加器A中“1”的个数为奇数时,(P)=1;为偶数 时(P)=0。
例2 把片外RAM的36H单元中的数据送到片外RAM的 1200H单元。 〈分析〉(36H)→(1200H) 程序如下: MOV R1,#36H MOVX A ,@R1 MOV DPTR,#1200H MOVX @DPTR, A <想一想>下面的程序可以实现吗? MOV DPTR, #1200H MOV R1,#36H MOV @DPTR,@R1 注意:片外RAM之间不能直接传送数据,必须经过累加器 A
例5 试分析8051单片机执行下述指令后,累加器A和PSW各标 志位的变化。 MOV A,#0A5H ADD A,#0CFH 解: (A)=10100101B + Data=11001111B CY 01110100B C7 C6 AC (CY)=C7=1;(AC)=1;溢出标志(OV)=C7⊕C6=1⊕0=1,有 溢出;(P)=0。执行结果:(A)=74H。 若为无符号数运算, (CY)=1,表示结果超出(0~255) 范围。若为带符号数运算,因(-49)+(-91)=-140,超出了 (-128~+127)的范围,所以OV=1溢出。
半字节交换 XCHD A,@Ri SWAP A
;(A3~0)((Ri)3~0) ;(A3~0)(A7~4)
MCS-51单片机原理及接口技术
3. 以直接地址为目的的传送指令: MOV direct ,#data ; direct ← data MOV direct1,direct2 ; direct1 ←(direct2) MOV direct,A ; direct ←(A) MOV direct ,@Ri ; direct ←((Ri)) MOV direct,Rn ; direct ←(Rn)
•
数据传送和交换类指令主要有以下几种:
1. 2. 3. 4. 5. 6. 内部数据传递指令 数据指针赋值指令 片外数据传送指令 ROM数据访问指令 栈操作指令 数据交换指令
一、内部RAM单元间的数据传递
1. 以累加器为目的的传送指令: MOV A,#data ; A ← data MOV A,direct ; A ←(direct) MOV A,Rn ; A←(Rn) MOV A,@Ri ; A←((Ri))
30H
Eg:MOV 30H,#33H 33H
30H
XX 30H
33H
30HLeabharlann 31HEg:MOV 30H,31H
55H
XX
55H
A
Eg:MOV 30H,A
30H XX
地址
30H 33H
33H
R0
Eg:MOV 30H,@R0 55H
55H
取出
30H 78H 30H
78H
30H XX
R3
Eg:MOV 30H,R3 33H
例:加数存放在内部RAM的41H(高位)和 40H(低位),被加数存放在43H(高位)和42H (低位),将它们相加,和存放在46H~44H中。 程序: CLR C MOV A, 40H ADD A, 42H MOV 44H,A MOV A, 41H ADDC A, 43H MOV 45H,A CLR A ADDC A, #00H MOV 46H,A
MCS-51单片机指令系统教程(2)
片外数据 存储器 64KB
1,访问片内RAM20H存储单元; MOV A,20H
2,访问片外RAM存储单元; MOV R0,#20H MOVX A,@R0
0000H
3,尽管片内与片外的RAM单元 的00H-FFH地址相重叠但由 于指令的不同不会发生地址
混乱。
片外数据存储器 64KB个字节
返回
2.2.5 变址寻址
由操作码和操作数(或操作数地址)构成指令的结构。
举例:MOV A,#0FFH
ADD A,R0
返回
2.1.2 指令的三种表示形式:
指令的表示形式是识别指令的标志。
1,二进制的表示形式:(以“累加器的内容+08H”为例) 00100100B 操作码 OP (加法) 00001000B 操作数DATA(08H)
乘法指令 16位寄存器DPTR加一
从表中可见,指令的字节数与指令周期不是对等的关系 返回
2.1.4 指令的分类
MCS-51单片机的指令如果按功能划分可以分为五类: 1,数据传送类指令:完成数据在单片机内部之间的传送。
分为8位数和16位两种。除了奇偶位外,指令的执行对 PSW无影响。
2,算术运算指令:用于操作数之间的加、减、乘除运算。 【特点】:多数情况下:操作数之一在累加器A中,结果 也保留在A中,运算结果要影响PSW(进位标志、奇偶和 溢出标志等)。
“机器码”后才能为CPU所识别和执行。 3,三种不同的表示方法适用于不同的场合。
返回
本章内容都以汇编的形式介绍指令系统。
2.1.3 指令的字节数
在MCS-51单片机的指令系统中,因指令操作码和操作数 的不同,指令(在存储器中)长度也各不相同。
分为单字节、双字节和三字节。
51单片机汇编指令
MCS-51汇编指令(111条)数据传送指令(28)一、内部数据传送指令(15条)1、立即寻址型传送指令MOV A, #data ;A←dataMOV Rn, #data ;Rn←dataMOV @Ri, #data ;(Ri)←dataMOV direct, #data ;direct ←data2、直接寻址型传送指令MOV A, direct ;A←(direct)MOV direct, A ;direct←AMOV Rn, direct ;Rn←(direct)MOV @Ri, direct ;(Ri)←(direct)MOV direct2, direct1 ;direct2←(direct1)3、寄存器寻址型传送指令MOV A,Rn;A←RnMOV Rn, A ;Rn←AMOV direct,Rn;direct←Rn4、寄存器间址型传送指令MOV A, @Ri ;A←(Ri)MOV @Ri, A ;(Ri)←AMOV direct, @Ri ;direct←(Ri)二、外部数据传送指令(7条)1、16位数据传送指令MOV DPTR, #data16 ;DPTR←data162、外部ROM的字节传送指令MOVC A, @A+DPTR ;A←(A+DPTR)MOVC A, @A+PC ;PC←PC+1,A←(A+PC)3、外部RAM的字节传送指令MOVX A,@Ri ;A←(Ri)MOVX @Ri,A ;(Ri)←AMOVX A,@DPTR ;A←(DPTR)MOVX @DPTR,A ;(DPTR)←A三、堆栈操作指令(2条)1、压栈指令PUSH direct ;SP←SP+1,(SP)←(direct) 2、弹出指令POP direct ;(SP)→direct, SP-1→ SP四、数据交换指令(4条)XCH A,Rn;A↔RnXCH A, direct;A↔directXCH A, @Ri ;A↔(Ri)XCH A, @Ri;A3~0↔(Ri)3~0一、加法指令(13条)1、不带Cy的加法指令ADD A, Rn ;A←A+RnADD A, direct ;A←A+(direct)ADD A, @Ri ;A←A+(Ri)ADD A, #data ;A←A+data2、带Cy的加法指令ADDC A, Rn ;A←A+Rn+CyADDC A, direct ;A←A+(direct) +CyADDC A, @Ri ;A←A+(Ri) +CyADDC A, #data ;A←A+data+Cy3、加1指令INC A ;A←A+1 (对奇偶校验位P有影响)INC Rn ;Rn←Rn+1INC direct ;direct←(direct)+1INC @Ri ;(Ri) ← (Ri) +1INC DPTR ;DPTR←DPTR+1(唯一的16位运算指令)二、减法指令(8条)1、带Cy的减法指令(4条)SUBB A, Rn ;A←A-Rn-CySUBB A, direct ;A←A-(direct) -CySUBB A, @Ri ;A←A-(Ri) -CySUBB A, #data ;A←A-data-Cy2、减1指令(4条)DEC A ;A←A-1(对奇偶校验位P有影响)DEC Rn ;Rn←Rn-1DEC direct ;direct←(direct)-1DEC @Ri ;(Ri) ← (Ri) -1三、十进制调整指令(1条)DA A ;若AC=1或A3~A0 > 9 ,则A←A+06H ;若Cy=1或A7~A4 > 9 ,则A←A+60H;对进位标志位Cy和AC有影响。
第3章 MCS-51指令系统
16
MCS-51单片机指令系统
MCS-51单片机指令系统包括111条指令 按功能可以划分为以下5类:
1. 数据传送和交换指令(29条)
2. 算术运算指令(24条) 3. 逻辑运算指令(24条) 4. 控制转移指令(17条) 5. 位操作指令(17条)
17
数据传送和交换类指令主要有以下几种:
1. 2. 3.
30H
Eg:MOV 30H,#33H 33H
30H
XX 30H
33H
30H
31H
Eg:MOV 30H,31H
55H
XX
55H
25
A
30H XX
地址
30H 33H
Eg:MOV 30H, A
33H
R0
Eg:MOV 30H,@R0
55H
取出
30H 78H 30H
55H
R3
78H
30H XX
55H
MOV A , 30H
XX 55H
30H
A
6
3、寄存器寻址
寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄 存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。 数据存放在R0~R7中的某个通用寄存器内,或者放在某个专用 寄存器中。 e.g.: MOV A,R7 ADD A,R0
DPTR
2000H
DPTR 2000H
XXXX
Eg:将数据指针DPTR指向存于ROM中的表格首地址。
MOV DPTR,#TABLE
27
三、片外数据传递指令
使用DPTR和Ri进行间接寻址 MOVX A, @DPTR ;A ←((DPTR))片外 MOVX A,@Ri ;A ←((Ri))片外 MOVX @DPTR,A ;(DPTR)片外←(A) MOVX @Ri,A ;(Ri)片外←(A) 注意: 该指令用于在单片机和外部RAM、扩展I/O的数据传送; 使用Ri时,只能访问低8位地址为00H~FFH地址段; 使用DPTR时,能访问0000H ~ FFFFH地址段。
MCS-51系列单片机的指令系统
51系列单片机指令系统包含5种功能类型的指令,7 种寻址方式,共有111条指令。
addr16 16位目标地址,片外数据存储器或程序存储器以及外 部芯片的地址,用于LCALL和LJMP指令中;
addr11 11位目标地址,片内数据存储器或程序存储器的地址, 用于ACALL和AJMP指令中;
rel 相关地址,8位带符号偏移量,一般是程序存储器字节地址, 通常在跳转类指令中使用,其对应的十进制范围为-128~+127;
立即寻址就是直接给出操作数。
取指令时,即可由程序存储器中直接取得操作数据。51单 片机中除了一条指令(MOV DPTR,#data16)是16位长 的立即数外,其余都是8位的立即数。
例如:MOV A,#30H;无论执行之前A中的内容是多少, 则执行后A=30H。
值得注意的一点是:在立即数寻址中立即数前面必须要加 上一个“#”号,“#”表示其后面内容为立即数而不是一个 字节单元地址。
bit 位地址,针对片内数据存储器中的可位寻址的位使用; DPTR 数据指针,可用做16位的地址寄存器; (X) X指寄存器或十六进制数,则(X)为指向以X寄存器中的内
容为目标地址的单元或以十六进制数据为目标地址的单元; ← 数据传送的方向,将左边的内容送入右边; A 累加器; ACC 直接寻址方式的累加器; B 寄存器B; C 进位标志位,是布尔处理机的累加器,也称为位累加器。
任何一种处理器都必须经过设计人员对
《单片机》教学课件51单片机的指令系统
MOV Rn ,direct
;(direct)→Rn ,n =0~7
MOV Rn ,#data
;#data→Rn ,n =0~7
把源操作数送入当前寄存器区的R0~R7中的某一寄存器。
3.以直接地址direct为目的操作数的指令
MOV direct,A
; (A)→direct
MOV direct,Rn
寻址空间内快速地找到指定的地址单元。 下面介绍指令系统7种寻址方式。
5
1.寄存器寻址方式
指令中的操作数为某一寄存器的内容。
例如:MOV A,Rn
;(Rn)→A,n =0~7
把Rn中的源操作数送入到累加器A中。由于指令指定了从寄存 器Rn中取得源操作数,所以称为寄存器寻址方式。
本寻址方式的寻址范围:
4.以寄存器间接地址为目的操作数的指令
MOV @Ri,A
;(A)→((Ri)), i=0,1
MOV @Ri,direct ;(direct)→((Ri)),i=0,1
MOV @Ri,#data ;#data→((Ri)), i=0,1
功能是把源操作数内容送入R0或R1指定的存储单元中。
5.16位数传送指令
内部RAM的00H~7FH共128个单元。 6.堆栈操作指令 内部RAM中设定一个后进先出(LIFO,Last In First Out)
的区域,称为堆栈。在特殊功能寄存器中有一个堆栈指针 SP,指示堆栈的栈顶位置。堆栈操作有进栈和出栈两种, 因此,在指令系统中相应有两条堆栈操作指令。
22
(1)进栈指令 PUSH direct
(1)4组通用工作寄存区共32个工作寄存器。但只对当前工 作寄存器区的8个工作寄存器寻址,指令中的寄存器名称只 能是R0~R7。
51单片机练习题 附解答
第一、二章单片机概述与结构一、填空题1.单片机复位后,SP、PC和I/O口的内容分别为07H\000H\FFH 。
2.单片机有四个工作寄存器区,由PSW状态字中的RS1和RS0两位的状态来决定。
单片机复位后,若执行SETB RS0指令,此时只能使用 1 区的工作寄存器,地址范围是08H---0FH 。
3.51单片机驱动能力最强的并行端口为P0端口。
4.51单片机PC的长度为16位,SP的长度为___8____位,DPTR的长度为_16__位。
5.访问51单片机程序存储器地址空间、片内数据存储器地址、片外数据存储器地址的指令分别为__movc_____,MOV和_movx______。
6.若A中的内容为63H,那么P标志位的值为1 。
7.当扩展外部存储器或I/O口时,P2口用作高八位地址总线。
8.51单片机内部RAM区有 4 个工作寄存器区。
9.51单片机内部RAM区有128 个位地址。
10.外部中断1()的中断入口地址为0013 ;定时器1的中断入口地址为001B 。
11.51单片机有 4 个并行I/O口,P0~P3是准双向口,所以由输出转输入时必须先写入 1 。
12.51单片机的堆栈建立在内部RAM 内开辟的区域。
二、选择题1.访问片外部数据存储器时,不起作用的信号是(C)。
A./RD B./WE C./PSEN D.ALE2.51单片机P0口用作输出时,应外接(A )。
A.上拉电阻B.二极管C.三极管D.下拉电阻3.进位标志CY在( C )中。
A.累加器B.算逻运算部件ALU C.程序状态字寄存器PSW D.DPTR4.堆栈数据的进出原则是(D )。
A.先进先出B.进入不出C.后进后出D.先进后出5.51单片机系统中,若晶振频率为6MHz,一个机器周期等于(D )μs。
A.1.5 B.3 C.1 D.26.在家用电器中使用单片机应属于微计算机的( B )。
A.辅助设计应用B.测量、控制应用C.数值计算应用D.数据处理应用7.PC的值是(C )。
第3章 MCS-51单片机指令系统1
2.操作码:指明指令功能,是指令功能的英文缩写。 汇编语句格式中唯一不能空缺的部分。
MOV__move传送 XCH__exchange交换 ANL__and logic与逻辑运算 XRL__exclusive or异或运算
MUL__Multiply乘法
RR__rotate right右循环 SJMP__short jump短跳转 RET__return 子程序返回 操作码助记符
MCS-51系列单片机指令系统分类
按寻址方式分为以下七种 1、立即寻址 2、直接寻址 3、寄存器寻址 按功能分为以下五种: 1、数据传送指令 2、算术运算指令 3、逻辑运算指令
4、寄存器间接寻址指令
5、相对寻址
4、控制转移指令
5、位操作指令
6、变址寻址
7、位寻址
3.3 指令系统的寻址方式
我的信在她 那!找信去!
快件
目的地
MOV A,#30H
30H
A
这类指令大都是双字节指令,仅有指令:MOV DPTR,#DATA16是三字节指令,它提供两字节立即 数。 第一位数字
是A~F时在 其前加0
对立即数的书写要求:对于单字节立即数,若 数值大于等于A0H,则要在其前面加一个0,如指令 “MOV A,#0A0H”,该指令含义是把立即数A0H送 累加器;对于双字节立即数,若数值大于等于 A000H,则要在其前面加一个0。对于直接地址和偏 移量也按相同方法书写。
1.标号:指令的符号地址 一般由字母和数字组成,第一位必须为字母,冒 号 “ :” 结 束 。 字 符 个 数 不 能 超 过 8 个 。 AD5 、 Q555、BB5D、pat、loop等为合法标号;5P、PA、10AD、+A等为非法标号。 不能用汇编语言已定义的符号作标号。如助记符、 伪指令、寄存器名称等。 同一标号在一个程序中只能定义一次。 标号在语句中的有无取决于本语句是否被访问。
51单片机汇编指令集(附记忆方法)
51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。
1解:8051的指令系统由111条指令组成如果按字节数分类
1001.解:8051的指令系统由111条指令组成。
如果按字节数分类,有49条单字节指令46条双字节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64条单周期指令、45条双周期指令和2条四周期指令,以单周期指令为主。
8051的指令系统具有以下特点:(1)存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送,能把一个并行I/O 口中的内容传送到内部RAM 单元中而不必经过累加器A 或工作寄存器Rn 。
这样可以大大提高传送速度和缓解累加器A 的瓶颈效应。
(2)用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器A 中。
这为编成翻译算法提供了方便。
(3)在算术运算指令中设有乘法和除法指令(4)指令系统中一些对I/O 口进行操作的指令具有“读——修改——写”的功能。
这一功能指:在执行读锁存器的指令时,CPU 首先完成将锁存器的值通过缓冲器BUF2度入内部,进行修改、改变,然后重新写到锁存器中去。
这种类型指令包含所有的逻辑操作和位操作指令。
(5)8051单片机内部有一个布尔处理器,对为地址空间具有丰富的位操作指令。
布尔操作类指令有17条,包括布尔传送指令、布尔状态控制指令、布尔逻辑操作指令、布尔条件转移指令。
2.解:MCS-51单片机指令系统按功能可分为5类:(1)数据传送指令 (2)算术运算指令(3)逻辑运算和移位指令 (4)控制转移指令(5)位操作指令MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表:3.解: 访问特殊功能寄存器,应采用直接寻址、位寻址方式。
访问外部数据存储器,应采用寄存器间接寻址方式。
在0~255B 范围内,可用寄存器R0、R1间接寻址:MOVX A ,@R0 或 MOVX A ,@R1寻址方式 使用的变量 寻址范围 立即寻址 程序存储器直接寻址内部RAM 低128个字节; 特殊功能寄存器SFR寄存器寻址 R0~R7;A 、B 、DPTR 、C寄存器间接寻址 @R0、@R1、SP 内部RAM 、堆栈指针SP @R0、@R1、@DPTR 外部RAM变址寻址 @A+PC 、@A+DPTR 程序存储器 相对寻址 PC+偏移量 程序存储器位寻址内部RAM 低128B 位寻址区 可位寻址的特殊功能寄存器位2MOVX @R0,A 或MOVX @R1,A在0~64KB范围内,可用16位寄存器DPTR间接寻址:MOVX A,@DPTRMOVX @DPTR,A4.解:这条指令是在进行BCD码加法运算时,跟在“ADD”和“ADDC”指令之后,用来对BCD码的加法运算结果自动进行修正的,使其仍为BCD码表达形式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机111条指令一览表指令字节周期动作说明算数运算指令1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加114.INC Rn 1 1 将寄存器的值加l15.INC direct 2 1 将直接地址的内容加116.INC @Ri 1 1 将间接地址的内容加117.INC DPTR 1 1 数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位18.DEC A 1 1 将累加器的值减119.DEC Rn 1 1 将寄存器的值减120.DEC direct 2 1 将直接地址的内容减121.DEC @Ri 1 1 将间接地址的内容减122.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。
如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。
执行本指令后,进位位(C)及溢出位(OV)被清除为024.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 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器28.ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判断,结果存回累加器指令字节周期动作说明29.ANL direct,A 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址30.ANL direct,#data 3 2 将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址31.ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器34.ORL A,#data 2 1 将累加器的值与常数做OR的逻辑判断,结果存回累加器35.ORL direct,A 2 1 将直接地址的内容与累加器的值做OR的逻辑判断,结果存回该直接地址36.ORL direct,#data 3 2 将直接地址的内容与常数值做OR的逻辑判断,结果存回该直接地址37.XRL A,Rn 1 1 将累加器的值与Rn寄存器的值做XOR的逻辑判断,结果存回累加器38.XRL A,direct 2 1 将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器39.XRL A,@Ri 1 1 将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器40.XRL A,#data 2 1 将累加器的值与常数作XOR的逻辑判断,结果存回累加器41.XRL direct,A 2 1 将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址42.XRL direct,#data 3 2 将直接地址的内容与常数的值做XOR的逻辑判断,结果存回该直接地址43.CLR A 1 1 清除累加器的值为044.CPL A 1 1 将累加器的值反相45.RL A 1 1 将累加器的值左移一位46.RLC A 1 1 将累加器含进位C左移一位47.RR A 1 1 将累加器的值右移一位48.RRC A 1 1 将累加器含进位C右移一位49.SW AP A 1 1 将累加器的高4位与低4位的内容交换。
(A)3-0←(A)7-4 数据转移指令50.MOV A,Rn 1 1 将寄存器的内容载入累加器51.MOV A,direct 2 1 将直接地址的内容载入累加器52.MOV A,@Ri 1 1 将间接地址的内容载入累加器53.MOV A,#data 2 1 将常数载入累加器54.MOV Rn,A 1 1 将累加器的内容载入寄存器55.MOV Rn,direct 2 2 将直接地址的内容载入寄存器56.MOV Rn,#data 2 1 将常数载入寄存器57.MOV direct,A 2 1 将累加器的内容存入直接地址指令字节周期动作说明58.MOV direct,Rn 2 2 将寄存器的内容存入直接地址59.MOV direct1, direct2 3 2 将直接地址2的内容存入直接地址160.MOV direct,@Ri 2 2 将间接地址的内容存入直接地址61.MOV direct,#data 3 2 将常数存入直接地址62.MOV @Ri,A 1 1 将累加器的内容存入某间接地址63.MOV @Ri,direct 2 2 将直接地址的内容存入某间接地址64.MOV @Ri,#data 2 1 将常数存入某间接地址65.MOV DPTR,#data16 3 2 将16位的常数存入数据指针寄存器66.MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR))累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器67.MOVC A,@A+PC 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器68.MOVX A,@Ri 1 2 将间接地址所指定外部存储器的内容读入累加器(8位地址) 69.MOVX A,@DPTR 1 2 将数据指针所指定外部存储器的内容读入累加器(16位地址)70.MOVX @Ri,A 1 2 将累加器的内容写入间接地址所指定的外部存储器(8位地址)71.MOVX @DPTR,A 1 2 将累加器的内容写入数据指针所指定的外部存储器(16位地址)72.PUSH direct 2 2 将直接地址的内容压入堆栈区73.POP direct 2 2 从堆栈弹出该直接地址的内容74.XCH A,Rn 1 1 将累加器的内容与寄存器的内容互换75.XCH A,direct 2 1 将累加器的值与直接地址的内容互换76.XCH A,@Ri 1 1 将累加器的值与间接地址的内容互换77.XCHD A,@Ri 1 1 将累加器的低4位与间接地址的低4位互换布尔代数运算78.CLR C 1 1 清除进位C为079.CLR bit 2 1 清除直接地址的某位为080.SETB C 1 1 设定进位C为181.SETB bit 2 1 设定直接地址的某位为182.CPL C 1 1 将进位C的值反相83.CPL bit 2 1 将直接地址的某位值反相84.ANL C,bit 2 2 将进位C与直接地址的某位做AND的逻辑判断,结果存回进位C85.ANL C,/bit 2 2 将进位C与直接地址的某位的反相值做AND的逻辑判断,结果存回进位C86.ORL C,bit 2 2 将进位C与直接地址的某位做OR的逻辑判断,结果存回进位C87.ORL C,/bit 2 2 将进位C与直接地址的某位的反相值做OR的逻辑判断,结果存回进位C88.MOV C,bit 2 1 将直接地址的某位值存入进位C89.MOV bit,C 2 2 将进位C的值存入直接地址的某位90.JC rel 2 2 若进位C=1则跳至rel的相关地址91.JNC rel 2 2 若进位C=0则跳至rel的相关地址92.JB bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址93.JNB bit,rel 3 2 若直接地址的某位为0,则跳至rel的相关地址指令字节周期动作说明94.JBC bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0程序跳跃95.ACALL addr11 2 2 调用2K程序存储器范围内的子程序96.LCALL addr16 3 2 调用64K程序存储器范围内的子程序97.RET 1 2 从子程序返回98.RETI 1 2 从中断子程序返回99.AJMP addr11 2 2 绝对跳跃(2K内)100.LJMP addr16 3 2 长跳跃(64K内)101.SJMP rel 2 2 短跳跃(2K内)-128~+127字节102.JMP @A+DPTR 1 2 跳至累加器的内容加数据指针所指的相关地址103.JZ rel 2 2 累加器的内容为0,则跳至rel所指相关地址104.JNZ rel 2 2 累加器的内容不为0,则跳至rel所指相关地址105.CJNE A,direct,rel 3 2 将累加器的内容与直接地址的内容比较,不相等则跳至rel 所指的相关地址106.CJNE A,#data,rel 3 2 将累加器的内容与常数比较,若不相等则跳至rel所指的相关地址107.CJNE @Rn,#data,rel 3 2 将寄存器的内容与常数比较,若不相等则跳至rel所指的相关地址108.CJNE @Ri,#data,rel 3 2 将间接地址的内容与常数比较,若不相等则跳至rel所指的相关地址109.DJNZ Rn,rel 2 2 将寄存器的内容减1,不等于0则跳至rel所指的相关地址,等于0则顺序执行110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址111.NOP 1 1 无动作。