版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1主要内容汇编语言指令格式寻址方式各种指令功能、格式及应用2先导案例单片机的编程语言(a)机器语言
(b)汇编语言(c)C51语言3单片机的编程语言机器语言(MachineLanguage)是指直接用机器码编写程序、能够为计算机直接执行的机器级语言。汇编语言(AssemblyLanguage)是指用指令助记符代替机器码的编程语言。高级语言(High-LevelLanguage)是在汇编语言的基础上用高级语言来编写程序,通常用C51编程。4汇编语言指令格式[标号:] 操作码助记符 [操作数1,操作数2,操作数3][;注释]
例:
LOOP:ADDA#50H
,
;执行加法
标号:表示该指令所在的地址。通常在程序分支、转移所需要的地方才加上一个标号。标号是以字母开始的,由1-8个字符(字母或数字)组成,标号不能使用汇编语言中已经定义过的符号名。标号以“:”结尾。特别应注意的是,在一个程序中不允许重复定义标号。
操作码:表示该语句要执行的操作内容。操作码用指令助记符表示。操作码后面至少留一个空格,使其与后面的操作数分隔。
操作数:表示操作码的操作对象,常用符号(如寄存器、标号)、常量(如立即数、地址值等)来表示。各操作数之间用逗号“,”分隔。指令的操作数可以有三个、两个、一个或没有。
注释:该字段可有可无,是用户为阅读程序方便而加的解释说明。注释段以“;”开始,不影响程序的执行。5指令符号意义
符号含义Rn表示当前选定寄存器组的工作寄存器R0~R7Ri表示作为间接寻址的地址指针R0~R1#data表示8位立即数,即00H~FFH#data16表示16位立即数,即0000H~FFFFHaddr16表示16位地址,用于64K范围内寻址addr11表示11位地址,用于2K范围内寻址direct8位直接地址,可以是内部RAM区的某一单元或某一专用功能寄存器的地址Rel带符号的8位偏移量(-128~+127)Bit位寻址区的直接寻址位(X)X地址单元中的内容,或X作为间接寻址寄存器时所指单元的内容←将←后面的内容传送到前面去63.2寻址方式寻址方式是指CPU寻找操作数或操作数地址的方法。
5l系列单片机共有7种寻址方式:立即寻址直接寻址寄存器寻址间接寻址变址寻址相对寻址位寻址
7立即寻址
例如:
MOVA,#5CH;机器码为745CHMOVDPTR,#1234H;机器码为901234H8直接寻址
MOVA,40H ;机器码为E540H用直接寻址方式可访问的存储空间
1、内部RAM低128单元
2、特殊功能寄存器SFR
MOVA,PSW=MOVA,0D0H
9寄存器寻址
代表寄存器号为4(100B)
MOVA,R4;机器码为ECH(11101100B)10寄存器间接寻址
寄存器间接寻址就是所要查找的操作数位于以寄存器的内容为地址的单元中。寄存器间接寻址使用的寄存器为Ri或DPTR,并在寄存器名前面加“@”标志。和寄存器寻址相比,寄存器间接寻址时寄存器中存放的是操作数所在的地址,寄存器寻址时寄存器中存放的是操作数。用寄存器间接寻址方式可访问的存储空间
1、内部RAM低128单元
2、外部RAM64K
11例如:设(R0)=40H,(40H)=55H,执行指令
MOVA,@R0;机器码为E6H(11100110B)12相对寻址
相对寻址用于访问程序存储器,只出现在转移指令中,用于程序控制。目的地址=转移指令下一条指令所在的首地址+rel=转移指令首地址+转移指令字节数+rel13变址寻址例如:设(A)=05H,(DPTR)=1213H,(1218H)=45H,执行指令MOVCA,@A+DPTR;机器码是93H该条指令的功能是把累加器A中的内容05H与数据指针DPTR中的内容1213H相加形成操作数地址1218H,将1218H中的内容送入A,执行过程如图所示。14位寻址
位寻址类似于直接寻址,由指令给出位地址,操作数位于位地址中。1.直接使用位地址例:MOV C,00H2.单元地址加位的表示法例:MOV C,20H.03.位名称表示法例:MOV C,OV4.特殊功能寄存器名加位的表示法例:MOV C,PSW.215寻址空间寻址方式使用变量寻址空间立即寻址#data程序存储器(指令的常数部分)直接寻址direct片内RAM低128字节,特殊功能寄存器SFR寄存器寻址Rn,A,B,DPTR工作寄存器R0~R7,A,B,DPTR寄存器间接寻址@Ri,@DPTR片内RAM低128字节,片外RAM变址寻址@A+PC,@A+DPTR程序存储器(数据表)相对寻址PC+rel程序存储器256字节范围位寻址C,bit片内RAM的20H~2FH,特殊功能寄存器可寻址位(字节地址能被8整除的SFR中的各位)16数据传送类指令17direct@RiRn#dataA3.3.1内部传送指令MOVMOV目的操作数,源操作数功能:
把源操作数传送到目的操作数指定的存储单元之中,而不改变源操作数。是复制不是搬家源地址目的地址传送方向18传送指令MOVA,
Rn
#datadirect
@RiMOVdirect,ARn@Ri
#data
direct
MOVRn,Adirect
#dataMOV@Ri,Adirect
#data8位数据传送指令:16位数据传送指令:MOVDPTR,#data1619MOV指令应用例如:设(30H)=40H,(40H)=20H,(20H)=FFH,(P1)=55H。执行如下程序:
MOV R0,#30HMOV A,@R0MOV R1,AMOV B,@R1MOV @R1,P1MOV 10H,#20HMOV 30H,10H
则程序执行后结果为?20数据交换指令(1)字节交换指令XCH
XCHA,Rn ;(A)↔(Rn)XCHA,direct ;(A)↔(direct)XCHA,@Ri ;(A)↔((Ri))这组指令的功能是将累加器A的内容和源操作数互相交换。例:设(A)=80H,(R7)=08H,(40H)=0F0H,(R0)=30H,(30H)=0FH,连续执行指令XCHA,R7XCHA,40HXCHA,@R0结果为:(A)=?,(R7)=?,(40H)=?,(30H)=?21半字节交换指令XCHDXCHDA,@Ri ;(A)3~0↔((Ri))3~0功能:将累加器A的低4位与源操作数的低4位进行交换,各自的高4位不变。例如:(R0)=60H,(60H)=3EH,(A)=59H,执行指令XCHDA,@R0结果为:(A)=?,(60H)=?数据交换指令22SWAP累加器高低半字节交换指令SWAPSWAPA;(A)7~4↔(A)3~0功能:将累加器A中的高4位与低4位交换。例:设(A)=8FH,执行指令SWAPA结果为:(A)=?23堆栈指令PUSH和POP(1)入栈指令PUSHPUSHdirect ;SP←(SP)+1,(SP)←(direct)功能:把堆栈指针加1后,将直接地址单元的内容送进栈顶单元,原直接地址单元内容不变。
特点:该指令的操作数只有一个为源操作数,目的操作数已默认为堆栈区的栈顶位置。
例如:设(SP)=60H,(A)=30H,(B)=70H,执行下列指令
PUSH APUSH B
结果:(61H)=30H,(62H)=70H,(SP)=62H24(2)出栈指令POPPOP direct;direct←((SP)),SP←(SP)−1功能:将栈顶单元的内容传送给直接地址单元后,SP内容减1。例如:设(SP)=62H,(62H)=70H,(61H)=30H,执行下列指令
POP DPH POP DPL
结果:(DPTR)=7030H,(SP)=60H堆栈指令PUSH和POP253.3.2MOVX指令1.用@Ri进行间接寻址的指令
MOVXA,@Ri ;A←((Ri))
MOVX@Ri,A ;(Ri)←(A)功能:通过累加器A与外部RAM低256字节单元进行数据传送。例如:设(R1)=43H,(R0)=21H,片外RAM(43H)=65H,执行指令
MOVXA,@R1 MOVX@R0,A结果为:(A)=65H,片外RAM21H单元内容为65H。262.用@DPTR进行间接寻址的指令
MOVXA,@DPTR;A←((DPTR))
MOVX@DPTR,A;(DPTR)←(A)功能:通过累加器A与外部RAM进行数据传送。DPTR为16位数据指针,该指令可寻址外部RAM64KB范围(0000H~0FFFFH)。例如:将片外RAM2100H单元内容送到片外3000H单元中。
MOV DPTR,#2100H MOVXA,@DPTR MOV DPTR,#3000H MOVX@DPTR,A3.3.2MOVX指令273.3.3查表指令MOVC1.以DPTR为基址的查表指令MOVCA,@A+DPTR;A←((A)+(DPTR))
这条指令通过变址寻址方式,将A中的内容作为无符号数和DPTR中的内容相加后得到一个16位的地址,把该地址指向的程序存储器单元内容送到累加器A中。该指令中,DPTR常用于存放表格的起始地址。由于用户可以通过16位数据传送指令给DPTR赋值,因此该指令适用范围较为广泛,表格常数可以设置在64KBROM中的任何位置。28例如:分析执行下列程序后,累加器A的内容是?
MOV A,#01HMOV DPTR,#M2 ;将M2的地址送DPTRMOVC A,@A+DPTR ;A=(M2+1)=77HM1: RETM2: DB 66H,77H,88H,99H;定义一组数据表293.3.3查表指令2.以PC为基址的查表指令MOVC A,@A+PC ;A←((A)+(PC))这条指令通过变址寻址方式,将A中的内容作为无符号数和PC的当前值(即下一指令的起始地址)相加后得到一个16位的地址,把该地址指出的程序存储器单元内容送到累加器A中。这条指令以PC作为基址寄存器,当前的PC值是由该查表指令所在地址确定的,而变址寄存器A的内容为0~255,所以A和PC相加所得到的地址只能在PC当前值开始的256个单元的地址之内,因此所查的表格起始地址只能在该指令以下的255个单元内。30举例MOV A,#01HADD A,#01H ;修正A的值
MOVCA,@A+PC ;A=(PC+1+1)=77HM1: RETM2: DB 66H,77H,88H,99H;定义一组数据表修正量=表首地址−PC当前值31算术运算类指令323.4.1不带进位的加法指令ADDADDA,Rn ;A←(A)+(Rn)ADDA,#data ;A←(A)+#dataADDA,direct;A←(A)+(direct)ADDA,@Ri ;A←(A)+((Ri))
功能是把源操作数和累加器A的内容相加,其结果放入累加器A中。指令的执行会对进位标志CY、辅助进位标志AC、溢出标志OV及奇偶校验标志P产生影响。33例如:设(A)=84H,(30H)=8DH,(PSW)=00H,执行指令
ADD A,30H试分析运算结果及对各标志位的影响。不带进位的加法指令ADD运算结果为:(A)=11H;(PSW)=0C4H,其中(CY)=1,(AC)=1,(OV)=1,(P)=0。34加1指令增量指令INCINCA ;A←(A)+1INCdirect ;direct←(direct)+1INCRn ;Rn←(Rn)+1INC@Ri ;(Ri)←((Ri))+1INCDPTR ;DPTR←(DPTR)+135带进位的加法指令ADDC ADDCA,Rn ;A←(A)+(Rn)+(CY)
ADDCA,#data ;A←(A)+#data+(CY)
ADDCA,direct ;A←(A)+(direct)+(CY)
ADDCA,@Ri ;A←(A)+((Ri))+(CY)这组指令是把源操作数和累加器A内容及进位标志CY相加,将结果存放在累加器A中。运算结果对PSW对各位的影响与ADD加法指令相同。【例】设(A)=42H,(R3)=68H,(PSW)=80H,执行指令:ADDCA,R3
运算结果为:(A)=0ABH;(PSW)=05H,其中(CY)=0,(AC)=0,(OV)=1,(P)=1。36十进制调整指令DADAA
这条指令的功能是对累加器中由上一条加法指令所获得的8位运算结果进行十进制调整,使它变为压缩BCD码。该指令只能对BCD码加法运算结果进行调整,且“DAA”指令必须紧跟ADD或ADDC指令使用,它不能用于十进制数减法的调整。37例如:设(A)=42H,表示十进制数42的压缩BCD码。(R3)=68H,表示十进制数68的压缩BCD码,(PSW)=80H,执行指令
ADDC A,R3DA A则十进制调整指令DA383.4.2减法指令(1)带进位减法指令SUBBSUBBA,#data ;A←(A)−data−(CY)SUBBA,direct ;A←(A)−(direct)−(CY)SUBBA,Rn ;A←(A)−(Rn)−(CY)SUBBA,@Ri ;A←(A)−((Ri))−(CY)
功能:以累加器A中内容作为被减数,减去指定的操作数和进位标志,将运算结果存入累加器A中。会对PSW中的进位标志CY、辅助进位标志AC、溢出标志OV及奇偶校验标志P产生影响。如果运算中被减数D7位需要借位,则CY=1,否则CY=0;如果D3需要借位,则AC=1,否则AC=0。如果出现一个正数减一个负数得到的是负数,或一个负数减一个正数结果为正数,则OV被置l,否则OV被清0。39(2)减1指令DECDECA ;A←(A)−1DECdirect ;direct←(direct)−1DECRn ;Rn←(Rn)−1DEC@Ri ;(Ri)←((Ri))−1403.4.3乘除指令(1)乘法指令MULMULAB ;BA←(A)×(B)这条指令的功能是把累加器A和寄存器B中的无符号8位整数相乘,其16位积的低字节存放在累加器A中,高位字节存放在寄存器B中。该指令会影响进位标志CY、溢出标志OV及奇偶校验标志P。如果积大于255(0FFH),则溢出标志位OV=1,否则OV清零。进位标志CY总是清零。奇偶校验标志P取决于累加器A中1的个数。41(2)除法指令DIVDIVAB ;A←(A)/(B)的商,B←(A)/(B)的余数这条指令的功能是用累加器A的无符号8位整数除以寄存器B中的无符号8位整数,所得商存放在累加器A中,余数存放在寄存器B中。该指令会影响进位标志CY、溢出标志OV及奇偶校验标志P。如果除数B中的内容为0(即除数为0),则A和B中的内容不变,溢出标志OV=1,否则OV清零。进位标志总是清零。奇偶校验标志P取决于累加器A中1的个数。乘除指令42逻辑运算类指令43
逻辑与指令ANLANLA,#data;A←(A)∧dataANLA,direct;A←(A)∧(direct)ANLA,Rn ;A←(A)∧(Rn)ANLA,@Ri ;A←(A)∧((Ri))ANLdirect,A;direct←(A)∧(direct)ANLdirect,#data ;direct←(direct)∧data功能:把源操作数与目的操作数按位进行“与”运算,结果存入目的操作数单元中。除前4条指令影响P标志外,这组指令不影响其他标志位。逻辑与指令常用于屏蔽某些位。44例如:设(A)=27H,(R4)=0EDH,(PSW)=00H,执行指令
ANL A,R4运算结果:(A)=25H,(PSW)=01H,453.5.1逻辑运算指令逻辑或指令ORLORL A,#data ;A←(A)∨dataORL A,direct ;A←(A)∨(direct)ORL A,Rn ;A←(A)∨(Rn)ORL A,@Ri ;A←(A)∨((Ri))ORL direct,A ;direct←(A)∨(direct)ORL direct,#data ;direct←(direct)∨data功能
把源操作数与目的操作数按位进行“或”运算,结果存入目的操作数单元中。
逻辑或指令常用于对某些指定位置1。46举例例:已知(A)=35H,(30H)=78H,(PSW)=00H,执行指令ORL 30H,A则:(30H)=?,(PSW)=?473.5.1逻辑运算指令逻辑异或指令XRLXRL A,#data ;A←(A)
dataXRL A,direct ;A←(A)
(direct)XRL A,Rn ;A←(A)
(Rn)XRL A,@Ri ;A←(A)
((Ri))XRL direct,A ;direct←(A)
(direct)XRL direct,#data ;direct←(direct)
data功能:
把源操作数与目的操作数按位进行“异或”运算。结果存入目的操作数单元中。
常用于对某些指定位置进行取反操作。48举例例:设(A)=94H,(R3)=53H,(PSW)=00H,执行指令XRL A,R3
则(A)=?PSW=?49其他逻辑运算指令(1)累加器清0指令CLRA(2)累加器取反指令CPLA50A.0A.7A.0A.7A.0A.7A.0A.7CYCYRLARRARLCARRCA注意:执行带进位的循环移位指令之前,必须给CY置位或清零。3.5.2移位指令51逻辑指令综合实例例1:编程实现将累加器A的低四位传送到片内RAM20H的低四位,但片内RAM20H的高四位及A的内容不变。参考程序如下:
MOVR0,A ;A内容暂存R0 ANLA,#0FH ;屏蔽A的高四位(低四位不变)
ANL20H,#0F0H ;屏蔽20H的低四位(高四位不变)
ORL20H,A ;实现低四位传送
MOVA,R0 ;恢复A的内容52将片内RAM20H单元中存储的压缩BCD码拆开,将其转换成相应的ASCⅡ码,存入片内RAM21H和22H单元中,高位送22H单元。逻辑指令综合实例编程思路:首先将20H单元中压缩BCD码拆成两个半字节,数字0~9的ASCⅡ码为30H~39H,可通过将半字节的高4位与0011“或”运算实现。53例:设在30H和31H单元各有一个8位数据。(30H)=X7X6X5X4X3X2X1X0(31H)=Y7Y6Y5Y4Y3Y2Y1Y0将30H单元与31H单元进行拼装,并将结果存入50H单元,要求拼装后的(50H)=X5X4Y7Y6Y5Y4Y3Y2编程思路:
将30H中不需要的位清零,再依次左移2位;将31H中不需要的位清零再依次右移2位;最后完成拼装。54控制转移类指令553.6.1无条件转移指令LJMP/AJMP/SJMPAT89S51的程序存储器中有5个特殊地址单元,用于中断程序的入口地址。因此在编写程序的时候要通过转移指令LJMP/AJMP/SJMP跳过这段区域。
目的(1)长转移指令LJMP
LJMPaddr16 ;PC←addr16
(2)绝对转移指令AJMPAJMPaddr11
;PC←(PC)+2,;PC10~0←addr11(3)短转移指令SJMPSJMPrel
;PC←(PC)+2+rel56条件转移指令累加器判0转移指令
JZrel
;PC←(PC)+2,若(A)=0,则PC←(PC)+rel;
JNZrel
;PC←(PC)+2,若(A)≠0,则PC←(PC)+rel;这两条指令是对累加器A的内容为0和不为0进行检测以控制程序转移。当不满足各自的条件时,程序继续往下执行。当各自的条件满足时,程序转向指定的目标地址。57比较不相等转移指令CJNECJNEA,#data,rel
;PC←(PC)+3,若(A)≠data,则PC←(PC)+rel;CJNEA,direct,rel
;PC←(PC)+3,若(A)≠(direct),则PC←(PC)+rel;CJNERn,#data,rel
;PC←(PC)+3,若(Rn)≠data,则PC←(PC)+rel;CJNE@Ri,#data,rel
;PC←(PC)+3,若((Ri))≠data,则PC←(PC)+rel;58
这组指令是MCS-51指令系统里仅有的具有三个操作数的指令组。它的功能是对指令给出的前两个操作数进行比较,根据比较结果进行以下操作:(1)若第一操作数=第二操作数,程序顺序执行,进位标志位CY清0。(2)若第一操作数>第二操作数,程序转移,进位标志CY清0。(3)若第一操作数<第二操作数,程序转移,进位标志CY置1。比较不相等转移指令CJNE59减1不为0转移指令DJNZ
DJNZRn,rel;PC←(PC)+2,Rn←(Rn)−1,(Rn)≠0,PC←(PC)+rel;
DJNZdirect,rel;PC←(PC)+3,direct←(direct)−1,(direct)≠0,PC←(PC)+rel;以寄存器Rn为操作单元以内存地址direct为操作单元60子程序的调用与返回长调用绝对无条件调用子程序返回中断返回
RETI
61空操作指令
格式:
NOP
;PC←(PC)+1在执行这条指令时,CPU不作任何操作,仅消耗一个机器周期的时间。NOP指令常用于程序的等待或时间的延迟。62位操作指令633.7.1位操作指令1.位传送指令MOVC,bit ;CY←(bit)MOVbit,C ;bit←(CY)642.位逻辑运算指令位与指令
ANL C,bit ;CY←(CY)∧(bit)
ANL C,/bit ;CY←(CY)∧(2)位或指令
ORL C,bit ;CY←(CY)∨(bit)
ORL C,/bit ;CY←(CY)∨(3)位清零指令
CLR C ;CY←0 CLR bit ;bit←0位取反指令
CPL C ;CY←/CY CPL bit ;bit←/bit位置1指令
SETB C ;CY←1 SETB bit ;bit←1653.判位转移指令(1)判CY转移指令JCrel ;PC←(PC)+2,若(CY)=1,转移, PC←(PC)+rel;JNCrel ;PC←(PC)+2,若(CY)=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿童模仿训练方法
- 隐蔽工程验收规范
- 感染科院内感染控制流程培训
- 安全仪器监测工安全实操考核试卷含答案
- 制钉工安全培训效果知识考核试卷含答案
- 铜管乐器制作工安全风险竞赛考核试卷含答案
- 城市名人酒店管理
- 藏药材种植员岗前管理应用考核试卷含答案
- 中式烹调师标准化考核试卷含答案
- 儿童哮喘急性发作观察指南培训
- 《植物生产与环境》考试复习题库
- 二手餐饮设备回收合同范本
- 农村建房包工包料施工合同
- DB46 T 192-2010 麒麟菜栽培技术规程
- 中小学校长离任讲话发言稿
- 《做个诚实的孩子》课件
- 部编版小升初语文专项复习课件
- 风险监控指标汇总表
- 江苏师范大学成人继续教育网络课程《英语》单元测试及参考答案
- 小学科学教学经验交流课件
- 中考数学-隐藏的圆(图片版)课件
评论
0/150
提交评论