第三章 MCS-51单片机指令系统及汇编语言程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章MCS-51单片机指令系统及汇编语言程序设计内容提要:§3-1汇编语言与指令系统简介§3-2数据传送类指令§3-3算术运算类指令§3-4逻辑运算类指令§3-5控制转移类指令§3-6位操作类指令§3-7汇编语言的汇编过程§3-8汇编语言的程序设计及应用高级语言:§3-1汇编语言与指令系统简介一、汇编语言程序设计的意义什么是程序?完成某项特定任务的指令的集合。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,就应设计各种程序。汇编语言:机器语言:程序设计语言:用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。独立于机器,面向过程,接近自然语言和数学表达式.汇编语言程序的每一条语句都与计算机的某一条指令对应,所以必需熟悉指令系统。指令=操作码+操作数操作码——表示了该指令所能执行的操作功能。操作数——表示参加操作的数的本身或操作数所在的地址。MCS-51指令格式:[标号:]操作码助记符[第一操作数][,第二操作数][;注释](1)方括号[]表示该项是可选项,不必一定要出现。(2)标号是用户设定的符号,它实际代表该指令所在的地址。标号必须以字母开头,其后跟1~8个字母或数字,并以“:”结尾。(3)操作码是用英文缩写的指令功能助记符。它确定了本条指令完成什么样的操作功能。如:ADD表示加法操作。任何一条指令都必须有该助记符项,不得省略。(4)目的操作数提供操作的对象,并指出一个目标地址,表示操作结果存放单元的地址,它与操作码之间必须以一个或几个空格分隔。如上例中A表示操作对象是累加器A的内容,并指出操作结果又回送A存放。(5)源操作数指出的是一个源地址(或立即数),表示操作的对象或操作数来自何处。它与目的操作数之间要用“,”号隔开。(6)注释部分是在编写程序时,为了增加程序的可读性,由用户拟写对该条指令或该段程序功能的说明。它以分号“;”开头,可以用中文、英文或某些符号来表示,显然它不存入计算机,只出现在源程序中。二、MCS-51系列单片机的指令系统1、从功能分,分为五大类:数据传送类;(29条)算术运算类;(24条)逻辑运算类;(24条)控制转移类;(17条)位操作类:(17条)MCS-51指令系统用42种助记符表示了33类指令功能,有的功能需要用几种助记符表示,如数据传送用MOV、MOVC、MOVX。一种指令对应于机器码可多达8种,这样MCS-51指令系统共有111条指令。2、长度分:单字节;(49条)双字节;(45条)三字节;(17条)3、从执行时间分:单机器周期;(64条)双机器周期:(45条)只有乘、除法指令需要4个机器周期指令中操作数的描述符号:Rn——工作寄存器R0~R7Ri——间接寻址寄存器R0、R1Direct——直接地址,包括内部128BRAM单元地址、26个SFR地址。#data——8位常数#data16——16位常数addr16——16位目的地址addr11——11位目的地址rel——8位带符号的偏移地址DPTR——16位外部数据指针寄存器bit——可直接位寻址的位A——累加器B——寄存器BC——进、借位标志位,或位累加器@——间接寄存器或基址寄存器的前缀/——指定位求反(x)——x中的内容((x))——x中的地址中的内容$——当前指令存放的地址三、寻址方式寻找操作数存放单元的地址的方式,共6种方式。1、立即数寻址所要找的操作数是一二进制数或十进制已知数,用十六进制数表示,直接出现在指令中,用“#”作前缀,以表示并非地址。它作为指令的一部分与操作码一起存放在程序存储器内,可以立即得到并执行,不需要另去寄存器或存储器等处寻找和取数,故称为立即寻址。MOVA,#20H2、寄存器寻址操作数存放在工作寄存器R0~R7中,或寄存器B中。MOVA,R23、直接寻址指令中直接给出操作数的地址。例如:MOVA,40H;(A)←(40H)该指令的功能是把内部数据存储器RAM40H单元内的内容送到累加器A。指令直接给出了源操作数的地址40H。该指令的机器码为E5H40H。例如:MOV30H,#20H;将数值20H放入地址为30H的存储单元MOVR0,#30H;将地址值送入工作寄存器R0MOVA,@R0;A←((R0))此例执行的结果就是将20H这个立即数装入A中。期间经历了两次寻址,即间接寻址。4、寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,需要强调的是:寄存器的内容不是操作数本身,而是操作数地址。寄存器间接寻址使用所选定寄存器区中的R0和R1作为地址指针(对堆栈操作时,使用堆栈指针SP),来寻址片内数据存储器RAM(00~FFH)的256个单元,但它不能访问特殊功能寄存器SFR。寄存器间接寻址也适用于访问外部数据存储器,此时,用R0、R1或DPTR作为地址指针。寄存器间接寻址用符号“@”指明。5、变址寻址基址寄存器加变址寄存器间接寻址,简称变址寻址。它以数据指针DPTR或程序计数器PC作为基址寄存器,累加器A作为变址寄存器,两者的内容相加形成16位程序存储器地址,该地址就是操作数所在地址。即:操作数地址=变地址+基地址基地址寄存器DPTR或PC变址寄存器@A该寻址方式常用于访问程序存储器,查表。例如:MOVCA,@A+DPTR;(A)←((A)+(DPTR))变址寻址示意图MOVCA,@A+DPTR相对寻址是以当前程序计数器PC值加上指令规定的偏移量rel,而构成实际操作数地址的寻址方法。它用于访问程序存储器,常出现在相对转移指令中。在使用相对寻址时要注意以下两点:第一、当前PC值是指相对转移指令所在地址(一般称为源地址)加上转移指令字节数。即:当前PC值=源地址+转移指令字节数。例如:JZrel是一条累加器A为零就转移的双字节指令。若该指令地址(源地址)为2050H,则执行该指令时的当前PC值即为2052H。6.相对寻址第二、偏移量rel是有符号的单字节数,以补码表示,其相对值的范围是-128~+127(即00H~FFH),负数表示从当前地址向上转移,正数表示从当前地址向下转移。所以,相对转移指令满足条件后,转移的地址(一般称为目的地址)应为:目的地址=当前PC值+rel=源地址+转移指令字节数+rel例如:指令JZ08H和JZ0F4H(-12)表示累加器A为零条件满足后,从源地址(2050H)分别向下、向上转移10个单元。其相对寻址示意如图3―3(a)、(b)所示。这两条指令均为双字节指令,机器代码分别为:60H08H和60HF4H。图3―3相对寻址示意图(a)指令JZ08H寻址示意图;(b)指令JZF4H寻址示意图7.位寻址MCS—51系列单片机具有位寻址的功能,即指令中直接给出位地址,可以对内部数据存储器RAM中的128位和特殊寄存器SFR中的93位进行寻址,并且位操作指令可对地址空间的每一位进行传送及逻辑操作。例如:SETBPSW.3;(PSW.3)←1该指令的功能是给程序状态字PSW中的RS0置1。该指令为双字节指令,机器代码为D2HD3H,指令的第二字节直接给出位地址D3H(PSW.3的位地址)。7种寻址方式及使用空间巩固新课:1、汇编语言有何种特点?指令格式?2、MCS—51系列机共有多少条指令?分几类?3、MCS—51系列汇编语言指令有几种寻址方式?数据传送类指令共29条,它是指令系统中最活跃、使用最多的一类指令。一般的操作是把源操作数传送到目的操作数,即指令执行后目的操作数改为源操作数,而源操作数保持不变。若要求在进行数据传送时,不丢失目的操作数,则可以用交换型传送指令。按数据传送类指令的操作方式,又可把传送类指令分为3种类型:数据传送、数据交换和堆栈操作,并使用8种助记符:MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH及POP。§3-2数据传送类指令(1)除了用PUSH或MOV指令将数据传送到程序状态字外,数据传送类指令不影响进位标志CY、半进位标志AC和溢出标志OV,但当传送或交换数据后影响累加器A的值时,奇偶标志P的值则按A的值重新设定。(2)关于寻址方式对特殊功能寄存器SFR的操作必须使用直接寻址,这也是访问SFR的唯一方式;源操作数可用寄存器寻址、间接寻址、直接寻址、立即数寻址、变址寻址五种寻址方式;目的操作数可用寄存器寻址、间接寻址、直接寻址三种寻址方式。一、数据传送类指令的特点数据传送类指令片外程序存储器ROMEPROM特殊功能寄存器SFR片内RAM128字节片外数据存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHDSWAP内部数据存储器RAM区是数据传送最活跃的区域,可用的指令数也最多,共有16条指令,指令操作码助记符为MOV。内部RAM之间源操作数传递关系如图3―9所示。为了便于理解指令功能,我们按源操作数的寻址方式逐一介绍各条指令。二、一般数据传送指令1、内部RAM数据传送类(1)立即寻址。在该寻址方式下,内部RAM区数据传送指令有如下5条指令。操作码助记符目的操作数源操作数功能注释机器代码(H)MOVA,#data(A)←#data74dataMOVdirect,#data(direct)←#data75directdataMOV@Ri,#data((Ri))←#data76~77dataMOVRn,#data(Rn)←#data78~7FdataMOVDPTR,#data16(DPTR)←#data1690data15~8data7~0这组指令表明,8位立即数可以直接传送到内部数据区RAM的各个位置,并且可把16位立即数直接装入数据指针DPTR。指令的功能及应用举例如下:①MOVA,#data;(direct)←#data,74data该指令的功能是将立即数#data传送到累加器A中,对应的机器码为74H。它隐含了寄存器寻址累加器A方式,长一个字节,占用一个存储单元;立即数#data紧跟在操作码之后,成为指令代码的一部分,长也是一个字节,占用紧跟在后面的另一个存储单元。故该指令为双字节指令,其机器码为74Hdata。②MOVdirect,#data;(direct)←#data#,75directdata该指令的功能是把立即数传送到内部数据存储器RAM的00H~7FH,以及特殊功能寄存器SFR的各单元中去,它为三字节指令。例如把立即数40H传送到RAM的30H单元和P1口(口地址为90H),可采用如下指令:MOV30H,#40H;(30H)←#40H,753040MOVP1,#40H;(90H)←#40H,759040③MOV@Ri,#data;((Ri))←#data,76~77data该指令的功能是把立即数传送到由R0和R1寄存器的内容指出的片内数据存储器RAM的单元中去,该指令为双字节指令,MCS—51系列为00H~7FH,MCS—52系列为00H~FFH)。MOV@R0,#40H;((R0))←#40H,7640④MOVRn,#data;(Rn)←#data,78~7Fdata该指令的功能是把立即数传送到内部寄存器R0~R7中去,该指令为双字节指令,机器代码为:01111rrrdata⑤MOVDPTR,#data16;(DPTR)←#data16,90data15~8data7~0该指令的功能是把16位立即数装入数据指针DPTR中去。它是MCS—51系列单片机指令系统中唯一的一条16位数据传送指令。该指令为三字节指令,第一字节为90H,第二字节为高8位立即数,第三字节为低8位立即数。例如:MOVDPTR,#1234H指令执行后,DPTR寄存器的高8位寄存器DPH的内容为12H,低8位寄存器DPL内容为34H。该指令的机器代码为90H12H34H。(2)寄存器寻址。在该寻址方式下,内部RAM区数据传送指令有以下5条:MOVdirect,A;(direct)←(A),F5directMOV@Ri,A;((Ri))←(A),F6~F7MOVRn,A;(Rn)←(A),F8~FFMOVA,Rn;(A)←(Rn),E8~EFMOVdirect,Rn

1 / 71
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功