C51单片机汇编语言程序设计
更新时间:2024-04-03 22:47:01 阅读量: 综合文库 文档下载
汇编语言程序设计
一、二进制数与十六进制数之间的转换 1、数的表达方法
为了方便编程时书写,规定在数字后面加一个字母来区别,二进制数后加B十六进制数后加H。 2、二进制数与十六进制数对应表 二进制 十六进二进制 制 0000 0001 0010 0011 0100 0101 0110 0111 0 1 2 3 4 5 6 7 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 8 9 A B C D E F 3、二进制数转换为十六进制数
转换方法为:从右向左每4位二进制数转化为1位十六进制数,不足4位部分用0补齐。
例:将(1010000110110001111)2转化为十六进制数 解:把1010000110110001111从右向左每4位分为1组,再
写出对应的十六进制数即可。 0101 0000 1101 1000 1111 5 0 D 8 F
答案:(1010000110110001111)2=(50D8F)16 例:将1001101B转化为十六进制数
解:把10011110B从右向左每4位分为1组,再写出对应的十六进制数即可。 1001 1110 9 E
答案:10011110B=9EH 4、十六进制数转换为二进制数
转换方法为:将每1位十六进制数转换为4位二进制数。 例:将(8A)16转化为二进制数
解:将每位十六进制数写成4位二进制数即可。 8 A 1000 1010
答案:(8A)16=(10001010)2 例:将6BH转化为二进制数
解:将每位十六进制数写成4位二进制数即可。 6 B 0110 1011
答案:6BH=01101011B
二、计算机中常用的基本术语 1、位(bit)
计算机中最小的数据单位。由于计算机采用二进制数,所以1位二进制数称作1bit,例如110110B为6bit。 2、字节(Byte,简写为B)
8位的二进制数称为一个字节,1B=8bit 3、字(Word)和字长
两个字节构成一个字,2B=1Word。
字长是指单片机一次能处理的二进制数的位数。如AT89S51是8位机,就是指它的字长是8位,每次参与运算的二进制数的位数为8位。
8位可以表示256个状态,每位二进制有0和1两种状态,8位就是2的8次方个状态。这256个状态可以表示0~255这256个无符号整数,也可以表示-128到+127这256个有符号整数,还可以表示小数等,这些表示方法叫做数据类型。 8位机能表达数的范围是0~255,这意味着参与运算的各个数据不能超过255,并且运算结果和中间结果也不能超过255,否则就会出错。在实际问题中往往有超过255的情况,比如用到1000这个数,这时就需要用两个字节组合起来表示这样的数。16位机能表达数的范围是0~65535。 三、寄储器
51单片机的寄存器分为工作寄存器和特殊功能寄存器两大
类。工作寄存器在内部RAM的00H~1FH地址区,共有32个。特殊功能寄存器在内部RAM的80H~0FFH地址区,51单片机共有21个,52单片机共有26个。
特殊功能寄存器主要有累加器A,寄存器B,程序状态字PSW,P0~P3 I/O口寄存器,定时/计数器及串行通信控制、中断控制等特殊功能寄存器。 1、工作寄存器(R0~R7)
工作寄存器是一个8位寄存器,分为4组(0~3组),每组8个,共有32个,每组的8个寄存器都用R0~R7表示。工作寄存器是以组为单位来使用的,任何时刻只有一组有效。可用PSW寄存器中的RS0、RS1两位来设置当前要使用的工作寄存器组。 2、累加器A
累加器A是一个8位寄存器,它和算术逻辑部件ALU一起完成各种算术逻辑运算,既可以存放运算前的原始数据,又可以存放运算的结果。 3、寄存器B
寄存器B是一个8位寄存器,用于乘除法运算。 4、程序状态字(PSW)寄存器
程序状态字PSW(也称为标志寄存器)是一个重要的8位寄存器,用来保存指令执行结果供程序查询和判别。 四、寻址方式
单片机工作时,在程序指令的控制下,要对数据进行各种操作,所以必须要先找到操作的数据。数据存放在存储器中,只有找到要操作数据的存储地址,才能对该存储地址中的数据进行操作。
寻找要操作数据的存储地址的过程称为寻址。单片机常用寻址的方式有七种:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。 1、立即寻址
立即寻址是在指令的操作码后直接给出要操作的数据(不是数据的存放地址),这个数据称为立即数,为了表明该数值是一个数据而不是地址,要在该数值前加个“#”号。例如: MOV A,#0FFH ;将数据0FFH(11111111B)送到累加器A中。
MOV A,#6BH ;将数据6BH(01101011B)送到累加器A中。 2、直接寻址
直接寻址是在指令的操作码后给出数据的存放地址,指令可以操作该地址存放的数据。例如: MOV A,58H
该指令的含义是:将58H单元中的数据送到累加器A中。如果58H单元中的数据为11010101,执行该指令后,58H单元中的数据会送到累加器A中,累加器A中的数据也为
11010101,累加器A中之前存放的数据被冲掉。
直接寻址方式可以访问存储器的30H~7FH单元(数据缓冲区)、位地址单元和特殊功能寄存器(SFR),而且特殊功能寄存器只能用直接寻址方式访问。 3、寄存器寻址
寄存器寻址是在指令的操作码后给出寄存器,指令可以操作寄存器中的数据。例如: MOV A,R7
该指令的含义是:将寄存器R7中的数据送到累加器A中。如果寄存器R7中的数据为11010101,执行该指令后,R7中的数据会送到累加器A中,累加器A中的数据也为11010101,累加器A中之前存放的数据被冲掉。 五、汇编语言的指令系统 汇编语言的指令格式如下:
[标号:]操作码(空格)[操作数1][,操作数2][ ,操作数3] [;注释]
例:下面是一条汇编语言的指令:
MAIN:MOV P3,#0FFH ;将数据11111111送到P3口 标号:用来标注指令的地址,一般由1~8个字母和数字组合而成,但必须以字母开头,以冒号“:”结束。上面的汇编语言指令中,标号是“MAIN:”。
操作码:用来规定指令的操作功能,一般由2~5个字母(英
文单词或单词的缩写)组成。上面的汇编语言指令中,操作码是“MOV”。
操作数:它是操作码的操作对象,操作数和操作码之间用一个空格隔开。在一条指令中可以有0~3个操作数,操作数之间用逗号“,”隔开。上面的汇编语言指令中,操作数是“P3,#0FFH”。
注释:它是编程者对指令的说明,通常用来描述程序的功能。注释以分号“;”开头。
注意:编写汇编语言的指令时,指令中的“:”、“,”、“;”等为半角符号,应将输入法设为英文状态。
MCS-51系列单片机的指令共有111条,根据功能可将其分为以下几类:数据传送类指令(29条)、算术运算类指令(24条)、逻辑运算类指令(24条)、控制转移类指令(17条)、位操作类指令(17条)。
根据指令转化为机器代码占用的存储空间可分为:单字节指令(49条)、双字节指令(45条)、三字节指令(17条)。 根据指令执行需要的时间可分为:单周期机器指令(64条)、双周期机器指令(45条)、四周期机器指令(2条)。 六、数据传送类指令(29条)
数据传送类指令的功能是将源操作数中的内容送到目的操作数中。它可以分为五种:内部RAM的数据传送指令、外部RAM与累加器A的数据传送指令、ROM与累加器A的数
据传送指令、数据交换指令和堆栈操作指令。 1、内部RAM的数据传送指令(16条)
内部RAM数据传送指令的操作码助记符是“MOV” 指令格式:MOV 目的操作数,源操作数
指令的功能是:将源操作数中的内容送到目的操作数中。执行指令后,源操作数内容不变,目的操作数的内容与源操作数一致。
内部RAM的数据传送指令又可分为五种: (1)以累加器A为目的操作数的传送指令
以累加器A为目的操作数的传送指令有4条,各条指令的格式和功能如下:
以累加器A为目的操作数的传送指令 指 格 式 令 指令功能指令功能指令功能举例说明 表示 说明 例:MOV A,#36H MOV A,#data (A)←data 将数据data指令功能:将数据送到累加36H送到累加器A器A中 中,指令执行后,A中的数据为36H。 MOV A,Rn (A)←(Rn) 将寄存器例:MOV A,R6 Rn中的数指令功能:将寄存器据送到累R6中的数据送到累加器A中 加器A中,如果R6中的数据为2EH,指令执行后,A中的数据为2EH。 其中,#data表示8位数据(立即数),Rn表示工作寄存器组中的8个寄存器R0~R7。
(2)以寄存器Rn为目的操作数的传送指令
以寄存器Rn为目的操作数的传送指令有3条,各条指令的格式和功能如下:
以寄存器Rn为目的操作数的传送指令 指 令 格 指令功能指令功能指令功能举例说明 式 表示 说明 将数据MOV (Rn)←data送到寄存器Rn中 例:MOV R5,#36H 指令功能:将数据36H送到寄存器R5中,指令执行后,R5中的数据为36H。 例:MOV R6,A 指令功能:将累加器A中的数据送到寄存器R6中,如果A中的数据为2EH,指令执行Rn,#data data 将累加器MOV Rn,A (A)←A中的数(Rn) 据送到寄存器Rn中 后,R6中的数据为2EH。 七、位操作类指令(17条)
位操作类指令的功能是对单片机内部存储器的位单元进行操作,位操作类指令有数据位传送指令、位变量修改指令、位变量逻辑指令和位控制转移指叙。 1、位变量修改指令(6条)
位变量修改指令有6条,它们分别为清0、取反和置1。各条指令的格式和功能如下: 位变量修改指令 指 令 格 式 指令功能表示 指令功能说明 清0指将某位单元中的数据CLR bit (bit)←(0) 令 清0 置1指SETB 令 bit (bit)←1 将某位单元中的数据置1 八、逻辑运算类指令(24条)
逻辑运算类指令的功能是进行与、或、非、异或逻辑运算和对数据进行清0、移位。它包括逻辑与、逻辑或、逻辑非、逻辑异或、清0、和移位指令。 1、清0指令
清0指令的格式和功能如下: 清0指令 指 令 格 式 指令功能表示 指令功能说明
CLR A (A)←(0) 将累加器A中的内容清0。 2、移位指令(4条)
移位指令又分不带进位的左环移指令、带进位的左环移指令、不带进位的右环移指令和带进位的右环移指令。各条指令的格式和功能如下: 移位指令 指令指令功能说明 格式 将累加器A中的各位数据共同左移一位,(即A0RL A 位数据移至A1位,A1位数据移至A2位,以此类推),A7位数据环移至A0位。 将累加器A中的各位数据共同右移一位,(即A7RR A 位数据移至A6位,A6位数据移至A5位,以此类推),A0位数据环移至A7位。 九、程序控制类指令(17条)
程序控制类指令具体分为无条件控制转移指令、有条件控制转移指令和子程序调用及返回指令。 1、无条件控制转移指令(4条)
无条件控制转移指令在使用时无须规定程序转移的条件,它分为短转移指令、长转移指令、相对转移指令和散转指令。 (1)长转移指令
长转移指令比短转移指令的跳转范围更大,指令的格式和功能如下: 长转移指令 指 令 指令功能表指令功能说明 格 式 LJMP addr16 示 (PC)←addr16 将16位的地址送给PC,PC则指向该地址,并执行该地址处的指令。 2、有条件控制转移指令(4条)
有条件控制转移指令在某种条件满足时执行转移,不满足则不执行转移。它包括累加器判0转移、位控制转移指令、比较不相等转移指令和减1不为0转移指令。 (1)减1不为0转移指令
减1不为0转移指令有2条,各条指令的格式和功能如下: 减1不为0转移指令 指 令 格 指令功能表示 式 指令功能说明 (Rn)←(Rn)-1 若(Rn)≠0 DJNZ Rn,rel 则(PC)←(PC)双周期机+2+ rel 器指令 若(Rn)=0 则(PC)←(PC)+2 将寄存器Rn中的数据减1,若Rn中的数据(已被减1)不等于0,则转移执行地址标号rel处的指令。 若Rn中的数据等于0,则执行当前指令的下一条指令。 2、子程序调用和返回指令(4条) (1)子程序调用指令
子程序调用指令有2条,长调用指令和短调用指令(绝对调用指令)。各条指令的格式和功能如下: 子程序调用指令 指令格指令功能表指令功能说明 式 示 先将程序计数器PC中的值加(PC)←(PC)+3 (SP)←(SP)+1 LCALL addr16 ((SP))←(PC7~0) 3,得到下一条指令的地址(也就是断点地址)。然后将堆栈寄存器SP中的值加1,得到一个8位地址,再将PC中的低8位数保存在SP中的地址所指的单元中。接着将SP中的值再加1,得到下一个8位地址,再将PC中的高8位数保存在SP中的地址所指的单元中。最后将addr16地址送给PC,PC就指向addr16地址,并执行该地址处的子程序。 该指令可调用64KB(216)范围内的子程序。 长调用(SP)←(SP)指令 +1 ((SP))←(PC15~8) (PC)←addr16 (PC)←(PC)+2 (SP)←(SP)+1 ACALL addr11 ((SP))←(PC7~0) 短调用(SP)←(SP)指令 +1 ((SP))←(PC15~8) (PC10~0)←addr10~0 上面两条指令都是在主程序中调用子程序,两者有一定的区别。最大区别是调用范围的大小。初学时可以不加以区分,一般来说,除非程序空间非常紧张,否则都是首选LCALL。 ACALL是在调用点为中心的2K范围内,因为它的参数是11位的,LCALL是整个64K范围内调用,因为它的参数是16位的。
ACALL相对比较节约程序空间,因为机器码是2个字节(命令加参数),而LCALL移植方便,但机器码是3个字节。 (2) 返回指令
返回指令有2条,子程序返回指令和中断返回指令。各条指
令的格式和功能如下: 返回指令 指令指令功能表示 格式 (PC15~8)←RET 子程序返回指令 ((SP)) (SP)←(SP)RET指令放在子程序的末尾,它-1 使子程序在功能完成后返回子指令功能说明 (PC7~0)←程序调用指令的下一条指令继((SP)) (SP)←(SP)-1 续执行。
十、伪指令(8条)
汇编时,汇编程序会将源程序中的指令转换成相应的机器指令。有时需要汇编程序对源程序进行一些处理,这时可在源程序中加入一些特殊的指令。这些指令用于告诉汇编程序如何处理源程序,它既不控制机器的操作,也不转换成机器指令,这些指令就被称为伪指令。 1、汇编起始指令
汇编起始指令的格式和功能如下: 汇编起始指令 指 令 格 指令功能说明 式 ORG addr16 该指令用于指示下一条指令在程序存储器中的起始地址。 2、汇编结束指令 汇编结束指令 指令格指令功能说明 式 END
该指令用于结束汇编程序。
正在阅读:
C51单片机汇编语言程序设计04-03
运动会方阵解说词02-11
马克思主义基本原理概论读书报告03-10
新宏观Microsoft Word 文档11-15
船舶油类记录簿的填写04-21
员工手册(修改第八版印刷版) 207-29
山西省工程建设专家委员会07-07
06-附录及逻辑关系式05-26
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 汇编语言
- 单片机
- 程序设计
- C51
- 中国当前主要的社会矛盾
- 成都石室中学2013外地生入学英语考试
- 《数的认识》教学设计
- 辽宁省工商行政管理系统党政领导干部问责制实施办法
- 源远流长聚宝盆山水画-福禄寿喜财风水揭秘 - 图文
- 函授经济学试卷
- 标准美国黄卡-SAYC
- 小学教师业务学习笔记
- 高二物理选修3-1各章测试题附答案
- 材料力学习题选 - 2
- 面积比法计算设计断面洪水中面积指数的确定
- 2018-2019年人教版四年级上册语文期末试卷1
- 第四十届运动会秩序册(抚州) - 图文
- 江苏省九年级语文下册 第15课《鱼我所欲也》教案 苏教版
- 人教版小学数学五年级上册《可能性》教学实录
- 《建筑工程技术》专业教学基本要求 - 图文
- 在全市组织工作会议上的讲话
- 合肥市人民政府令第157号 合肥市城镇职工基本医疗保险办法
- 发展心理学试题试卷
- 2014年磁共振技师大型设备上岗证试题及答案