版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指令系统和程序设计●指令系统:CPU所能执行的全部指令集合§3.1指令系统概述一条指令是计算机中具有特定功能的操作命令●程序与程序设计按预定要求编排的指令序列称为。编排的过程称为机器语言二进制代码,是机器唯一能直接识别、执行的语言。汇编语言:指令助记符。用助记符,操作数,标号编写的程序称为汇编语言源程序。一、汇编语言
汇编语言机器语言机器执行●程序设计语言汇编语言高级语言(PLM;KeilCx51)翻译汇编:完成由汇编语言到机器代码的过程汇编的方法有两种:自动汇编、手工汇编由机器代码到汇编语言的过程叫反汇编汇编语言源程序机器语言
汇编程序
反汇编程序上页下页回目录自动汇编:将输入到计算机中的源程序,由机器中一个软件将其翻译成机器代码的过程。这个翻译软件称为汇编程序。二、汇编语言的格式[标号:]操作码[操作数][;注释]如:MAIN:MOVSP,#60H;设堆栈指针1、标号标号是该指令的符号地址,可根据需要设定必须以字母开始,以“
:”结束,长度不超过8个字符系统中的保留字符不能作标号,如:SFR名、ADD等标号可被其他语句的操作数可直接引用源程序中,一个标号只能定义一个语句,不能相重名字保持一义性上页下页回目录一个汇编语句分为四个区段:2、操作码由指令系统的助记符、伪指令助记符组成。操作码指出该指令将进行何种操作3、操作数:参加操作的数的本身或操作数所在的地址可为二进制数(B)、十进制数(D)、十六进制数(H)HEX:数字大于9,则数字应以“0”开头,如0FAH可以是操作数地址、立即数、标号、表达式如M+3目的操作数和源操作数之间用“,”分开可以是寄存器名如A、B、R0~R7、DPTR上页下页回目录4、注释以“
;”开头,是程序员对指令操作的解释,以帮助阅读、理解程序的意义可有可无,建议进行程序注释汇编时对这部分不予处理,不译成任何机器代码可用英语或某种简洁的方式解释指令上页下页回目录三、伪指令伪指令仅在汇编程序中起控制作用,不产生可执行目标代码。1、起点指令ORG格式:ORG××××H功能:指定程序或数据块的起始地址例:用法:一般出现在每段源程序或数据块的开始一个源程序可多次出现ORG指令ORG
0030HSTART:MOVA,#74H
┇;源程序的起始地址为0030H上页下页回目录2、结束命令END格式:END功能:汇编程序结束标志附在一个源程序的结尾一个源程序只能出现一次END指令3、定义字节命令DB格式:功能:标号:DB
字节常数或字符定义字节的内容,汇编程序把DB定义的字节依次存入标号开始的存储单元用法:上页下页回目录例:ORG8000HTAB:
DB45H,73,‘5’,‘A’TAB1:DB101B伪指令ORG定义了TAB的起始地址为8000H,伪指令DB定义了8000H~8003单元的内容依次为:(8000H)=45H(8001H)=49H;73(8002H)=35H;’5’(8003H)=41H;’A’(8004H)=05H;101BTABTAB1(1)由ORG定义(2)跟在其他源程序之后上页下页回目录4、定义字命令DW格式:功能:标号:DW字或字表定义若干个字(双字节)例:ORG8000HTAB:DW7234H,8AH,10(8000H)=72H(8001H)=34H(8002H)=00H(8003H)=8AH(8005H)=0AH汇编后:(8004H)=00H上页下页回目录5、定义空间命令DS格式:功能:标号:DS数据或字符及表达式例:(8008H)=30H(8009H)=8AH从指定单元地址开始,由数据或字符及表达式的值来定义应保留的单元数,备用ORG8000HDS08HDB30H,8AH即:8000H~8007H单元保留备用定义空间上页下页回目录6、等值命令EQU格式:字符名称EQU数据或汇编符号功能:将一个数据或汇编符号赋予标号段规定的字符例:JIASHUEQU30HBEIJIAEQU31HHEEQU32H上页下页回目录7、数据地址赋值命令DATA格式:字符名称DATA数据或表达式功能:此命令把数据/代码地址赋予标号段所规定的字符名称。定义的字符名称可先使用后定义INDEXJDATA8389HORG8000HINDEXJDATA8096HLJMPINDEXJENDORG8000HLJMP8096HEND;INDEXJ这个字符名称的地址为8389H例:上页下页回目录等价于EQU与DATA的区别(1)DATA与EQU相似,但DATA定义的字符名称,
可先使用后定义,EQU则不能(2)EQU指令可把汇编符号赋给字符名称,
DATA则不能(3)DATA可把表达式的值赋给字符名称,
EQU则不能DATA常在程序中定义数据地址EQU常在程序中定义字符数据上页下页回目录8、位地址符号命令BIT格式:字符名称BIT位地址功能:把位地址赋予一标号A1BITP1.0A2BITP2.0例:;P1.0,P2.0位地址赋予字符A1、A2,在编程时可以直接把A1、A2当成位地址使用上页下页回目录三、MCS-51指令系统的特点1、执行速度快,存储效率高MCS-51指令系统共有111条指令按字节分单字节指令49条双字节指令45条三字节指令17条按周期分单周期指令64条双周期指令45条四周期指令2条设时钟频率为12MHz,则指令执行的时间分别为:1s582s404s2影响程序存储器影响系统实时性上页下页回目录2、指令易掌握,功能强具有丰富的位操作指令、查表指令、散转指令乘除指令等。构成了完整的指令系统3、适合于控制、智能仪表布尔处理机,可进行“位”操作。上页下页回目录四、寻址方式(7种)⑴立即寻址⑵直接寻址⑶寄存器寻址⑷寄存器间接寻址⑸基址寄存器加变址寄存器间接寻址⑹相对寻址⑺位寻址上页下页回目录五、MCS-51指令分类(5类)⑴数据传送(29条)⑵算术运算(24条)⑶逻辑运算(24条)⑷控制转移(17条)⑸布尔处理(17条)共111条指令上页下页回目录介绍描述指令符号的意义—当前选中的寄存器区的8个工作寄存器(R0~R7)RnRidirect-——8位内部RAM单元地址00H~7FH——专用特殊功能寄存器SFR的地址80H~FFH——立即数(8位)#data#data16——立即数(16位)—当前选中的寄存器区中可做间址寄存器的2个工作寄存器(R0、R1)i=0、1n=0~7上页下页回目录addr16—16位目的地址,用于LCALL、LJMP指令
地址范围64KBROM空间addr11—11位目的地址,用于ACALL、AJMP指令
地址范围2KBROM空间relDPTR—数据地址指针,可做16位间址寄存器bit—内部RAM或SFR中的直接位寻址—8位带符号的偏移量,用于SJMP和所有的条件转移指令中范围-128~127上页下页回目录C—位累加器(PSW.7),进位/借位标志@—间址或基址寄存器前缀,如@Ri,@A+DPTR/—位操作的前缀,表示对该位操作数取反(X)—X中的内容((X))—由X寻址的单元中的内容箭头左边的内容被箭头右边的内容所代替@DPTR,@A+PC上页下页回目录§3.2MCS-51指令的寻址方式用何种方式寻找指令的操作数或指令的执行地址1、立即寻址寻址空间:指令形式:操作码立即数程序存储器指令操作数以指令形式存放在程序存储器中.即:操作码后面的一个字节是实际操作数立即寻址:用何种方式寻找OP#data上页下页回目录指令的寻址方式:指令的寻址方式:MOVA,#30H;A#30H例1:操作码立即数74H30HROM××MOVDPTR,#8000H;DPTR#8000H例2:操作码立即数的高8位立即数的低8位DPHDPL80H00H90H80HROM00H上页下页回目录2、直接寻址寻址空间:指令的三种形式:操作码操作数地址在指令中直接给出操作数的真实地址操作码后面的一个字节是实际操作数地址操作码操作数地址立即数操作码源操作数地址目的操作数地址内RAM的低128字节特殊功能寄存器SFR区直接寻址直接寻址是访问SFR的唯一方法上页下页回目录00H~7FH80H~FFHCPU内部上页下页回目录MOVA,30H;A(30H)例1:操作码操作数地址E5H30HROM××A内RAM××30H××ANL30H,#30H;30H(30H)∧#30H例2:操作码直接地址立即数53H30HROM30H××3、寄存器寻址寻址空间:指令的三种形式:操作码实际操作数是当前选定的寄存器的内容操作码立即数操作码直接地址R0~R7,由RS0、RS1确定寄存器区A、B、CY(位),DPTR、ABMOVA,R3;A(R3)例1:ADDA,R3;A(A)+(R3)例2:寄存器寻址:上页下页回目录4、寄存器间接寻址寻址空间:指令的三种形式:操作码操作码立即数操作码直接地址内部RAM(@R0,@R1,SP)外部RAM(@R0,@R1,@DPTR)寄存器间接寻址:指令选定的寄存器内容就是实际的操作数地址,操作数地址由寄存器间接给出上页下页回目录MOV@R0,A例1:操作码F6HROMR030H;累加器传送指令内RAM××30HA××××上页下页回目录MOVR0,#30H5、基址寄存器加变址寄存器间接寻址(变趾寻趾)基址寄存器加变址寄存器间接寻址:
以DPTR或PC作基址寄存器,A作变址寄存器两者相加形成操作数地址。寻址空间:程序存储器(@A+DPTR、@A+PC)指令形式:操作码上页下页回目录MOVDPTR,#2400HMOV A,#0FHMOVCA,@A+DPTR例:操作码DPTR2400HA
0FH93HROM……××240FH×ד读”PSEN“读”MOVCA,@A+DPTR上页下页回目录6、相对寻址程序存储器,用于程序控制寻址空间:指令的三种形式:操作码rel操作码
直接地址rel操作码
立即数rel相对寻址以当前PC值为基准地址,加上指令的偏移量“rel”,结果为目标地址。rel为有符号补码数,范围:-128~+127一般为双字节或三字节指令上页下页回目录JNZrel例:;累加器A不等零则转移设:rel=23H2025H2002H2001H2000HROM70H23H下一条指令.......操作码(PC)=2002Hrel=23H修正后转移目标地址D(PC)=2025HPC偏移量上页下页回目录(PC)=2002HRel=23H)005202HD=7、位寻址寻址空间:片内RAM的20H~2FH字节地址SFR中12个能被8整除的字节地址对内部RAM、SFR的位地址空间进行访问,称为位寻址。位地址用于布尔指令。共221位上页下页回目录寻址方式与相应的寻址空间小结:内RAM的低128字节特殊功能寄存器SFR直接寻址direct位寻址片内RAM20H~2FH部分SFRbit
寄存器R0~R7,A,BCY,DPTR片内寄存器间址@R0,@R1,SP
@R0,@R1,@DPTR片内RAM、片外RAM与I/O口立即数#data
程序存储器程序存储器基址加变址@A+DPTR,@A+PC程序存储器相对寻址PC+rel利用的变量
使用的空间方式§3.3MCS-51指令系统介绍MCS-51系统指令系统共111条,按操作功能分类:⑴数据传送类⑵算术运算类⑶逻辑运算类⑷控制转移类⑸布尔处理类上页下页回目录111条基本指令衍生出255种指令代码00H~0FFH(0A5H没有定义)例如:MOVA,Rn(n:0~7)对应指令代码:E8H~EFH学习指令要点:1、掌握指令操作;2、掌握指令的寻址方式;3、掌握指令对程序状态字(PSW)的影响;4、合理使用指令。一、数据传送类(29条)用到的指令助记符有5种:片内传送MOV片外传送MOVX查表传送MOVC累加器交换XCH、XCHD、SWAP堆栈操作PUSH、POP上页下页回目录一般的操作是把源操作数传送到目的操作数。指令执行后,源操作数不变,目的操作数修改为源操作数。数据传送指令不影响PSW各位(奇偶位除外),只有堆栈操作可直接修改PSW。1、MOV类传送指令格式:MOV〈目的字节〉〈源字节〉功能:把源字节内容送目的字节,源字节内容不变以累加器A为目的字节的传送:⑴立即数送累加器MOVA,#data74H立即数
机器码;立即数#data送累加器A
双字节指令,机器码的第一字节为74H,第二字节为立即数上页下页回目录⑵寄存器内容送累加器MOVA,Rn(n=0~7)工作寄存器组的选择由状态字中的RS0、RS1确定⑶内部RAM或SFR内容送累加器MOVA,direct;Rn的内容送累加器A;以direct为地址的单元的内容送累加器A上页下页回目录例:MOVR0,#30HMOVA,R0 例: MOV30H,#55HMOVA,30H⑷内部RAM内容送累加器MOVA,@Ri(i=0、1)如:MOV30H,#88HMOVR0,#30HMOVA,@R0;以Ri内容为地址单元中的数送累加器A以Rn为目的字节的传送:⑸立即数送寄存器MOVRn,#data(n=0~7);立即数#data送累加器Rn上页下页回目录如:MOVR0,#67H;
MOVR7,#0F0H⑹累加器内容送寄存器RnMOVRn,A(n=0~7);累加器A的内容送Rn⑺内部RAM或SFR内容送寄存器RnMOVRn,direct(n=0~7)如:MOVR1,30H;
MOVR2,60H;以direct为地址的单元的内容送寄存器Rn上页下页回目录如:MOVR0,A; MOVR5,A⑻立即数送内部RAM或SFRMOVdirect,#data;立即数#data送以direct为地址的单元如:MOV30H,#45;(30H)45⑼累加器内容送内部RAM或SFRMOVdirect,A;累加器送以direct为地址的单元如:MOV45H,A;(45H)A直接地址为目的字节的传送:⑽寄存器内容送内部RAM或SFRMOVdirect,Rn(n=0~7);寄存器Rn内容送以direct为地址的单元如:MOV56H,R6;56H(R6)⑾内部RAM或SFR之间直接传送MOVdirect1,direct2;内部RAM或SFR任意两个单元之间传送数据例:MOV30H,31H;30H(31H)上页下页回目录⑿内部RAM数据送内部RAM或SFRMOVdirect,@Ri(i=0、1)例:MOV20H,@R0;20H((R0));以Ri内容为地址单元中的数送内RAM或SFR⒀立即数送内部RAMMOV@Ri,#data(i=0、1);立即数#data送以Ri内容为地址的单元例:MOV@R1,#30;(R1)#30上页下页回目录⒁累加器内容送内部RAMMOV@Ri,A(i=0、1);累加器内容送以Ri内容为地址的单元例:MOV@R0,A;(R0)A⒂内部RAM或SFR数据送内RAMMOV@Ri,direct(i=0、1)例:MOV@R1,56H;(R1)(56);以direct为地址的单元内容送Ri内容为地址的单元上页下页回目录⒃16位立即数传送指令MOVDPTR,#data16;16位立即数送DPTR中,设置地址指针。例:MOVDPTR,#3000H
;DPH#30H
;DPL#00H上页下页回目录MOV类传送指令小结MOVA,#data立即数送累加器MOVA,Rn寄存器内容送累加器MOVA,direct直接地址内容送累加器MOVA,@Ri内部RAM内容送累加器MOVRn,#data立即数送寄存器MOVRn,A累加器内容送寄存器RnMOVRn,direct直接地址内容送寄存器Rn指令助记符说明字节2121212上页下页回目录MOV片内传送指令机器周期数1111111P364~367
MOV类传送指令小结MOVdirect1,direct2内RAM或SFR之间直接传送MOVdirect,@Ri内RAM数据送内RAM或SFRMOVdirect,#data立即数送内部RAM或SFRMOVdirect,A累加器内容送内RAM或SFRMOVdirect,Rn寄存器内容送内RAM或SFR指令助记符说明字节32232MOV@Ri,#data立即数送内RAMMOV@Ri,A累加器内容送内RAMMOV@Ri,direct内RAM数据送内RAM或SFRMOVDPTR,#data1616位立即数传送指令2123上页下页回目录MOV片内传送指令@RidirectRn#dataACC传送指令在片内数据存储器中传送操作例:将片内RAM30H单元的内容传送到片内RAM
地址为78H的单元。MOV78H,30H例:将片内RAM地址为30H、31H单元的内容传送到片内RAM地址为80H、81H单元中。MOVR0,#80HMOV@R0,30HMOV R0,#81HMOV@R0,31H例:将片内RAM地址为80H、81H单元的内容传送到片内RAM地址为90H、91H单元中。MOVR0,#81HMOVA,@R0MOV R1,#91HMOV@R1,AMOVR0,#80H;指向源地址MOVA,@R0;取出数据MOV R1,#90H;指向目的地址MOV@R1,A;进行数据传送属于简单程序的设计,其特点:既无分支,又无循环,按照顺序执行可完成一定的基本功能,是编写复杂程序的基础高128字节存储器的数据传送,采用间接寻址方式2、MOVX类传送指令累加器A与外部RAM传送数据用MOVX⑴外部RAM内容送累加器AMOVXA,@Ri(i=0、1)例:MOVP2,#30HMOVR0,#00HMOVXA,@R0 ;以Ri内容为外部RAM地址的单元中的数送A,外部数据存储器读指令。高8位地址由P2给出。⑵累加器内容送外RAMMOVX@Ri,A(i=0、1);累加器内容送以Ri内容为地址的外部RAM单元,外部数据存储器写指令。上页下页回目录⑶外部RAM送累加器A:读外部RAM单元内容MOVXA,@DPTR;以DPTR内容为地址的外部RAM单元中的数送A⑷累加器内容送外RAM:写数据到外部RAM单元MOVX@DPTR,A;累加器内容送以DPTR内容为地址的外部RAM单元例:将3000H内容送入3100H中
MOVDPTR,#3000HMOVXA,@DPTRMOVDPTR,#3100HMOVX@DPTR,AMOVX类传送指令小结
指令助记符说明字节1111MOVXA,@Ri外部RAM内容送累加器AMOVX@Ri,A累加器内容送外RAMMOVXA,@DPTR外部RAM单元内容送累加器AMOVX@DPTR,A累加器内容送外RAM单元MOVX片外传送指令例:将片外RAM120H单元的内容传送到片外RAM
地址为0078H的单元。MOVDPTR,#0120HMOVXA,@DPTRMOVX@DPTR,A;外部RAM送累加器A;累加器内容送外RAM上页下页回目录MOVDPTR,#0078H3、MOVC类传送指令MOVC为程序存储器传送指令,均为基址加变址寄存器寻址。MOVCA,@A+DPTR
;以DPTR作基址寄存器,A作变址寄存器,两者;相加形成16位ROM地址,将该单元内容读入A⑴以DPTR作基址加变址寻址上页下页回目录长查表指令MOVCA,@A+PC83H机器码⑵以PC作基址加变址寻址
;取指后PC增“1”,以当前PC作基址,A作变址,两者;相加形成16位ROM地址,将该单元内容读入A上页下页回目录短查表指令MOVC类传送指令小结指令助记符说明字节11MOVCA,@A+DPTRMOVCA,@A+PC以DPTR作基址加变址寻址以PC作基址加变址寻址上页下页回目录 MOVDPTR,#PFTAB MOVA,#03H MOVCA,@A+DPTR SJMP$例:根据累加器A中的数(0~9),查找对应的平方值。PFTAB:DB0,1,4,9,16,25DB36,49,64,81;数0-9的平方表
ENDORG0000HLJMPMAINORG0030HMAIN:MOVSP,#60HDPTR2000HA
03H09HMOVCA,@A+DPTR93HROM……00H2000H01H04H09H2001H2002H2003H…;设(A)=03H,查“3”的平方ALU上页下页回目录4、XCH、XCHD、SWAP类传送指令⑴寄存器内容与累加器内容交换XCHA,Rn(n=0~7);(A)(Rn)⑵内部RAM或SFR内容与累加器内容交换XCHA,direct(n=0~7);(A)(direct)上页下页回目录⑶内RAM内容与累加器内容交换XCHA,@Ri(i=0,1);(A)((Ri))⑷内部RAM内容低4位与累加器低4位内容交换XCHDA,@Ri(i=0,1);(A3~0)((Ri)3~0)上页下页回目录A(Ri)⑸累加器A高4位与低4位交换SWAPA;(A3~0)(A7~4)单字节指令上页下页回目录A例:MOVA,#56HSWAPA
交换类传送指令小结指令助记符说明字节12111XCHA,RnXCHA,direct寄存器内容与累加器内容交换直接地址内容与累加器内容交换XCHA,@RiXCHDA,@Ri内RAM内容与累加器内容交换内RAM内容低4位与累加器低4位交换SWAPA累加器A高4位与低4位交换上页下页回目录5、堆栈操作指令⑴进栈指令PUSHdirect第1步:SP自动增“1”,(SP)(SP)
+1第2步:direct地址单元的内容压入SP指向的单元⑵出栈指令POPdirect第2步:SP自动减“1”,(SP)(SP)
-1第1步、SP指向的单元内容弹出到以direct为地址的单元中上页下页回目录SPSP例:堆栈操作设(A)=55H,(B)=3FH’建立堆栈’压入操作’弹出操作
60H61H62H63H64H55H3FHSPMOVSP,#60HPUSHAPUSHBPOPPSWSP
结果:PSW的内容3FH,SP的内容为61H上页下页回目录PSW3FH二、算术运算类(24条)用到的指令助记符有8种:加法指令ADD带进位加法指令:ADDC带进位的减法指令:SUBB增1指令:INC减1指令:DEC乘除指令MUL除法指令:DIV十进制加法调整指令:DA算术运算类指令执行结果影响标志位:CY、AC、OV上页下页回目录1、不带进位加ADD⑴累加器内容加立即数ADDA,#data;A(A)+#data⑵累加器内容加寄存器内容ADDA,Rn(n=0~7);A(A)+(Rn)上页下页回目录例:计算12H+34H:
MOVA,#12HADDA,#34H例:MOVA,#12HMOVR0,#34HADDA,R0⑶累加器内容加内部RAM内容ADDA,@Ri(i=0,1);A(A)+((Ri))⑷累加器内容加内部RAM内容或SFRADDA,direct;A(A)+(direct)上页下页回目录ADD类指令小结指令助记符说明字节2112ADDA,#dataADDA,Rn立即数加到累加器寄存器内容加到累加器ADDA,@RiADDA,direct内RAM内容加到累加器直接地址内容加到累加器上页下页回目录2、带进位加ADDC⑴累加器内容加立即数加进位位ADDCA,#data;A(A)+#data+CY⑵累加器内容加寄存器内容加进位位ADDCA,Rn(n=0~7);A(A)+(Rn)+CY上页下页回目录⑶累加器内容加内RAM内容加进位位ADDCA,@Ri(i=0,1);A(A)+((Ri))+CY⑷累加器内容加内RAM内容或SFR加进位位ADDCA,direct;A(A)+(direct)+CY上页下页回目录指令符助记说明字节2112ADDCA,#dataADDCA,Rn立即数和进位加到累加器寄存器内容和进位加到累加器ADDCA,@RiADDCA,direct内RAM内容和进位加到累加器直接地址内容和进位加到累加器ADDC类指令小结上页下页回目录3、增量INC⑴累加器内容加“1”INCA;A(A)+1⑵寄存器内容加“1”INCRn;A(Rn)+1上页下页回目录⑶内RAM或SFR内容加“1”INCdirect;(Ri)((Ri))+1⑷内RAM内容加“1”INC@Ri;direct(direct)+1上页下页回目录⑸数据指针DPTR内容加“1”INCDPTR;DPTR(DPTR)+1INC指令中除INCA指令影响P标志位,其余指令不影响任何标志位上页下页回目录INC类指令小结指令助记符说明字节1121INCAINCRn累加器内容加“1”寄存器内容加“1INCdirect内部RAM或SFR内容加“1INC@Ri内部RAM内容加“1INCDPTR数据指针DPTR内容加“11上页下页回目录注意:ADDA,#1;INCA;ADDCA,#1 区别 4、十进制调整指令DAA;对累加器A,作BCD码加法后进行“过9补6”调整若[(A3~0)>9]∨[AC=1]
则(A3~0)(A3~0)+06H若[(A7~4)>9]∨[CY=1]则(A7~4)(A7~4)+60H注意:DA指令不能对BCD码减法的结果进行调整上页下页回目录5、减法指令SUBB⑴累加器减立即数和借位标志SUBBA,#data⑵累加器减寄存器内容和借位标志SUBBA,Rn(n=0~7);A(A)-#data-CY;A(A)-(Rn)-CY上页下页回目录⑶累加器减RAM内容和借位标志SUBBA,@Ri(i=0,1)⑷累加器内容减内RAM内容或SFR和借位标志SUBBA,direct;A(A)-((Ri))-CY;A(A)-(direct)-CY上页下页回目录SUBB类指令小结指令助记符说明字节2112SUBBA,#dataSUBBA,RnSUBBA,@RiSUBBA,direct累加器减立即数和借位累加器减寄存器内容和借位累加器减RAM内容和借位累加器减直接地址内容和借位上页下页回目录双字节求补设:两个字节原码数存在R1、R0中求补后结果,存在R3、R2中。例4-3:P122上页下页回目录
程序:
CLRC
CLRA
SUBBA,R0
MOVR2,ACLRASUBBA,R1
ORG0000HMOVR3,ASJMP$END;CY0;A0;低字节求补;送R2;A清零;高字节求补;送R3R0R1原码-)R2R300H00H存在借位双字节求补设:两个字节原码数存在R1、R0中求补后结果,存在R3、R2中。例4-3:P1226、减量DEC⑴累加器内容减“1”DECA;A(A)-1⑵寄存器内容减“1DECRn;Rn(Rn)-1上页下页回目录⑶内RAM或SFR内容减“1DECdirect;(Ri)((Ri))-1⑷内RAM内容减“1DEC@Ri;direct(direct)-1上页下页回目录DEC类指令小结指令助记符说明字节1121DECADECRn累加器内容减“1”寄存器内容减“1”DECdirect内RAM或SFR内容减“1”DEC@Ri内RAM内容减“1”上页下页回目录7、MULMULABDIVAB;执行(A)×(B)(BA)的操作CY=08、DIV;执行(A)/(B)后,商A余BCY=0上页下页回目录MOVA,20HMOVB,#10HDIVAB
MOVA,BADD
A,#30HMOV22H,AADDA,#30HMOV21H,AORG0000H
SJMP$
END例4-2:将一个字节内的压缩BCD码拆开并变成ASCII码,存入两个RAM单元。BCD码放在内部RAM的20H,转换后高半字节放到21H,低字节放22H。采用除10H取余法将两个BCD数拆开BCDHBCDL三、逻辑运算类(24条)用到的指令助记符有9种:包括与、或、异或、清除、求反、移位等操作ANL、ORL、XRL、CLR、CPL、RL、RLC、RR、RRC上页下页回目录1、逻辑与ANL(6条)⑴累加器内容逻辑与立即数ANLA,#data;A(A)∧#data⑵累加器内容逻辑与寄存器内容ANLA,Rn(n=0~7);A(A)∧(Rn)上页下页回目录⑶累加器内容逻辑与内RAM内容ANLA,@Ri(i=0,1);A(A)∧((Ri))⑷累加器内容逻辑与内RAM内容或SFRANLA,direct;A(A)∧(direct)上页下页回目录⑸累加器内容逻辑与内RAM或SFRANLdirect,A;direct(direct)∧A⑹立即数逻辑与RAM或SFRANLdirect,#data;direct(direct)∧#data上页下页回目录ANL类传送指令小结ANLA,#data立即数逻辑与累加器ANLA,Rn寄存器内容逻辑与累加器ANLA,direct直接地址内容逻辑与累加器ANLA,@Ri内RAM内容逻辑与累加器指令助记符说明字节2121ANLdirect,AANLdirect,#data累加器逻辑与内RAM或SFR立即数逻辑与RAM或SFR23上页下页回目录2、逻辑或ORL(6条)⑴累加器内容逻辑或立即数ORLA,#data;A(A)∨#data⑵累加器内容逻辑或寄存器内容ORLA,Rn(n=0~7);A(A)∨(Rn)上页下页回目录⑶累加器内容逻辑或内RAM内容ORLA,@Ri(i=0,1);A(A)∨((Ri))⑷累加器内容逻辑或内RAM内容或SFRORLA,direct;A(A)∨(direct)上页下页回目录⑸累加器内容逻辑或内RAM或SFRORLdirect,A;direct(direct)∨(A)⑹立即数逻辑或RAM或SFRORLdirect,#data;direct(direct)∨#data上页下页回目录ORL类传送指令小结ORLA,#data立即数逻辑或累加器ORLA,Rn寄存器内容逻辑或累加器ORLA,direct直接地址内容逻辑或累加器ORLA,@Ri内RAM内容逻辑或累加器指令符号说明字节2121ORLdirect,AORLdirect,#data累加器逻辑或内RAM或SFR立即数逻辑或RAM或SFR23上页下页回目录3、逻辑异或XRL(6条)⑴累加器内容逻辑异或立即数XRLA,#data⑵累加器内容逻辑异或寄存器内容XRLA,Rn(n=0~7);A(A)#data○+;A(A)(Rn)○+上页下页回目录⑶累加器内容逻辑异或内RAM内容XRLA,@Ri(i=0,1)⑷累加器内容逻辑异或内RAM内容或SFRXRLA,direct;A(A)((Ri))○+;A(A)(direct)○+上页下页回目录⑸累加器内容逻辑异或内RAM或SFRXRLdirect,A⑹立即数逻辑异或RAM或SFRXRLdirect,#data;direct(direct)(A)○+;direct(direct)#data○+上页下页回目录XRL类传送指令小结XRLA,#data立即数逻辑异或累加器XRLA,Rn寄存器内容逻辑异或累加器XRLA,direct直接地址内容逻辑异或累加器XRLA,@Ri内部RAM内容逻辑异或累加器指令助记符说明字节2121XRLdirect,AXRLdirect,#data累加器逻辑异或内部RAM或SFR立即数逻辑异或RAM或SFR23上页下页回目录例:根据累加器中4~0的状态修改P1端口位4~0的状态ANLA,#00011111BANLP1,#11100000BORLP1,A;A屏蔽前3位,保留后5位;A的后5位是“1”,使P1口相应位置“1”,P1前3位不变;P1屏蔽后5位,保留前3位上页下页回目录仅修改了P1
口的后5位“读”—“修改”—“写”4累加器清除与求反指令(2条)⑴累加器A清零CLRA;A00H⑵累加器A按位取反CPLA;A(A)上页下页回目录4移位指令(4条)⑴累加器内容循环左移一位RLAA7A0⑵累加器内容连同进位标志循环左移一位A7A0RLCACY上页下页回目录⑶累加器内容循环右移一位RRAA7A0⑷累加器内容连同进位标志循环右移一位A7A0RRCACY上页下页回目录
移位指令小结指令助记符说明字节1111RLARLCARRARRCA累加器循环左移累加器连同进位循环左移累加器循环右移累加器连同进位循环右移11CLRACPLA累加器A清零累加器A按位取反
累加器清除与求反指令小结上页下页回目录例:设(A)=5AH、CY=1RLARLCARRARRCA;(A)=B4H;(A)=2DH;(A)=B5H;(A)=ADH0101101001011010010110101CY010110101CY010100上页下页回目录四、控制转移指令(17条)控制转移指令共有17条:无条件转移指令条件转移指令子程序的调用返回等上页下页回目录1、无条件转移指令⑴长转移LJMPaddr16;PCaddr16addr15~802H
机器码addr7~0⑵绝对转移AJMPaddr11;PC10~0A10~0
,PC15~11不变AJMP将程序存储器分为32个区,由PC15~11决定,每个区2KB,分8页,由A10A9A8决定。只能在区内跳转。;PC(PC)+2转移范围2KB转移范围64KB上页下页回目录A7
~A0A10A9A800001PC15~PC11PC10PC9PC8PC7~
PC0…...在2区形成11位目标地址.........AJMP0区1区31区0000H07FFH0800H0FFFH1000H17FFHF800HFFFFH...1000H17FFH保持高5位地址以确定某区00010例如AJMPadd11
在2区的执行过程2区2KB范围内页内地址页地址操作码00001⑶短转移SJMPrel
;PC(PC)+rel指令中的rel是8位带符号补码,范围-128~+127。
;PC(PC)+2上页下页回目录⑷间接长转移JMP@A+DPTR;PC(A)+(DPTR);和送给了PC,控制程序转移到目的地址。上页下页回目录
无条件转移指令小结指令助记符说明字节3221长转移LJMPaddr16绝对转移AJMPaddr11短转移SJMPrel间接长转移JMP@A+DPTR上页下页回目录(散转指令)4.3.3分支程序设计根据前面程序运行结果,可以有N种选择,并转向其中任一处程序。例4-10128路分支程序:根据R3值转向128个目的地址。编程方法:顺序程序
MOVA,R3CJNEA,#00H,FZ1AJMPFZ00FZ1:CJNEA,#01H,FZ2AJMPFZ01FZ2:CJNEA,#02H,FZ3AJMPFZ02FZ3:….. 烦琐,程序太长。如作10000个分支程序…….JMP128: MOVA,R3 CLRC SUBBA,#128 JNC ERROR MOV A,R3 RLA MOVDPTR,#PRGTAL JMP @A+DPTRPRGTAL: AJMP ROUT00 AJMP ROUT01 ……. AJMPROUT7F ;入口条件检查;分支跳转;AJMP指令占2字节例4-10:P127128分支程序设计。使用JMP@A+DPTR指令实现之。分支程序应用场所:1、键盘按键处理程序根据所按功能键转到相应的功能子程序2、通信协议处理程序例:某键盘如下:通信编号设置采样时间设置+-确认MOV A,BCLR CSUBB A,#3JC FOUNRETFOUN:MOVA,B RL AADD A,B MOV DPTR,#KEYF JMP @A+DPTRKEYF:LJMPTONGXIN LJMPBIANHAOLJMPCAIYANG ;键编号则顺序执行2、条件转移指令⑴累加器为零则转移JZrel;若(A)=0,PC(PC)+2+rel;若(A)≠0,则PC(PC)+2JNZrel;若(A)≠0,PC(PC)+2+rel;若(A)=0,则PC(PC)+2⑵累加器不为零则转移上页下页回目录则转移则顺序执行则转移例:何时转LABEL1、何时转LABEL2?MOVA,R0CPLAJZLABEL1INC AJZLABEL2。。。。⑶累加器与立即数不等则转移CJNEA,#data,rel;若(A)=#data,则PC(PC)+3,CY0;若(A)>#data,PC(PC)+3+rel,CY0;若(A)<#data,PC(PC)+3+rel,CY1⑷寄存器与立即数不等则转移CJNERn,#data,rel;若(Rn)=#data,则PC(PC)+3,CY0;若(Rn)>#data,PC(PC)+3+rel,CY0;若(Rn)<#data,PC(PC)+3+rel,CY1上页下页回目录顺序转移转移顺序⑹累加器与内RAM或SFR不等则转移CJNEA,direct,rel;若(A)=(direct),则PC(PC)+3,CY0;若(A)>(direct),PC(PC)+3+rel,CY0;若(A)<(direct),PC(PC)+3+rel,CY1⑸内RAM与立即数不等则转移CJNE@Ri,#data,rel;若((Ri))=#data,则PC(PC)+3,CY0;若((Ri))>#data,PC(PC)+3+rel,CY0;若((Ri))<#data,PC(PC)+3+rel,CY1上页下页回目录顺序转移转移顺序⑺寄存器减“1”不等零则转移DJNZRn,rel(n=0~7)DJNZdirect,rel⑻内RAM或SFR减“1”不为零则转移;若(Rn)≠0,PC(PC)+2+rel;若(Rn)=0,则PC(PC)+2;Rn(Rn)-1;若(direct)≠0,PC(PC)+2+rel;若(direct)=0,则PC(PC)+2;direct(direct)-1上页下页回目录顺序转移转移顺序例:阅读子程序,分析功能FULL0:MOVR7,#100 CLRA MOVDPTR,#2000HFUL0:MOVX@DPTR,A INC DPTR DJNZR7,FUL0 RET上页下页回目录
条件转移类指令小结指令助记符说明字节223323JZrelJNZrelCJNEA,#data,relCJNERn,#data,relDJNZRn,relDJNZdirect,rel累加器A为零则转移累加器A不为零则转移累加器A与立即数不等则转移寄存器与立即数不等则转移寄存器减“1”不等零则转移内RAM或SFR减“1”不为零则转移CJNEA,direct,relCJNE@Ri,#data,rel间接RAM与立即数不等则转移累加器A与直接内RAM不等则转移33利用比较转移指令CJNE、减1不为“0”转移指令DJNZ等实现循环程序设计。例4-13:在内部RAM30H~4FH
连续32个单元中存放了单字节无符号数,求32个无符号数之和,并存入内部RAM51H,50H中。程序的流程图如下:上页下页回目录流程图:31→R7#0→R3(30H)→A#31H→R0CY=0?ENDSTART
(R7)-1=0?51H←(R3)50H←(A)YN(A)+((R0))→A(R0+1)→R0(R3)+1→R3上页下页回目录NY
程序:;R7作循环次数计数器;R3作和数高字节寄存器;取被加数;R0作加数地址指针;CY=0,和<256,则转;作加法;CY=1,加到高字节;修改R0指针;未完,重复加;存和数初始化部分循环体部分结束部分
ORG0000HSTART:MOVR7,#31MOVR3,#0MOVA,30HMOVR0,#31HLOOP:ADDA,@R0JNCNEXTINCR3NEXT:INCR0DJNZR7,LOOPMOV51H,R3MOV50H,ASJMP$END上页下页回目录循环执行直到R7=0循环控制3、子程序调用及返回指令⑴长调用LCALLaddr16;PCaddr16addr15~812H
机器码addr7~0;PC(PC)+3;SP(SP)+1,(SP)PC7~0;SP(SP)+1,(SP)PC15~8;在调用子程序之前,保护断点地址上页下页回目录⑵绝对调用ACALLaddr11;PC(PC)+2;SP(SP)+1,(SP)PC7~0;SP(SP)+1,(SP)PC15~8;在调用子程序之前,保护断点地址A10A9A810001A7
~A0机器码;PC10~0A10~0上页下页回目录⑶子程序返回RET;PC15~8((SP)),SP(SP)
-1⑷中断返回RETI上页下页回目录;PC7~0((SP)),SP(SP)
-1;PC15~8((SP)),SP(SP)
-1;PC7~0((SP)),SP(SP)
-1“0”触发器优先级状态4、空操作NOP;PC(PC)+1上页下页回目录
子程序调用及返回指令小结指令助记符说明字节32111LCALLaddr16长调用绝对调用ACALLaddr11子程序返回RET中断返回RETI空操作NOP上页下页回目录主程序:...LCALLDELY...子程序:不需主程序提供入口参数,从子程序开始到子程序返回,大约为20ms例4-23调用延时子程序DELYDELY:MOVR7,#100DLY0:MOVR6,#98NOPDLY1:DJNZR6,DLY1DJNZR7,DLY0RET子程序开始的标号子程序返回指令调用子程序上页下页回目录98×2=196µs1µs1µs设:主频为12MHZ2µs(196+2+2)×100+3=20003µs=20.003ms2µs1µs+3利用软件延时,使P1.0接口上的发光二极管每隔0.5秒闪烁一次.1、硬件设计2、软件设计子程序调用的现场保护
现场保护:
如果子程序使用的寄存器与主程序使用的寄存器有冲突,在转入子程序前,特别是进行中断服务子程序时,要进行现场保护。保护内容:内部RAM内容, 各工作寄存器内容,主程序正在使用累加器A、BDPTRPSW保护方式:将要保护的单元压入堆栈。还可以用RS1RS0来选择其他通用寄存器组,以便保护主程序现场。上页下页回目录例如:某子程序的现场保护BCDCB:PUSHACCPUSHPSWPUSHDPLPUSHDPH...POPDPHPOPDPLPOPPSWPOPACCRET推入与弹出应按照“先进后出”,或“后进先出”的顺序;;保护现场;;子程序功能语句;;恢复现场;;;上页下页回目录五、布尔处理类指令(17条)指令中位地址的助记符有多种表达方式:直接地址方式:如0D5H点操作符方式:如PSW.5位名称方式:如F0
用户定义名方式:如用伪指令BITUSRFLGBITF0经定义后,可用USRFLG代替F0上页下页回目录1、布尔传送类⑴直接寻址位送进位标志MOVC,bit;CY(bit)⑵进位标志送直接寻址位MOVbit,C;bit(CY)上页下页回目录2、布尔状态控制指令⑴清进位标志CLRC;CY
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年五金建材加盟协议
- 2025年分期家庭教育合同
- 《小岛失踪之谜》课件
- 2025年度绿色环保木材进口与销售合作合同范本大全4篇
- 二零二五年度冷链物流仓单质押贷款服务协议2篇
- 二零二五年度竞业禁止协议法律风险防控及合规咨询合同
- 二零二五年度商业地产地下车位销售及品牌推广协议
- 二零二五年度股份有限公司私下股份分配与公司战略协议书
- 二零二五版铝单板幕墙材料采购专项合同4篇
- 二零二五年度离婚协议中两个子女教育支持合同
- 玩具活动方案设计
- Q∕GDW 516-2010 500kV~1000kV 输电线路劣化悬式绝缘子检测规程
- 辽宁省抚顺五十中学2024届中考化学全真模拟试卷含解析
- 2024年湖南汽车工程职业学院单招职业技能测试题库及答案解析
- 家长心理健康教育知识讲座
- GB/T 292-2023滚动轴承角接触球轴承外形尺寸
- 2024年九省联考高考数学卷试题真题答案详解(精校打印)
- 军人结婚函调报告表
- 民用无人驾驶航空器实名制登记管理规定
- 北京地铁6号线
- 航空油料计量统计员(初级)理论考试复习题库大全-上(单选题汇总)
评论
0/150
提交评论