版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1汇编语言概述在众多的程序设计语言中,计算机唯一能直接识别和执行的语言是用二进制编码表示的机器语言。用机器语言编写的程序称为机器语言程序或指令程序(机器码程序)。因为机器只能直接识别和执行这种机器码程序,所以又称它为目标程序。与机器语言一样,汇编语言也是一种面向机器的语言,与计算机的硬件结构密切相关,不能在不同类型的计算机之间移植,同时使用汇编语言编程对程序设计人员要求也较高,为此,又出现了高级程序设计语言,如针对单片机的高级程序设计语言C51等。高级程序设计语言独立于特定机器,所开发的程序方便进行移植。本书对51单片机汇编语言和单片机C语言编程均进行了介绍。返回3.2指令格式和描述符号说明3.2.1指令格式汇编语言指令由标号、操作码助记符字段、操作数和注释字段四部分组成。指令格式如下:【标号:】操作码助记符【目的操作数】【,源操作数】【;注释】3.2.2指令中常用描述符号说明返回3.3寻址方式寻址方式就是寻找操作数地址的方式。而在3.2.1节指令格式中已说明,操作数有目的操作数和源操作数两种,因此寻址方式包含目的操作数寻址和源操作数寻址两种,若不特别声明,本书所指的寻址方式均指源操作数的寻址方式。51系列单片机的寻址方式共有七种,如表3.1所示。1.立即数寻址立即数寻址就是参与操作的数据(指源操作数)在指令中直接给出。这个直接给出的数据前面有“#”符号,称为立即数。下一页返回3.3寻址方式2.寄存器寻址寄存器寻址就是参与操作的数据由寄存器R0~R7(或DPTR、A、B等)给出的方式。3.直接寻址直接寻址就是参与操作的数据地址(指源操作数)在指令中直接给出,操作数存放在片内低128字节中和特殊功能寄存器SFR中,地址长度为8位。对于特殊功能寄存器,既可以使用它们的名字,也可以使用它们的地址。4.寄存器间接寻址以寄存器的内容作为操作数的地址,在间址寄存器前加“@”符号,这种寻址方式称为寄存器间接寻址。对于这种寻址方式,可使用的间址寄存器有R0、R1、DPTR和SP。51单片机中规定:上一页下一页返回3.3寻址方式(1)以R0、R1为间址寄存器,访问片内低128BRAM和片外256BRAM,它们两个的区别是访问片内指令用MOV,而访问片外指令用MOVX。(2)以DPTR为间址寄存器,访问片外64KBRAM。(3)用SP作为间址寄存器5.变址寻址以基址寄存器(DPTR和PC)的内容为基地址,加上变址寄存器中的内容,形成真正的操作数的地址,这种寻址方式称为变址寻址。变址寻址方式只能用于访问程序存储器ROM,多用于查表程序,范围为64KB。显然,这种访问方式只能从ROM中读取数据而不能写入数据。上一页下一页返回3.3寻址方式6.相对寻址相对寻址就是以程序计数器PC当前值为基准,加上相对偏移量rel得到的程序执行地址的寻址方式。偏移量rel的取值范围为-128~+127,以补码形式存放。这种寻址方式一般是用于修改PC的值,实现程序的分支跳转。转移的目的地址表达式为:目的地址=源地址+转移指令字节数+rel编程时,常将目的地址用地址标号表示,例如以下程序段:上一页下一页返回3.3寻址方式第6句使用的就是相对寻址方式,其所在地址为1008H,目的地址为1002H,第6句的指令长度为2字节,其相对偏移量rel=目的地址-源地址-转移指令字节数=1002H-1008H-2=-8H,用补码表示为F8H,即表示反向跳转8个字节。相对寻址示意图如图3.1所示。7.位寻址位寻址是将8位二进制数中的其中一位作为操作数,在指令中以位地址形式给出,参与操作运算,一般用bit表示。上一页返回3.4指令系统3.4.1数据传送类指令(29条)数据的传送是一种最基本、最主要的操作,是编程时使用最频繁的一种操作,通常不影响PSW的状态。数据传送类指令一般可分为两大类,一类是MOV类传送指令,采用MOV操作符;另一类是非MOV类传送指令,不采用MOV操作符。MOV类指令功能是将源字节的内容传送到目的字节,源字节内容不变,MOV是MOVE的缩写。主要有7种,1种16位数据传送指令,4种8位数据传送指令,2种MOV(指查表指令MOVC和片外数据传送类指令MOVX)扩展类指令。1.16位数据传送指令(1条)下一页返回3.4指令系统这是唯一的一条16位立即数传送指令,将16位立即数的高8位送入DPH,低8位送入DPL。在翻译成机器码时,也是高位字节在前,低位字节在后。如“MOVDPTR,#4321H”的机器码是“904321”,执行结果为:在机器码格式中,rrr为工作寄存器地址,rrr=000~111对应工作寄存器R0~R7的某一个。Ri为间接寻址寄存器,i=0或1,表示R0或R1。direct表示直接地址,data表示8位立即数本身。本组指令只影响PSW中的标志位P(表示累加器A中1的奇偶情况)。3.以寄存器Rn为目的操作数的指令(3条)上一页下一页返回3.4指令系统4.以直接地址为目的操作数的指令(5条)5.以间接地址为目的操作数的指令(3条)8位MOV类传送指令数据传送关系如图3.2所示。6.查表指令(2条)在51单片机指令系统中,有2条极为有用的查表指令,其数据表格放在程序存储器中。“MOVCA,@A+DPTR”指令以DPTR为基址寄存器进行查表。使用前,先给DPTR赋予一任意地址,所以查表范围可达整个程序存储器的64KB空间,称为远程查表。但若DPTR已赋值待用,装入新值之前必须保存其原值,可用栈操作指令PUSH保存。上一页下一页返回3.4指令系统7.累加器A与片外RAM传送指令(4条)在51单片机指令系统中,CPU对片外RAM或片外I/O外设芯片的访问只能用寄存器间接寻址的方式,且仅有4条指令。第一条/第三条指令以R0或R1为间址寄存器,也可以读/写整个64KB的片外RAM空间。指令执行时,高8位地址在P2中,由P2口输出;低8位地址在R0或R1中,由P0口分时输出,并由ALE信号锁存在地址锁存器中。第二条/第四条指令以16位DPTR为间址寄存器读/写片外RAM,可以寻址整个64KB的片外RAM空间。指令执行时,在DPH中的高8位地址由P2口输出,在DPL中的低8位地址由P0口分时输出,并由ALE信号锁存在地址锁存器中。上一页下一页返回3.4指令系统8.栈操作指令(2条)51单片机的堆栈设置在片内RAM的低128字节单元中,一般设在30H~7FH单元中,增长方向为向上型,即进栈时,栈指针向高地址的方向变化。栈顶指针SP复位值=07H,一般给SP赋新值,如30H。(1)PUSH(入栈)指令:单元中,属于直接寻址。本操作不影响标志位。(2)POP(出栈)指令:9.交换指令(5条)(1)字节交换指令(3条):上一页下一页返回3.4指令系统将源操作数所指定的工作寄存器Rn(R0~R7)内容、直接寻址或间接寻址的单元内容与累加器A中的内容互换。其操作如图3.3所示。(2)半字节交换指令(1条):这条指令为低位字节交换指令。该指令将累加器A的低4位与R0或R1所指出的片内RAM单元的低4位数据相互交换,各自的高4位不变。其操作如图3.4所示。(3)累加器半字节交换指令(1条):3.4.2算术运算类指令(24条)算术运算指令可以进行加、减、乘、除、加1、减1和BCD码十进制调整操作。这类多以A为操作数,运算结果再存回A中。这类指令一般都影响标志位,见表3.2。上一页下一页返回3.4指令系统1.不带进位加法指令(4条)这类指令结果存放于累加器A中。当加法运算结果的第3位或第7位有进位时,分别将AC和CY标志位置1;否则为0。参照表3.2,这类指令的运算结果影响标志位AC、CY、OV和P。当然,溢出标志位OV只有带符号数运算时才有用。2.带进位加法指令(4条)这组指令与上面ADD指令的区别是,运算时将进位标志位CY加到累加器A中,结果存放在A中,其余的功能和ADD指令相同。本指令常用于多字节加法。3.十进制调整指令(1条)上一页下一页返回3.4指令系统指令功能:本指令用于对累加器A中刚进行的两个BCD码的相加结果进行十进制调整,调整的结果仍为BCD码。使用时注意以下几点:(1)这条指令只能出现在ADD或ADDC指令之后。(2)不能用DA指令对BCD码减法进行直接调整,如需要,可将减法转换成补码相加,然后再用DA指令调整。(3)本指令不影响OV位。(4)借助标志位可实现多位BCD码加法结果的调整。4.带借位减法指令(4条)上一页下一页返回3.4指令系统这组指令的功能是把累加器A的内容减去进位位CY值和第二操作数的内容,将结果送入累加器A中。54带借位的减法指令可以实现多字节减法运算。由于51单片机指令系统中没有不带借位的减法指令,当使用此组指令完成不带借位的减法功能时,只需先将CY清0即可。5.加1指令(5条)这组指令的功能是将操作数内容加1,结果送回原单元。只有“INCA”影响标志P,其余操作都不影响PSW。6.减1指令(4条)上一页下一页返回3.4指令系统这组指令的功能是将操作数内容减1,结果送回原单元。只有“DECA”影响标志P,其余操作都不影响CY和PSW。7.乘法指令(1条)指令功能:把累加器A和寄存器B中的2个8位无符号数相乘,乘积的低8位留在A中,高8位存放在B中。当乘积大于0FFH、B中内容不为0时,OV置1;否则OV清0。8.除法指令(1条)指令功能:累加器A中的8位无符号整数除以寄存器B的8位无符号整数,所得的整数商存于A,余数存于B中。当存放除数的B为0时,除法无意义,结果无法确定,OV=1,否则OV=0。CY总是被清0。上一页下一页返回3.4指令系统3.4.3逻辑运算与循环类指令(24条)逻辑运算指令包括与、或、异或、清零和取反操作;循环指令可以完成对累加器A的循环左移、循环右移、带进位的循环左移和带进位的循环右移。1.逻辑“与”指令(6条)这组指令中的前4条功能是,将源操作数的内容和累加器A的内容按位“相与”,结果送入A中。后2条指令的功能是,将源操作数的内容和直接地址单元中的内容按位“相与”,结果存入直接地址单元中。2.逻辑“或”指令(6条)上一页下一页返回3.4指令系统这组指令中的前4条功能是将源操作数的内容和累加器A的内容按位“相或”,结果送入A中。后2条指令的功能是,将源操作数的内容和直接地址单元中的内容按位“相或”,结果存入直接地址单元中。3.逻辑“异或”指令(6条)这组指令中的前4条功能是将源操作数的内容和累加器A的内容按位“相异或”,结果送入A中。后2条指令的功能是,将源操作数的内容和直接地址单元中的内容按位“相异或”,结果存入直接地址单元中。4.累加器A清0指令(1条)汇编指令格式上一页下一页返回3.4指令系统5.累加器A取反指令(1条)6.移位指令(4条)(1)累加器A循环左移指令:(2)累加器A循环右移指令:汇编指令格式上一页下一页返回3.4指令系统(3)累加器A连同进位位循环左移指令:(4)累加器A连同进位位循环右移指令:上一页下一页返回3.4指令系统前两条指令的功能分别是,将累加器A的内容循环左移或右移一位;后两条指令的功能分别是,将累加器A的内容连同进位位CY一起循环左移或右移一位。此外,我们通常用“RLCA”指令将累加器A的内容做乘2运算。3.4.4控制转移类指令(17条)程序是顺序执行的,要改变程序的执行顺序,应通过改变PC的值来实现,这就是控制转移类指令的基本功能。51单片机控制转移类指令有无条件转移、空操作、条件转移、子程序调用与返回指令。1.无条件转移指令(4条)不规定转移条件的程序转移称为无条件转移,此类指令共有长转移、短转移、相对转移和散转移指令4条。(1)长转移指令(1条):上一页下一页返回3.4指令系统这是一条3字节指令,该指令能把16位目标地址(addr16)送入PC,转移范围可为64KB程序存储器地址空间的任何单元,因此称为长转移。在实际编程时,通常采用标号地址,如“LJMPLOOP”。转移操作如图3.5所示。(2)短转移指令(1条):上一页下一页返回3.4指令系统由于转移的地址是11位,而11位的地址范围是在2KB范围内(211=2K),故AJMP指令的转移范围是AJMP下一条指令第一个字节开始的2KB范围内。转移操作如图3.6所示。与LJMP指令类似,AJMP指令后面最好也用标号地址,但必须保证标号所处的地址与AJMP指令之间不超过2KB的寻址范围。(3)相对转移(短转移)指令(1条):上一页下一页返回3.4指令系统这是一条2字节指令,其功能是先计算目的地址,并按计算出的目的地址实现程序的相对转移。计算公式:目的地址=(PC)+2+rel(见3.3节寻址方式中的第6种相对寻址)因为本指令为双字节指令,执行时先将PC内容加2,再加相对地址rel,就得到了转移目标地址。其中rel是偏移量,本身是一个带符号的8位二进制数的补码表示形式,取值范围为-128~+127(00H~7FH对应表示0~+127,80H~FFH对应表示-128~-1)。负数表示反向转移,正数表示正向转移。上一页下一页返回3.4指令系统(4)散转移指令(1条):本指令以DPTR的内容为基址,以A的内容为变址,而将这两者的和形成目的地址,送入PC实现程序的转移。即:因此,只要把DPTR的值确定,而对A赋以不同的值,即可实现程序的多分支转移。上一页下一页返回3.4指令系统当(A)=00H时,程序将转到CS0处执行;当(A)=01H时,程序将转到CS1处执行;其余类推。由于AJMP是双字节指令,散转前A中键值应先乘以2。2.空操作指令(1条)这条指令不产生任何操作,只是将PC的内容加1,不影响其他寄存器和标志位。NOP指令常用来产生一个机器周期的延迟。3.条件转移指令(8条)上一页下一页返回3.4指令系统所谓条件转移是指程序的转移是有条件的。若条件满足,则程序转向指定的目的地址(目的地址是以下一条指令的起始地址为中心的-128~+127共256字节范围)去执行,否则仍顺序执行。(1)判零转移指令(2条):上一页下一页返回3.4指令系统(2)比较转移指令(4条):上一页下一页返回3.4指令系统(3)循环转移指令(2条):上一页下一页返回3.4指令系统4.调用和返回指令(4条)在一个程序中经常遇到反复执行某段相同的程序,如果把相同的程序编写为一个子程序,就可以通过主程序来调用它。这样不但减少了编写程序的工作量,而且也缩短了程序的长度。(1)长调用指令(1条):上一页下一页返回3.4指令系统(2)短调用指令(1条):(3)返回指令(2条):上一页下一页返回3.4指令系统3.4.5位操作类指令(17条)位操作指令的操作数是字节中的某一位,故又称为布尔操作。位指令执行时,以进位标志CY作为累加器,但用字符“C”表示。位地址有4种表示形式,以PSW中的第7位,CY为例,说明如下:上一页下一页返回3.4指令系统①直接地址方式,如0D7H;②点操作符方式,如D0H.7、PSW.7;③位名称方式,如CY;④伪指令定义方式,如C_FLAGBITCY。经定义后,允许指令中用C_FLAG代替CY。1.位数据传送指令(2条)上一页下一页返回3.4指令系统2.位值设置指令(6条)(1)位清0指令(2条):(2)位置1指令(2条):上一页下一页返回3.4指令系统(3)位取反指令(2条):3.位逻辑运算指令(4条)(1)位逻辑“与”指令(2条):上一页下一页返回3.4指令系统(2)位逻辑“或”指令(2条):4.位条件转移类指令(5条)(1)判布尔累加器C转移指令(2条):上一页下一页返回3.4指令系统(2)判位变量转移指令(2条):上一页下一页返回3.4指令系统。(3)判位变量并清0转移指令(1条):上一页下一页返回3.4指令系统本条指令对指定的二进制位进行检测,若该位是“1”,则将其清0,同时PC转移到指定的目的地址执行程序;否则,顺序执行。本指令常在定时/计数器查询方式中使用。上一页返回3.5伪指令1.定位伪指令(ORG)格式:[标号:]ORG16位地址表达式功能:说明后面程序紧接程序段或数据段存放的起始地址。2.定义字节数据伪指令(DB)格式:[标号:]DB字节数据表功能:从标号指定的地址单元开始,在程序存储器中定义字节数据。字节数据表可以是一或多个字节数据、括在单引号(′
′)中的ASCII字符串或表达式。将字节数据表中的数据从左到右依次存放在指定地址单元。3.定义字数据伪指令(DW)格式:[标号:]DW字数据表下一页返回3.5伪指令功能:从标号指定的地址单元开始,在程序存储器中定义16位的字数据。与DB类似,但DW定义的数据项为字,包括两个字节,高位字节先存放,低位字节后存放。4.定义空间伪指令(DS)格式:[标号:]DS表达式功能:从指定的地址开始,在程序存储器中保留表达式所规定的存储单元,作备用空间。5.赋值伪指令(EQU)格式:符号名EQU数据或汇编符号上一页下一页返回3.5伪指令功能:将一个数值或特定的汇编符号赋值给指定的符号名。符号名用EQU伪指令赋值后,在以后的程序中可以方便地引用该符号名,每个出现该符号名的地方均用EQU定义的数据或汇编符号来取代。符号名必须先定义后使用,因此该语句通常放在源程序的开头部分。符号名可以代表地址、常数、字符串、寄存器名或位名等,符号名后不需要接冒号。6.数据赋值伪指令(DATA)格式:符号名DATA表达式功能:将表达式的值赋给指定的符号名,只能定义单字节数据,与EQU类似,但有以下差别:(1)EQU必须先定义后使用,DATA可以先使用后定义。上一页下一页返回3.5伪指令(2)EQU可以把一个特定的汇编符号赋给指定的符号名,而DATA只能把数据赋给符号名。(3)DATA可以把一个表达式的值赋给符号名,其中表达式应该是可求值的。7.位地址符号定义伪指令(BIT)格式:符号名BIT位地址表达式功能:将位地址赋给指定的符号名。位地址表达式可以是绝对地址,也可以是符号地址。上一页返回3.6汇编与汇编程序设计3.6.1源程序的汇编将汇编语言源程序转换为用机器码表示的目标程序,这个转换过程称为汇编,能完成该转换功能的程序称为汇编程序。汇编常用的方法有两种:一种是手工汇编,另一种是机器汇编。对于手工汇编,是把程序用助记符指令写出后,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抢救车使用试题及答案
- 甘肃省白银市平川区2025-2026学年三年级上学期期末数学试题(含答案)
- 辅警的教育培训课件
- 妊娠剧吐急诊护理的病例分析
- 糖尿病足部护理创新模式
- 2026年深圳中考语文考前终极预测试卷(附答案可下载)
- 《GAT 16.86-2012道路交通管理信息代码 第86部分:剧毒化学品公路运输通行证通行区域代码》专题研究报告
- 2026年深圳中考物理寒假提分特训试卷(附答案可下载)
- 2026年大学大二(口腔修复学)口腔修复临床技术测试题及答案
- 水电工施工技能培训课件
- 2026四川省引大济岷水资源开发限公司公开招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025至2030中国汽车检测行业市场深度研究与战略咨询分析报告
- 2026年南昌健康职业技术学院单招职业技能考试备考试题附答案详解
- 2026年安徽粮食工程职业学院高职单招职业适应性考试备考试题及答案详解
- 雨课堂学堂在线学堂云《中国电影经典影片鉴赏(北京师范大学)》单元测试考核答案
- 四川水利安全b证考试试题及答案
- 2626《药事管理与法规》国家开放大学期末考试题库
- 核电站防地震应急方案
- 2025江西江新造船有限公司招聘70人模拟笔试试题及答案解析
- 重庆市丰都县2025届九年级上学期1月期末考试英语试卷(不含听力原文及音频答案不全)
- 2026年党支部主题党日活动方案
评论
0/150
提交评论