单片机指令系统
第3章AT89C51单片机指令系统
3.1 MCS-51单片机指令格式
计算机的指令系统是表征计算机性能的重要指标,每种计算机都有自己的指令系统。MCS—51单片机的指令系统是一个具有255种代码的集合,绝大多数指令包含两个基本部分:操作码和操作数。操作码表明指令要执行的操作的性质;操作数说明参与操作的数据或数据所存放的地址。
MCS—51指令系统中所有程序指令是以机器语言形式表示,可分为单字节、双字节、三字节3种格式。
用二进制编码表示的机器语言由于阅读困难,且难以记忆。因此在微机控制系统中采用汇编语言指令来编写程序。本章介绍MCS—51指令系统就是以汇编语言来描述的。
表3-1汇编指令与指令代码
标号:操作码目的操作数,源源操作数;注释
标号与操作码之间“:”隔开;
操作码与操作数之间用“空格”隔开;
目的操作数和源源操作数之间有“,”分隔;
操作数与注释之间用“;”隔开。
标号是由用户定义的符号组成,必须用英文大写字母开始。标号可有可无,若一条指令中有标号,标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址,在汇编时,把该地址赋值给标号。
操作码是指令的功能部分,不能缺省。MCS—51指令系统中共有42种助记符,代表了33种不同的功能。例如MOV是数据传送的助记符。
操作数是指令要操作的数据信息。根据指令的不同功能,操作数的个数有3、2、1或没有操作数。例如MOV A,#20H,包含了两个操作数A和#20H,它们之间用“,”隔开。注释可有可无,加入注释主要为了便于阅读,程序设计者对指令或程序段作简要的功能说明,在阅读程序或调试程序时将会带来很多方便。
3.2 寻址方式
所谓寻址方式,通常是指某一个CPU指令系统中规定的寻找操作数所在地址的方式,或者说通过什么的方式找到操作数。寻址方式的方便与快捷是衡量CPU性能的一个重要方面,MCS—51单片机有七种寻找方式。
3.2.1 立即数寻址
立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中。立即数只能作为源操作数,不能当作目的操作数。
例如:MOV A,#52H ;A 52H
MOV DPTR,#5678H ;DPTR←5678H
立即寻址示意图如3.1所示。
图3.1 立即寻址示意图
3.2.2直接寻址
在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。
例如:MOV A,52H ;把片内RAM字节地址52H单元的内容送累加器A中。
MOV 52H,A ;把A的内容传送给片内RAM的52H单元中。
MOV 50H,60H ;把片内RAM字节地址60H单元的内容送到50H单元中。
MOV IE,#40H ;把立即数40H送到中断允许寄存器IE。IE为专用功能寄存器,其字节地
址为0A8H。该指令等价于MOV 0A8H,#40H。
INC 60H ;将地址60H单元中的内容自加1。
图3.2直接寻址方式示意图
在
MCS-51单片机指令系统中,直接寻址方式可以访问2种存储空间:
(1)内部数据存储器的低128个字节单元(00H~7FH)
(2)80H~FFH中的(SFR)特殊功能寄存器。
这里要注意,指令MOV A,#52H与MOV A,52H指令的区别,后者表示把片内RAM字节地址为52H单元的内容传送到累加器(A)。
3.2.3寄存器寻址
由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址。寄存器一般指累加器A和工作寄存器R0~R7。例如:
MOV A,Rn ;A←(Rn)其中n为0~7之一,Rn是工作寄存器。
MOV Rn,A ;Rn←(A)
MOV B,A ;B←(A)
寄存器寻址方式的寻址范围包括:
·寄存器寻址的主要对象是通用寄存器,共有4组32个通用寄存器,但寄存器寻址只能使用当前寄存器组。因此指令中的寄存器名称只能是R0~R7。在使用本指令前,需通过对PSW中RS1、RS0位的状态设置,来进行当前寄存器组的选择。
·部分专用寄存器。累加器A、B寄存器以及数据指针DPTR等。
3.2.4寄存器间接寻址方式
由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器间接寻址。这里要注意,在寄存器间接寻址方式中,存放在寄存器中的内容不是操作数,而是操作数所在的存储器单元地址。
寄存器间接寻址只能使用寄存器Ro或Rl作为地址指针,来寻址内部RAM(00H~FFH)中的数据。寄存器间接寻址也适用于访问外部RAM,可使用R0,Rl或DPTR作为地址指针。寄存器间接寻址用符号“@”表示。例如:
MOV R0,#60H ;R0←60H
MOV A,@R0 ;A ← ((R0))
MOV A ,@R1 ;A ← ((R1))
指令功能是把Ro或R1所指出的内部RAM地址60H单元中的内容送累加器A。假定(60H)=3BH,则指令的功能是将3BH这个数送到累加器A。
例如,MOV DPTR,#3456H ;DPTR←3456H
MOVX A,@DPTR ;A ←((DPTR))
是把DPTR寄存器所指的那个外部数据存储器(RAM)的内容传送给A,假设(3456H)=99H,指令运行后(A)=99H。
同样,MOVX @DPTR,A;MOV @R1,A;也都是寄存器间接寻址方式。寄存器间接寻址方式的示意图如图3.3所示。
图3.3 寄存器间接寻址方式示意图
3.2.5位寻址
MCS-51单片机中设有独立的位处理器。位操作指令能对内部RAM中的位寻址区(20H~2FH)和某些有位地址的特殊功能寄存器进行位操作。也就是说可对位地址空间的每个位进行位状态传送、状态控制、逻辑运算操作。例如指令
SETB TR0 ;TR0←1
CLR 00H ;(00H)←0
MOV C,57H ;将57H位地址的内容传送到位累加器C中
ANL C,5FH ;将5FH位状态与进位位C相与,结果在C中
3.2.6基址寄存器加变址寄存器间接寻址
这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器(DPTR或PC)的内容为基本地址,加上变址寄存器A的内容形成16位的地址,访问程序存储器中的数据表格。例如;
MOVC A,@A + DPTR
MOVC A,@A + PC
JMP @A+DPTR
MOVC A,@A+DPTR
图3.4 变址寻址方式示意图
3.2.7相对寻址
相对寻址以程序计数器PC的当前值作为基地址,与指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。这种寻址方式用于相对转移指令中,指令中的相对偏移量是一个8位带符号数,用补码表示。可正可负,转移的范围为-128~+127。使用中应注意rel的范围不要超出。例如:
JZ LOOP
DJNE R0,DISPLAY
3.3 指令系统
3.3.1 指令分类
MCS-51指令系统有42种助记符,代表了33种功能,指令助记符与各种可能的寻址方式相结合,共构成111条指令。在这些指令中,单字节指令有49条,双字节指令有45条,三字节指令有17条;从指令执行的时间来看,单周期指令有64条,双周期指令有45条,只有乘法、除法两条指令的执行时间是4个机器周期。
按指令的功能,MCS-51指令系统可分为下列5类:
(1)数据传送类指令(29条)
(2)算术运算类指令(24条)
(3)逻辑运算及移位类指令(24条)
(4)位操作类指令(17条)
(5)控制转移类指令(17条)
在分类介绍指令前,先把描述指令的一些符号的意义作一简单介绍。
R n―当前选定的寄存器区中的8个工作寄存器R0~R7,即n=0~7。
Ri―当前选定的寄存器区中的2个寄存器R0、R1,i=0、1。
Direct—8位内部RAM单元的地址,它可以是一个内部数据区RAM单元(00H~7FH)或特殊功能寄存器地址(I/O端口、控制寄存器、状态寄存器80H~0FFH)。
#data—指令中的8位常数。
#data16—指令中的16位常数。
addr16—16位的目的地址,用于LJMP、LCALL,可指向64KB程序存储器的地址空间。
addr11—11位的目的地址,用于AJMP、ACALL指令。目的地址必须与下一条指令的第一个字节在同一个2KB程序存储器地址空间之内。
rel—8位带符号的偏移量字节,用于SJMP和所有条件转移指令中。偏移量相对于下一条指令的第一个字节计算,在—128~+127范围内取值。
bit—内部数据RAM或特殊功能寄存器中的可直接寻址位。
DPTR—数据指针,可用作16位的地址寄存器。
A—累加器
B—寄存器,用于MUL和DIV指令中。
C—进位标志或进位位。
@—间接寄存器或基址寄存器的前缀,如@Ri,@DPTR。
/—位操作的前缀,表示对该位取反。
(X)—X中的内容。
((X))—由X寻址的单元中的内容。
←—箭头左边的内容被箭头右边的内容所替代。
3.3.2 数据传送类指令
数据传送类指令一般的操作是把源操作数传送到指令所指定的目标地址。指令执行后,源操作数保持不变,目的操作数为原操作数所替代
数据传送类指令用到的助记符有:MOV,MOVX,MOVC,XCH,XCHD,PUSH,POP,SWAP。
数据一般传送指令的助记符“MOV”表示
格式:MOV [目的操作数],[源操作数]
功能:目的操作数←(源操作数中的数据)
源操作数可以是:A、Rn、direct、@Ri、#data
目的操作数可以是:A、Rn、direct、@Ri
数据传送指令一般不影响标志,只有一种堆栈操作可以直接修改程序状态字PSW,这样,可能使某些标志位发生变化。
1.以累加器为目的操作数的内部数据传送指令
MOV A,Rn;A←(Rn)
MOV A,direct;A←(direct)
MOV A,@Ri;A←((Ri))
MOV A,#data;A←data
这组指令的功能是:把源操作数的内容送入累加器A。例如:MOV A,#10H,该指令执行时,将立即数10H(在ROM中紧跟在操作码后)送入累加器A中。
2.数据传送到工作寄存器Rn的指令
MOV Rn,A;Rn←(A)
MOV Rn,direct;Rn←(direct)
MOV Rn,#data;Rn←data
这组指令的功能是:把源操作数的内容送入当前工作寄存器区的R0~R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0确定,可以是00H~07H、08H~0FH、10H~17H、18H~1FH。例如:MOV R0,A,若当前RS1、RS0设置为00(即工作寄存器0区),执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。
3.数据传送到内部RAM单元或特殊功能寄存器SFR的指令
MOV direct,A;direct←(A)
MOV direct,Rn ;direct←(Rn)
MOV direct1,direct2 ;direct1←(direct2)
MOV direct,@Ri;direct←((Ri))
MOV direct,#data ;direct←#data
MOV@Ri,A ;(Ri←(A)
MOV@Ri,direct ;(Ri)←(direct)
MOV@Ri,#data ;(Ri)←data
MOV DPTR,#data16 ;DPTR←data16
这组指令的功能是:把源操作数的内容送入内部RAM单元或特殊功能寄存器。其中第三条指令和最后一条指令都是三字节指令。第三条指令的功能很强,能实现内部RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部RAM之间的直接数据传送。最后一条指令是将16位的立即数送入数据指针寄存器DPTR中。
片内数据RAM及寄存器的数据传送指令MOV、PUSH和POP共18条,如图3.5所示。
图3.5 片内RAM及寄存器的数据传送指令
4.累加器A与外部数据存储器之间的传送指令
MOVX A,@DPTR;A←(DPTR)
MOVX A,@Ri ;A←((Ri))
MOVX@DPTR,A;(DPTR)←A
MOVX@Ri,A;(Ri)← A
这组指令是:在累加器A与外部数据存储器RAM单元或I/O口之间进行数据传送前两条指令执行时,P3.7引脚上输出有效信号,用作外部数据存储器的读选通信号;后两条指令执行时,P3.6引脚上输出有效信号,用作外部数据存储器的写选通信号。DPTR
所包含的16位地址信息由P0(低8位)和P2(高8位)输出,而数据信息由P0口传送,P0口作分时复用的总线。由Ri作为间接寻址寄存器时,P0口上分时Ri指定的8位地址信息及传送8位数据,指令的寻址范围只限于外部RAM的低256个单元。
片外数据存储器数据传送指令MOVX共4条,如图3.6所示。
图 3.6 片外数据存储器数据传送指令
5.程序存储器内容送累加器
MOVC A,@A+PC
MOVC A,@A+DPTR
这是两条很有用的查表指令,可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器,A的内容作为无符号数和PC的内容(下一条指令的起始地址)相加后得到一个16位的地址,并将该地址指出的程序存储器单元的内容送到累加器A。这条指令的优点是不改变特殊功能寄存器PC的状态,只要根据A的内容就可以取出表格中的常数。缺点是表格只能放在该条指令后面的256个单元之中,表格的大小受到了限制,而且表格只能被一段程序所利用。
第二条指令是以DPTR作为基址寄存器,累加器A的内容作为无符号数与DPTR内容相加,得到一个16位的地址,并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关,因此,表格的大小和位置可以在64KB程序存储器中任意安排,并且一个表格可以为各个程序块所公用。
程序存储器查表指令MOVC共2条,如图3.7所示。
图3.7 片外数据存储器数据传送指令
6.堆栈操作指令
PUSH direct
POP direct
在MCS-51单片机的内部RAM中,可以设定一个先进后出、后进先出的区域,称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。进栈指令的功能是:首先将堆栈指针SP的内容加1,然后将直接地址所指出的内容送入SP所指出的内部RAM 单元;出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元,接着将SP的内容减1。
例如:进入中断服务程序时,把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为60H。则程序段
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
执行后,SP内容修改为64H,而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容,当中断服务程序结束之前,如下程序段(SP保持64H不变)POP DPH
POP DPL
POP ACC
POP PSW
指令执行之后,SP内容修改为60H,而64H、63H、62、61H单元的内容依次弹出到DPH、DPL、A、PSW中。
MCS-51提供一个向上的堆栈,因此SP设置初值时,要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。
7.字节交换指令
数据交换主要是在内部RAM单元与累加器A之间进行,有整字节和半字节两种交换。
(1)整字节交换指令
XCH A,Rn;(A) (Rn)
XCH A,direct;(A) (direct)
XCH A,@Ri;(A) ((Ri))
(2)半字节交换指令
字节单元与累加器A进行低4
位的半字节数据交换。只有一条
指令。
XCHD A,@Ri
(3)累加器高低半字节交换指令
只有一条指令:
SWAP A
【例3-1】(R0)=30H,(A)=65H,(30H)=8FH 执行指令:XCH A,@R0 ;(R0)=30H,(A)=8FH,(30H)=65H
XCHD A,@R0 ;(R0)=30H,(A)=6FH,(30H)=85H
SW AP A ;(A)=56H
数据交换指令XCH、XCHD、和SW AP共5条,如图3.8所示。
图3.8 数据交换指令
3.3.3 算术运算类指令
算术运算类指令共有24条,包括加、减、乘、除4种基本算术运算指令,这4种指令能对8位的无符号数进行直接运算,借助溢出标志,可对带符号数进行补码运算;借助进位标志,可实现多精度的加、减运算,同时还可对压缩的BCD码进行运算,其运算功能较强。算术指令用到的助记符共有8种:ADD、ADDC、INC、SUBB、DEC、DA 、MUL、DIV。
算术运算指令执行结果将影响进位标志(Cy),辅助进位标志(Ac)、溢出标志位(Ov)。但是加1和减1指令不影响这些标志。对标志位有影响的算术运算指令见表3-10中,×表示指令运算的结果使该标志位置位或复位。
1.加法指令
加法指令分为普通加法指令、带进位加法指令和加1指令。
(1)普通加法指令
ADD A,Rn ;A←(A)+(Rn)
ADD A,direct ;A←(A)+(direct)
ADD A,@Ri ;A←(A)+((Ri))
ADD A,#data ;A←(A)+ data
这组指令的功能是将累加器A的内容与第二操作数相加,其结果放在累加器A中。相加过程中如果位7(D7)有进位,则进位标志Cy置“1”,否则清“0”;如果位3(D3)位有进位,则辅助进位标志Ac置“1”,否则清“0”。
对于无符号数相加,若Cy置“1”,说明和数溢出(大于255)。对于带符号数相加时,和数是否溢出(大于+127或小于-128),则可通过溢出标志OV来判断,若OV置为“1”,说明和数溢出。
【例3-2】(A)=85H,R0=20H,(20H)=0AFH,执行指令:
ADD A,@R0
结果:(A)=34H;Cy=1;AC=1;OV=1。
对于加法,溢出只能发生在两个加数符号相同的情况。在进行带符号数的加法运算时,溢出标志OV是一个重要的编程标志,利用它可以判断两个带符号数相加,和数是否溢出。
(2)带进位加法指令
ADDC A,Rn ;A←(A)+(Rn)+(Cy)
ADDC A,direct ;A←(A)+(direct)+(Cy)
ADDC A,@Ri ;A←(A)+((Ri))+(Cy)
ADDC A,#data ;A←(A)+ data+(Cy)
这组指令的功能与普通加法指令类似,唯一的不同之处是,在执行加法时,还要将上一次进位标志Cy的内容也一起加进去,对于标志位的影响也与普通加法指令相同。
【例3-3】(A)=85H,(20H)=0FFH,Cy=1执行指令:
ADDC A,20H
结果:(A)=85H;Cy=1;AC=1;OV=0。
(3)增量指令
INC A ;A←(A)+1
INC Rn ;Rn ←(Rn)+1
INC direct ;direct ←(direct)+1
INC @Ri ;(Ri)←((Ri))+1
INC DPTR ;DPTR ←(DPTR)+1
这组指令的功能是:将指令中指出的操作数的内容加1。若原来的内容为0FFH,则加1后将产生溢出,使操作数的内容变成00H,但不影响任何标志。最后一条指令是对16位的数据指针寄存器DPTR执行加1操作,指令执行时,先对低8位指针DPL的内容加1,当产生溢出时就对高8位指针DPH加1,但不影响任何标志。
【例3-4】(A)=12H,(R3)=0FH,(35H)=4AH,(R0)=56H,(56H)=00H 执行如下指令:INC A;执行后(A)=13H
INC R3;执行后(R3)=10H
INC35H;执行后(35H)=4BH
INC@R0;执行后(56H)=01H
(4)十进制调整指令
DA A
这条指令对累加器A参与的BCD码加法运算所获得的8位结果进行十进制调整,使累加器A中的内容调整为二位压缩型BCD码的数。使用时必须注意,它只能跟在加法指令之后,不能对减法指令的结果进行调整,且其结果不影响溢出标志位。
执行该指令时,判断A中的低4位是否大于9,若满足大于则低4位做加6操作;
同样,A中的高4位大于9则高4位加6操作。
例如:有两个BCD数36与45相加,结果应为BCD码81,程序如下:MOV A,#36H
ADD A,#45H
DA A
这段程序中,第一条指令将立即数36H(BCD码36H)送入累加器A;第二条指令进行如下加法:
得结果7BH;第三条指令对累加器A进行十进制调整,低4位(为0BH)大于9,因此要加6,最后得到调整的BCD码81。
2.减法指令
(1)带进位减法指令
SUBB A,Rn ;A←(A)-(Rn)-(Cy)
SUBB A,direct ;A←(A)-(direct)-(Cy)
SUBB A,@Ri ;A←(A)-(Ri)-(Cy)
SUBB A,#data ;A←(A)-data-(Cy)
这组指令的功能是:将累加器A的内容与第二操作数及进位标志相减,结果送回到累加器A中。在执行减法过程中,如果位7(D7)有借位,则进位标志Cy置“1”,否则清“0”;如果位3(D3)有借位,则辅助进位标志AC置“1”,否则清“0”。若要进行不带借位的减法操作,则必须先将Cy清“0”
(2)减1指令
DEC A ;A←(A)-1
DEC Rn ;Rn←(Rn)-1
DEC direct ;direct←(direct)-1
DEC @Ri ;(Ri)←((Ri))-1
这组指令的功能是:将指出的操作数内容减1。如果原来的操作数为00H,则减1后将产生溢出,使操作数变成0FFH,但不影响任何标志。
3.乘法指令
乘法指令完成单字节的乘法,只有一条指令:MUL AB
这条指令的功能是:将累加器A的内容与寄存器B的内容相乘,乘积的低8存放在累加器A中,高8位存放于寄存器B中,如果乘积超过0FFH,则溢出标志OV置“1”,否则清“0”,进位标志Cy总是被清“0”。
【例3-5】(A)=50H,(B)=0A0H,执行指令:
MUL AB
结果:(B)=32H,(A)=00H(即乘积为3200H),Cy=0,OV=1。
4.除法指令
除法指令完成单字节的除法,只有一条指令:DIV AB 这条指令的功能是:将累加器A中的内容除以寄存器B中的8位无符号整数,所得商的整数部分放在累加器A中,余数部分放在寄存器B中,清进位标志Cy和溢出标志OV为“0”。若原来B中的内容为0,则执行该指令后A与B中的内容不定,并将溢出标志置“1”,在任何情况下,进位标志Cy总是被清“0”。
算术运算类指令包括:ADD、ADDC、SUBB、MUL、DIV、INC、DEC和DA,如图3.9所示。
图3.9 算术运算类指令
3.3.4 逻辑运算指令
逻辑运算指令共有24条,分为简单逻辑操作指令、逻辑与指令、逻辑或指令和逻辑异或指令。逻辑运算指令用到的助记符有CLR、CPL、ANL、ORL、XRL、RL、RLC、RR、RRC。
1.简单逻辑操作指令
CLR A ;对累加器A清“0”
CPL A ;对累加器A按位取反
RL A ;累加器A的内容向左循环移1位
RLC A ;累加器A的内容带进位标志向左循环移1位
RR A ;累加器A的内容向右循环移1位
RRC A ;累加器A的内容带进位标志向右循环移1位
循环左移指令示意图:RL A
循环右移指令示意图:RR A
带进位的循环左移指令示意图:RLC A
带进位的循环右移指令示意图:RRC A
这组指令的功能是:对累加器A的内容进行简单的逻辑操作除了带进位的移位指令外,其他都不影响Cy、AC、OV等标志。示意图可以帮助我们进一步理解循环移位指令。
2.逻辑与指令
ANL A,Rn ;A←(A)∧(Rn)
ANL A,direct ;A←(A)∧(direct)
ANL A,@Ri ;A←(A)∧((Ri))
ANL A,#data ;A←(A)∧ data
ANL direct,A ;direct←(direct)∧(A)
ANL direct,#data ;direct←(direct)∧ data
这组指令的功能是:将两个操作数的内容按位进行逻辑与操作,并将结果送回目的操作数的单元中。
【例3-6】(A)=37H,(R0)=0A9H执行指令:
ANL A,R0
结果:(A)=21H
3.逻辑或指令
ORL A,Rn ;A←(A)∨(Rn)
ORL A,direct ;A←(A)∨(direct)
ORL A,@Ri ;A←(A)∨((Ri))
ORL A,#data ;A←(A)∨ data
ORL direct,A ;direct ←(direct)∨(A)
ORL direct,#data ;direct ←(direct)∨ data
这组指令的功能是:将两个操作数的内容按位进行逻辑或操作,并将结果送回目的操作数的单元中。【例3-7】(A)=37H,(P1)=09H执行指令:
ORL P1,A
结果:(A)=3FH
4.逻辑异或指令
XRL A,Rn ;A←(A)⊕(Rn)
XRL A,direct ;A←(A)⊕(direct)
XRL A,@Ri ;A←(A)⊕((Ri))
XRL A,#data ;A←(A)⊕ data
XRL direct,A ;direct ←(direct)⊕(A)
XRL direct,#data ;direct ←(direct)⊕data
这组指令的功能是:将两个操作数的内容按位进行逻辑异或操作,并将结果送回目的操作数的单元中。
图3.10 逻辑运算类指令
3.3.5 控制转移类指令
控制转移指令共有17条,不包括按布尔变量控制程序转移指令。其中有64K范围的长调用、长转移指令;2KB范围的绝对调用和绝对转移指令;有全空间的长相对转移和一页范围内的短相对转移指令;还有多种条件转移指令。由于MCS-51提供了较丰富的控制转移指令,因此在编程上相当灵活方便。这类指令用到的助记符共有10种:AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。
1. 无条件转移指令
(1)绝对转移指令
AJMP addr11
这是2KB范围内的无条件跳转指令,执行该指令时,先将PC+2,然后将addr11送入PC10~PC0,而PC15~PC11保持不变。这样得到跳转的目的地址。需要注意的是,目标地址与AJMP后一条指令的第一个字节必须在同一个2KB区域的存储器区域内。这是一条二字节指令,其指令格式为:
操作过程可表示为:PC←(PC)+2
PC10~0←addr11
例如程序存储器的2070H地址单元有绝对转移指令:
2070H AJMP 16AH(00101101010B)
因此指令的机器代码为:
程序计数器Pc当前=PC+2=2070H+02H=2072H,取其高5位00100和指令机器代码给出的11位地址00101101010最后形成的目的地址为:0010 0001 0110 1010B=216AH。
(2)相对转移指令
SJMP rel
执行指令时,先将PC+2,再把指令中带符号的偏移量加到PC上,得到跳转的目的地址送入PC。
目标地址=源地址+2+rel
源地址是SJMP指令操作码所在的地址。相对偏移量rel是一个用补码表示的8位带符号数,转移范围为当前PC值的-128~+127共256个单元。
若偏移量rel取值为FEH(-2的补码),则目标地址等于源地址,相当于动态停机,程序终止在这条指令上,停机指令在调试程序时很有用。MCS-51没有专用的停机指令,若要求动态停机可用SJMP指令来实现:
HERE:SJMP HERE;动态停机(80H,FEH)
或写成:HERE SJMP $;“$”表示本指令首字节所在单元的地址,使用它可省略标号。
(3)长跳转指令
LJMP addr16 ;PC ←addr16
执行该指令时,将16位目标地址addr16装入PC,程序无条件转向指定的目标地址。转移指令的目标地址可在64KB程序存储器地址空间的任何地方,不影响任何标志。
(4)间接转移指令(散转指令)
JMP @A+DPTR ;PC ←(A)+(DPTR)
这条指令的功能是把累加器A中的8位无符号数与数据指针DPTR的16位数相加(模216),相加之和作为下一条指令的地址送入PC中,不改变A和DPTR的内容,也不影响标志。间接转移指令采用变址方式实现无条件转移,其特点是转移地址可以在程序运行中加以改变。例如,当把DPTR作为基地址且确定时,根据A的不同值就可以实现多分支转移,故一条指令可完成多条条件判断转移指令功能。这种功能称为散转功能,所以间接指令又称为散转指令。
2. 条件转移指令
JZ rel ;(A)=0转移
JNZ rel ;(A)≠0转移
这类指令是依据累加器A的内容是否为0的条件转移指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面一条指令。转移的目标地址在以下一条指令的起始地址为中心的256个字节范围之内(-128~+127)。当条件满足时,PC←(PC)+2+ rel,其中(PC)为该条件转移指令的第一个字节的地址。
3. 比较转移指令
在MCS-51中没有专门的比较指令,但提供了下面4条比较不相等转移指令;
CJNE A,direct,rel ;(A)≠(direct)转移
CJNE A,#data,rel ;(A)≠ data转移
CJNE Rn,#data,rel ;(Rn)≠ data转移
CJNE @Ri,#data,rel ;((Ri))≠ data转移
这组指令的功能是:比较前面两个操作数的大小,如果它们的值不相等则转移。转移地址的计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数,则进位标志Cy置“1”,否则清“0”,但不影响任何操作数的内容。
4. 减1不为0转移指令
DJNZ Rn,rel;Rn←(Rn)-1≠0转移
DJNZ direct,rel;direct←(direct)-1≠0转移这两条指令把源操作数减1,结果回送到源操作数中去,如果结果不为0则转移。
5. 调用及返回指令
在程序设计中,通常把具有一定功能的公用程序段编成子程序,当子程序需要使用子程序时用调用指令,而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能返回主程序继续执行。
(1)绝对调用指令
ACALL addr11
这是一条2KB范围内的子程序调用指令,其指令格式为;
执行该指令时,PC ←PC+2
SP←(SP)+1,(SP)←(PC)7~0
SP←(SP)+1,(SP)←(PC)15~8
PC10~0←addr11
(2)长调用指令
LCALL addr16
这条指令无条件调用位于16位地址addr16的子程序。执行该指令时,先将PC+3以获得下条指令的首地址,并把它压入堆栈(先低字节后高字节),SP内容加2,然后将16位地址放入PC中,转去执行以该地址为入口的程序。LCALL指令可以调用64KB 范围内任何地方的子程序。指令执行后不影响任何标志。其操作过程如下:
PC ←PC+3
SP←(SP)+1,(SP)←(PC)7~0
SP←(SP)+1,(SP)←(PC)15~8
PC10~0←addr16
(3)子程序返回指令
RET
子程序返回指令是把栈顶相邻两个单元的内容弹出送到PC,SP的内容减2,程序返回PC值所指的指令处执行。RET指令通常安排在子程序的末尾,使程序能从子程序返回到主程序。
(4)中断返回指令
RETI
这是指令的功能与RET指令相类似。通常安排在中断服务程序的最后。
(5)空操作指令
NOP;PC ←PC+1
空操作也是CPU控制指令,它没有使程序转移的功能。只消耗一个机器周期的时间。常用于程序的等待或时间的延迟。
图3.11 条件转移类指令
3.3.6 位操作指令
MCS-51单片机内部有一个性能优异的位处理器,实际上是一个一位的位处理器,它有自己的位变量操作运算器、位累加器(借用进位标志Cy)和存储器(位寻址区中的各位)等。MCS-51指令系统加强了对位变量的处理能力,具有丰富的位操作指令。位操作指令的操作对象是内部RAM的位寻址区,即字节地址为20H~2FH单元中连续的128位(位地址
为00H~7FH),以及特殊功能寄存器中可以进行位寻址的各位。位操作指令包括布尔变量的传送、逻辑运算、控制转移等指令,它共有17条指令,所用到的助记符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC共11种。
在布尔处理机中,进位标志Cy的作用相当于CPU中的累加器A,通过Cy完成位的传送和逻辑运算。指令中位地址的表达方式有以下几种:
(1)直接地址方式:如0A8H;
(2)点操作符方式:如IE.0;
(3)位名称方式:如EX0
(4)用户定义名方式;如用伪指令BIT定义:
WBZD0 BIT EX0
经定义后,允许指令中使用WBZD0代替EX0
以上4种方式都是指允许中断控制寄存器IE中的位0(外部中断0允许位EX0),它的位地址是0A8H,而名称为EX0,用户定义名为WBDZ0。
1. 位数据传送指令
MOV C,bit ;Cy←(bit)
MOV bit,C ;bit←(Cy)
这组指令的功能是:把源操作数指出的布尔变量送到目的操作数指定的位地址单元,其中一个操作数必须为进位标志Cy,另一个操作数可以是任何可直接寻址位。
2.位变量修改指令
CLR C ;Cy ←0
CLR bit ;bit ←0
CPL C ;Cy ←(Cy)
CPL bit ;bit ←(bit)
SETB C ;Cy ←1
SETB bit ;bit ←1
这组指令对操作数所指出的位进行清“0”、取反、置“1”的操作,不影响其它标志。
3.位变量逻辑与指令
ANL C,bit ;Cy ←(Cy)∧(bit)
ANL C,/bit ;Cy ←(Cy)∧(/bit)
4.位变量逻辑或指令
ORL C,bit ;Cy ←(Cy)∨(bit)
ORL C,/bit ;Cy ←(Cy)∨(/bit)
位操作类指令如图3.12所示。
图3.12 位操作类指令
5.位变量条件转移指令
JC rel ;若(Cy)=1,则转移PC←(PC)+2+rel
JNC rel ;若(Cy)=0,则转移PC←(PC)+2+rel
JB bit,rel ;若(bit)=1,则转移PC←(PC)+3+rel
JNB bit,rel ;若(bit)=0,则转移PC←(PC)+3+rel
JBC bit,rel ;若(bit)=1,则转移PC←(PC)+3+rel,并bit←0
这组指令的功能是:当某一特定条件满足时,执行转移操作指令(相当于一条相对转移指令);条件不满足时,顺序执行下面的一条指令。前面4条指令在执行中不改变条件位的布尔值,最后一条指令,在转移时将bit清“0”。
图3.13 位条件转移指令
以上介绍了MCS-51指令系统,理解和掌握本章内容,是应用MCS-51单片机的一个重要前提。
【例3-8】指出下列程序段的每条指令的源操作数是什么寻址方式,并写出每步运算的结果。
【例3-9】用数据传送指令实现下列要求的数据传送。
(1)R0的内容输出到R1。
(2)内部RAM 20H单元的内容传送到A中。
(3)外部RAM 30H单元的内容送到R0。
(4)外部RAM 30H单元的内容送内部RAM20H单元。
(5)外部RAM 1000H单元的内容送内部RAM 20H单元。
(6)程序存储器ROM 2000H单元的内容送R1。
(7)ROM 2000H单元的内容送内部RAM 20H单元。
(8)ROM 2000H单元的内容送外部RAM 30H 单元。
(9)ROM 2000H单元的内容送外部RAM 1000H单元。
解:(1)MOV A,R0
MOV R1,A
(2)MOV A,20H
(3)MOV R0,#30H 或MOV R1,#30H
MOVX A,@R0 MOVX A,@R1
MOV R0,A MOV R0,A
(4)MOV R0,#30H 或MOV R1,#30H
MOVX A,@R0 MOVX A,@R1
MOV 20H,A MOV 20H,A
(5) MOV DPTR,#1000H
MOVX A,@1000H
MOV 20H,A
(6) MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R1,A
(7) MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20H,A
(8) MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R0,#30H
MOVX @R0,A
(9) MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV DPTR,#1000H
MOVX@DPTR,A
R单片机指令系统
第五章AVR单片机指令系统 计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。 AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。 SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。 AVR器件(指令速查表) 118条指令器件
1.不带进位加法 ADD一不带进位加 说明:两个寄存器不带进位C标志加,结果送目的寄存器Rd。 操作: RdRd+ Rr 语法:操作码:程序计数器: ADD Rd,Rr O≤d≤31,0≤r≤31 PCPC+1 例子:。(实践操作程序实践操作例子*.ASM,必须编译生成*.OBJ文件才可调试,如要修改*.ASM,必须修改文件属性,去掉*.ASM只读文件属性2.带进位加法 ADC-一带进位加 说明:两个寄存器和C标志的内容相加,结果送目的寄存器Rd。 操作: Rd←Rd+Rr+C 语法:操作码:程序计数器: ADC Rd,Rr 0≤d≤31,0≤r≤31 PC←PC+1 例子:(实践操作程序 3.减1指令 DEC一减1 说明:寄存器Rd的内容减1,结果送目的寄存器Rd中。 操作:RdRd-l 语法:操作码:程序计数器: DEC Rd 0≤d≤31 PCPC十1 例子:(实践操作程序 4.立即数比较 CPI——带立即数比较 说明:该指令完成寄存器Rd和常数的比较操作。寄存器的内容不改变。该指令后能 使用所有条件转移指令。 操作:Rd-K 语法:操作码:程序计数器: CPI Rd, K 16≤d≤31, 0≤ K≤255 PCPC + 1
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)比较不相等则转移;
关于习题二答案-单片机的指令系统
关于习题二答案-单片机的指令系统
1、执行下列3条指令后,30H单元的内容是( C )。 MOV R0,#30H MOV 40H,#0EH MOV @R0,40H A)40H B)30H C)0EH D)FFH 2、在堆栈中压入一个数据时(B)。 A)先压栈,再令SP+1 B)先令SP+1,再压栈 C)先压栈,再令SP-l D)先令SP-1,再压栈 3、在堆栈操作中,当进栈数据全部弹出后,这时的SP应指向 A 。 A)栈底单元 B)7FH
C)栈底单元地址加1 D)栈底单元地址减l 4、指令MOVC A,@A+PC源操作数的寻址方式是 D 。 A)寄存器寻址方式B)寄存器间接寻址方式 C)直接寻址方式D)变址寻址方式 5、ANL 20H,#30H指令中,源操作数的寻址方式是 A 。 A)立即寻址方式B)直接寻址方式 C)位寻址方式D)相对寻址方式 6、ANL C,/30H指令中,源操作数的寻址方式是 C 。
A)立即寻址方式 B)直接寻址方式 C)位寻址方式 D)相对寻址方式 7、Jz rel指令中,操作数rel的寻址方式是 D 。 A)立即寻址方式 B)直接寻址方式 C)位寻址方式 D)相对寻址方式 8、Jz rel指令中,是判断 A 中的内容是否为0。 A)A B) B C) C D)PC 9、MOVX A,@DPTR指令中源操作数的寻址方式是(B)
A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址 10、下面条指令将MCS-51的工作寄存器置成3区(B) A)MOV PSW,#13H (B)MOV PSW,#18H 11、MOV C,00H指令中源操作数的寻址方式是(A) A)位寻址B)直接寻址 C)立即寻址 D)寄存器寻址 1、8051单片机共有7 种寻址方式。访问外部数据存储器应采用寄存器间接寻址方式。 2、访问外部数据存储器应采用寄存器间接寻址方式;查表应使用变址寻址方式。 3、在8051单片机中,堆栈操作的指令有PUSH 和 POP两个。 4、在8051单片机中,子程序调用的指令有ACALL 和 LCALL两个。 5、CJNE指令都是 3字节字节指令。
第3章-MCS-51系列单片机的指令系统和汇编语言程序范文
第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H
AVR单片机指令系统
AVR单片机指令系统 计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。 AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。 SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。 AVR器件(指令速查表) 118条指令器件 AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/851 5,AT90S8534/8535算术和逻辑指令 BRCC k
C清零转 位指令和位测试指令ADD Rd,Rr 加法 BRSH k ≥转 SBI P,b 置位I/O位ADC Rd,Rr 带进位加
BRLO k 小于转(无符号) CBI P,b 清零I/O位◇ ADIW Rdl,K 加立即数 BRMI k 负数转移
LSL Rd 左移SUB Rd,Rr 减法 BRPL k 正数转移 LSR Rd 右移SUBI Rd,Rr
减立即数 BRGE k ≥转(带符号) ROL Rd 带进位左循环SBC Rd,Rr 带进位减 BRLT k 小于转(带符号)
ROR Rd 带进位右循环SBCI Rd,K 带C减立即数 BRHS k H置位转移 ASR Rd 算术右移◇ SBIW Rdl,K
MCS-51单片机指令系统
一、填空题 1、寻址是指( )。80C51单片机指令系统有7种寻址方式,分别是:( )。 2、访问内部RAM可以采用的两种寻址方式为:( )和( )。 3、MCS-51单片机指令的基本格式为:( )。 4、Rn代表( ),其中n的取值范围是( );Ri代表( ),其中i的取值范围是( )。@Ri的含义是( )。 5、在单片机指令中,30H和#30H的区别是( );R0和@ R0的区别是( );A←R1 和A←(R1) 的区别是( );DPTR和@DPTR的区别是( )。 6、汇编是指由( )“翻译”为( )的过程。 7、常用的伪指令有8条,试写出其中的5条( )、( )、( )、( )、( )。 8、LJMP指令的转移范围是(); AJMP指令的转移范围是(); SJMP指令的转移范围是()。 二、简答题 1、指出下列指令中的操作数的寻址方式。 (1)MOV R0,#30H (2)MOV A,30H (3)MOV A,@R0 (4)MOV @R0,A (5)MOVC A,@A+DPTR (6)CJNE A,#00H,30H (7)MOV C,30H (8)MUL AB (9)MOV DPTR,#1234H (10)POP ACC 2、80C51指令中,常用字符代表立即数或存储单元,试判断下列字符ABC的含义。(1)MOV A,#ABC (2)MOV A,ABC (3)MOV C,ABC (4)MOV DPTR,#ABC 3、若R0=11H,(11H)=22H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV A,R0 (2)MOV A,@R0 (3)MOV A,33H (4)MOV A,#33H 4、若A=11H,(11H)=22H,B=44H,写出执行下列指令后的结果。 (1)MOV R1,A (2)MOV R3,11H (3)MOV R3,#11H (4)MOV R3,B 5、若A=11H,R0=33H,(22H)=66H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV 40H,A (2)MOV 40H,R0 (3)MOV 40H,@R0 (4)MOV 40H,22H (5)MOV 40H,#22H 6、若A=11H,R0=33H,(22H)=66H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV @R0,A (2)MOV @R0,22H (3)MOV @R0,#22H 7、若 A=11H,R0=33H,B=44H,(11H)=22H,(22H)=66H,(33H)=44H,分别写出执行下列指令后的结果。 (1)MOV A,R0 (2)MOV B,#55H (3)MOV 40H,@R0 (4)MOV 11H,22H (5)MOV @R0,22H 8、试将30H、R7、B、A、PSW、DPTR中的数据依次压入堆栈。并指出每次堆栈操作后,SP=?、(SP)=?设原SP=60H,当前工作寄存器区为0区,(30H)=11H,R7=22H,B=33H,A=44H,PSW=55H,DPTR=6677H。 9、若A=78H,R0=34H,(34H)=DCH,(56H)=ABH,求分别执行下列指令后A和Cy中的数据。 (1)ADD A,R0 (2)ADDC A,@R0 (3)ADD A,56H (4)ADD A,#56H
51单片机的指令系统及试验
51单片机的指令系统及试验 在讲指令系统前我们先来复习一下数制的概念。1. 十进制(Decimal)基数是10,它有10个数字符号,即0,l,2,3,4,5,6,7,8,9。其中最大数码是基数减1,即9,最小数码是0。2.二进制(Binary)基数是2,它 只有两个数字符号,即0和1。这就是说,如果在给定的数中,除0和1外还有其它数,例如 1012,它就决不会是一个二进制数。3、十六进制(Hexadecilnal)基数是16,它有16个数字符号,除了十进制中的10个数可用外,还使用了6个英文字母。它的16个数字依次是0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A至F 分别代表十进制数的10至15,最大的数字也是基数减1。 4、二进制数与十六进制数的相互转换。(1)、二进制转换为十六进制:整数部分,从低位开始,小数部分,从高位开始,每四位一组(不够四位的补0),转换为对应的 十六进制数。例:(1 0001 0011.1100 0111)2=(113.C7)H (2)、十六进制转换为二进制:将十六进制数的每一位分别转换为对应的四位二进制数。例:(3E9D)H=(11 1110 1001 1101)B例:( 2ABE)H= 0010 1010 1011 1110B 以后我们在单片机编程方面采用十六进制,这个请大家 注意了!MCS-51系列单片机的指令系统共有111条指令,
其中49条是单字节指令,45条是双字节指令,17条是三字节指令。MCS-51的指令系统共有33个功能,用汇编编程时只需要42个助记符就能指明这33个功能操作。1、指令格式:MCS-51汇编语言指令格式与其他微机的指令格 式一样,均由以下几部分组成:[标号:]操作码 [操作数][,操作数][;注释]标号:又称为指令地址符号,地址的符号化,一般由1到6个字符组成,以字母开头的字母数字串,与操作码之间用冒号分开。操作码:是由助 记符表示的字符串,它规定了指令的操作功能。操作数:是指参加操作的数据和数据的地址。注释:是为该条指 令作说明,以便于阅读。注意:[ ]中表示为可选项。操作数可以为1、2、3个,也可以没有。不同功能的指令,操作数作用不同,如:传送指令多数有两个操作数,写 在左面的是目的操作数(表示操作结果存放的单元地址),写在右面的称为源操作数(指出操作数的来源)。操作码和操作数之间必须用空格分隔,操作数与操作数之间必 须用逗号“,”分隔。带方括号项可有可无,称为可选项。操作码是指令的核心不可缺少。2、指令分类 MCS-51的111条指令分为下面5类:(1)数据传送类 指令29条,分为片内RAM,片外RAM、程序存储器的传送指令,交换及堆栈操作指令。(2)算术运算类24条,分为加,带进位加,减,乘,除,加1,减1指令。(3)
MCS-51系列--单片机指令系统
机器语言指令格式: 单字节指令:操作码 双字节指令:操作码操作数 三字节指令:操作码第一操作数,第二操作数........................................................... 汇编语言指令格式: 标号:操作码目的操作数,源操作数;注释........................................................... 寻址方式: ①立即寻址方式---#data ②直接寻址方式---direc ③寄存器寻址方式---Rn ④寄存器间接寻址方式---@ ⑤变址寻址方式---@A+DPTR ⑥相对寻址方式---SJMP ⑦位寻址方式(MOV ACC.3,Cy) ........................................................... MCS-51系列单片机指令系统: 1数据传送指令: (1)内部RAM中一般数据传送指令 (2)16位数据传送指令 (3)累加器与外部数据存储器的数据传送指令
(4)访问程序存储器指令(5)堆栈操作指令 (6)数据交换指令 2算术运算指令: (1)加法指令 (2)减法指令 (3)乘法指令 (4)除法指令 (5)加1/减1指令 (6)BCD码调整指令 3逻辑运算指令: (1)逻辑“与”运算指令(2)逻辑“或”运算指令(3)逻辑“异或”运算指令(4)清零和取反指令 (5)循环移位指令 4转移和调用返回指令:(1)子程序调用和返回指令 ①绝对调用指令 ②长调用指令 ③子程序返回指令 ④中断返回指令
(2)转移指令: ①无条件转移指令 ②条件转移指令 (3)空操作指令 5位操作指令: (1)位传送指令 (2)位置位指令 (3)位清零指令 (4)位取反指令 (5)位逻辑运算指令........................................................... 指令系统中的常用符号: (1)A, #data, direct, Rn, @Rn, DPTR, PC (2)#data16, addr11, addr16, rel, B, Cy, bit, /bit ...........................................................
快速学习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则转移;
)1MCS51单片机的指令格式中操作码与操作数之间必须用.
第2章汇编语言----智能电子产品的指令系统 判断题 ()1.MCS—51单片机的指令格式中操作码与操作数之间必须用“,”分隔。 ()2.MCS—51指令:MOV A,#40H ;表示将立即数40H 传送至A 中。 ()3.MCS—51指令:MOV A,@R0 ;表示将R0指示的地址单元中的内容传送至A 中。()4.MCS—51 指令:MOVX A,@DPTR ;表示将DPTR 指示的地址单元中的内容传送至A 中。 ()5.MCS—51 的数据传送指令是把源操作数传送到目的操作数,指令执行后,源操作数改变,目的操作数修改为源操作数。 ()6.MCS—51指令中,MOVX 为片外RAM 传送指令。 ()7.MCS—51指令中,MOVC 为ROM 传送指令。 ()8.将37H 单元的内容传送至A的指令是:MOV A,#37H。 ()9.MCS—51指令中,16 位立即数传送指令是:MOV DPTR,#data16。 ()10.MCS—51 单片机,CPU 对片外RAM 的访问只能用寄存器间接寻址的方式,且仅有4 条指令。 ()11.如JC rel 发生跳转时,目标地址为当前指令地址加上偏移量。 ()12.对于8051 单片机,当CPU 对内部程序存储器寻址超过4K 时,系统会自动在外部程序存储器中寻址。 ()13.指令MUL AB 执行前(A)=F0H,(B)=05H,执行后(A)=FH5,(B)=00H。()14.已知:DPTR=11FFH 执行INC DPTR 后,结果:DPTR=1200H。 ()15.已知:A=11H B=04H,执行指令DIV AB后,其结果:A=04H,B=1 CY=OV=0。()16.已知:A=1FH,(30H)=83H,执行ANL A,30H 后,结果:A=03H (30H)=83H P=0。 ()17.无条件转移指令LJMP addr16 称长转移指令,允许转移的目标地址在128KB 空间范围内。 ()18.MCS—51 指令系统中,执行指令FGO bit F0 ,表示凡用到F0 位的指令中均可用FGO 来代替。 ()19.MCS—51指令系统中,执行指令ORG 2000H;BCD:DB “A,B,C,D”表示将A、B、C、D 的ASII 码值依次存入2000H 开始的连续单元中。
AT89C51单片机指令系统
第3章AT89C51单片机指令系统 难点 ?MCS-51单片机的寻址方式 ?数据传送指令和算术运算指令的使用 ?位操作和控制转移类指令的使用 要求 掌握: ?MCS-51单片机的寻址方式 ?指令系统的基本格式 ?指令系统的操作功能 了解: ?指令系统的基本格式 ?操作数的使用方法 ?指令系统的操作过程 3.1 MCS-51单片机指令格式 3.2 寻址方式 3.3 指令系统 3.1 MCS-51单片机指令格式 计算机的指令系统是表征计算机性能的重要指标,每种计算机都有自己的指令系统。MCS—51单片机的指令系统是一个具有255种代码的集合,绝大多数指令包含两个基本部分:操作码和操作数。操作码表明指令要执行的操作的性质;操作数说明参与操作的数据或数据所存放的地址。 MCS—51指令系统中所有程序指令是以机器语言形式表示,可分为单字节、双字节、三字节3种格式。 用二进制编码表示的机器语言由于阅读困难,且难以记忆。因此在微机控制系统中采用汇编语言指令来编写程序。本章介绍MCS—51指令系统就是以汇编语言来描述的。 表3-1汇编指令与指令代码 标号:操作码目的操作数,源源操作数;注释 标号与操作码之间“:”隔开; 操作码与操作数之间用“空格”隔开; 目的操作数和源源操作数之间有“,”分隔; 操作数与注释之间用“;”隔开。 标号是由用户定义的符号组成,必须用英文大写字母开始。标号可有可无,若一条指令中有标号,标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址,在汇编时,把该地址赋值给标号。 操作码是指令的功能部分,不能缺省。MCS—51指令系统中共有42种助记符,代表了33种不同的功能。例如MOV是数据传送的助记符。
8051单片机指令系统
8051 单片机指令系统
难点
MCS-51 单片机的寻址方式 数据传送指令和算术运算指令的使用 位操作和控制转移类指令的使用
要求
掌握:
MCS-51 单片机的寻址方式 指令系统的基本格式 指令系统的操作功能
了解:
指令系统的基本格式 操作数的使用方法 指令系统的操作过程
2.7.1
MCS-51 单片机指令格式
计算机的指令系统是表征计算机性能的重要指标,每种计算机都有自己的指令系统. MCS—51 单片机的指令系统是一个具有 255 种代码的集合,绝大多数指令包含两个基本部 分:操作码和操作数.操作码表明指令要执行的操作的性质;操作数说明参与操作的数据或 数据所存放的地址. MCS—51 指令系统中所有程序指令是以机器语言形式表示,可分为单字节,双字节, 三字节 3 种格式. 用二进制编码表示的机器语言由于阅读困难, 且难以记忆. 因此在微机控制系统中采用 汇编语言指令来编写程序.本章介绍 MCS—51 指令系统就是以汇编语言来描述的.
表 1 汇编指令与指令代码
代码字节 单字节 单字节 双字节 三字节
指令代码 84 A3 7410 B440 rel
汇编指令 DIV AB INC DPTR MOV A,#10H CJNE A,#40H,LOOP
指令周期 四周期 双周期 单周期 双周期
一条汇编语言指令中最多包含 4 个区段,如下所示: 标号: 操作码 目的操作数,源源操作数 ;注释
标号与操作码之间": "隔开; 操作码与操作数之间用"空格"隔开; 目的操作数和源源操作数之间有", "分隔; 操作数与注释之间用"; "隔开. 标号是由用户定义的符号组成,必须用英文大写字母开始.标号可有可无,若一条指令 中有标号,标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址, 在汇编时,把该地址赋值给标号. 操作码是指令的功能部分,不能缺省.MCS—51 指令系统中共有 42 种助记符,代表了 33 种不同的功能.例如 MOV 是数据传送的助记符. 操作数是指令要操作的数据信息.根据指令的不同功能,操作数的个数有 3,2,1 或没 有操作数.例如 MOV A,#20H,包含了两个操作数 A 和#20H,它们之间用","隔开. 注释可有可无, 加入注释主要为了便于阅读, 程序设计者对指令或程序段作简要的功能说明, 在阅读程序或调试程序时将会带来很多方便.
2.7.2
寻址方式
所谓寻址方式,通常是指某一个 CPU 指令系统中规定的寻找操作数所在地址的方式, 或者说通过什么的方式找到操作数.寻址方式的方便与快捷是衡量 CPU 性能的一个重要方 面,MCS—51 单片机有七种寻找方式.
1
立即数寻址
立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本 身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中.立即数只 能作为源操作数,不能当作目的操作数. 例如: MOV A,#52H ;A←52H MOV DPTR,#5678H ;DPTR←5678H 立即寻址示意图如 1 所示.
图 1 立即寻址示意图
MCS51单片机指令系统练习
第二章MCS51单片机指令系统与汇编语言程序设计 1.8051单片机的指令系统有何特点? 解: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.8051单片机指令系统按功能可分为几类?具有几种寻址方式?它们的寻址范围如何?解:MCS-51单片机指令系统按功能可分为5类: (1)数据传送指令 (2)算术运算指令 (3)逻辑运算和移位指令 (4)控制转移指令 (5)位操作指令 MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表: 3.访问特殊功能寄存器和外部数据存储器应采用哪种寻址方式? 解:访问特殊功能寄存器,应采用直接寻址、位寻址方式。 访问外部数据存储器,应采用寄存器间接寻址方式。 1
第二章MCS-51单片机指令系统
目录 第二章MCS-51单片机指令系统 (2) 第一节概述 (2) 一、指令格式 (2) 二、指令的三种表示形式 (2) 三、指令的字节数 (3) 四、指令按功能分类 (3) 五、指令系统综述 (3) 第二节寻址方式 (4)
第二章MCS-51单片机指令系统 总学时8学时 教学目的:1、了解指令字节数、指令分类和指令中所用的符号含义。 2、掌握判别指令的寻址方式。 3、掌握各类指令的格式、功能、含义和特点。 教学重点:1、指令的寻址方式。 2、指令的格式、含义、特点和功能。 3、使用指令的限制条件。 教学难点:1、指令寻址方式的意义。 2、相对寻址的意义及偏移量的计算。 3、堆栈操作时SP和堆栈变化规律。 教学方法:讲授法 教学过程:MCS-51单片机指令系统 第一节概述 一、指令格式 1、指令:计算机用于控制各种功能部件,完成某一指定动作的指示和命令。 2、指令格式:是指指令码的结构形式。指机器码的结构形式。通常指令可分为操作码和操 作数两部分,操作码部分比较简单,操作数部分比较复杂。因为MCS-51采用了地址压缩技术,大部分指令采用单地址指令格式:操作码操作数或操作数地址。这种格式的指令码中除操作数外通常还给出了一个操作数或操作数地址,称为单地址指令格式。 3、程序:完成不同功能的指令的有序集合。 二、指令的三种表示形式 识别指令的标志就是指令的表示形式。有二进制、十六进制和助记符三种形式。 1、指令的二进制形式:指令的二进制形式是一种可以直接被计算机识别和执行的形式。故 又称为指令的机器码或汇编语言的源程序的目标代码。 2、指令的十六进制形式:用十六进制数代替二进制中的二进制数,形成的指令格式称为十 六进制形式。主要用于阅读和通过键盘输入指令码。 3、指令的助记符形式:又称指令的汇编语言形式。由英文单词或英文单词缩写字母形象表 征指令的功能的形式。用于编写汇编语言源程序。 计算机只能识别和执行二进制形式,十六进制和汇编语言形式都必须通过人工和机器翻译成机器码形式,才能被计算机执行。这一过程称为汇编。 MCS-51单片机中常用的就是汇编语言形式(助记符形式)。其格式为: 标号:操作码第二操作数及操作数结果,第一操作数;指令功能解释语句 前面已经介绍过,第二操作数和操作数结果是放在累加器A中的,故,其格式简化为: 标号:操作码A,第一操作数;指令功能解释语句
MCS-51单片机指令系统
第三章MCS-51单片机指令系统 MCS-51单片机指令系统的特点: (1)指令执行时间快。 (2)指令短,约有一半的指令为单字节指令。 (3)用一条指令即可实现单字节数的相乘或相除。 (4)具有丰富的位操作指令。 (5)可直接用传送指令实现端口的输入输出操作。 3.1 MCS-51指令系统的分类、格式及一般说明 3.1.1 指令分类 ?按指令功能,MCS-51指令系统分为数据传送与交换、算术运算、逻辑运算、程序转移、布尔处理操作、CPU控制等6类。 ?布尔处理操作类指令又称位操作指令。 3.1.2 指令格式 ?在MCS-51指令中,一般指令主要由操作码、操作数组成。 ?指令应具有以下功能: (1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。 (2)操作数指明操作的数本身或者是操作数所在的地址。 (3)指定操作结果存放的地址。 Rn:当前选中的寄存器区中的8个工作寄存器R0~R7(n=0~7)。 Ri:当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。 Direct:8位的内部RAM单元中的直接地址。 #data:包含在指令中的8位立即数。 #data16:包含在指令中的16位立即数。 Addr16:16位目的地址。 Addr11:11位目的地址。 3.1.3 指令描述符号介绍 rel:8位带符号的偏移字节,简称偏移量。 DPTR:数据指针,可用作16位地址寄存器。 Bit:内部RAM或专用寄存器中的直接寻址位。 A:累加器。 B:专用寄存器,用于乘法和除法指令中。 C:进位标志/进位位或布尔处理机中的累加器。 @:间址寄存器或基址寄存器的前缀, 如@Ri,@DPTR。 / :位操作数的前缀,表示对该位操作数取反, 如/bit。 ×:片内RAM的直接地址或寄存器。 (×):由×寻址的单元中的内容。 ← :箭头左边的内容被右边的内容所代替。 3.2 寻址方式 3.2.1 立即寻址 操作数以指令形式出现,称作立即数,用加
第三章MCS51单片机的指令系统和汇编语言程序示例(第5.
第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节) 1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况? (1)MOV A,#19H ADD A,#66H (2)MOV A,#5AH ADD A,#6BH 2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少? (1)ADDC A,R0, (2)ADDC A,31H (3) ADDC A,@R0, (4) ADDC A,#85H 3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。 4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况? CLR C MOV A,#52H SUBB A,#0B4H 5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况? (1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R1 6.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。 7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。 8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么? (1)MOV A, #0FFH ANL A, R0 (2)MOV A, #0FH ANL A, 30H (3)MOV A, #0F0H ANL A, @R0 (4)MOV A, #80H ANL 30H, A 9.设:A=0AAH和P1=0FFH,试编程把累加器A的低四位送入P1口的低四位,P1口的高四位保持不变。 10.已知外部RAM30H中有一数AAH令高四位不变,低四位取反,试编出相应的程序。 11.已知:30H单元有一正数X,试编写求(-X)补码的程序。 12.如图所示,若X,Y,Z三个输入信号放在X,Y,Z三个单元中,试编写模拟电路功能的程序,并把电路输出送到F单元。