C51单片机汇编语言程序设计

  • 格式:docx
  • 大小:41.39 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C51单片机汇编语言程序设计

一、二进制数与十六进制数之间的转换1、数的表达方法

为了方便编程时书写,规定在数字后面加一个字母来区别,二进制数

后加B十六进制数后加H。2、二进制数与十六进制数对应表二进制十六

进二进制制0000000100100011010001010110011101234567100010011010101111001101 11101111十六进制89ABCDEF3、二进制数转换为十六进制数

转换方法为:从右向左每4位二进制数转化为1位十六进制数,不足

4位部分用0补齐。

例:将(1010000110110001111)2转化为十六进制数解:把1010000110110001111从右向左每4位分为1组,再

写出对应的十六进制数即可。0101000011011000111150D8F

答案:(1010000110110001111)2=(50D8F)16例:将1001101B转

化为十六进制数

解:把10011110B从右向左每4位分为1组,再写出对应的十六进制

数即可。100111109E

答案:10011110B=9EH4、十六进制数转换为二进制数

转换方法为:将每1位十六进制数转换为4位二进制数。例:将(8A)16转化为二进制数

解:将每位十六进制数写成4位二进制数即可。8A10001010

答案:(8A)16=(10001010)2例:将6BH转化为二进制数

解:将每位十六进制数写成4位二进制数即可。6B01101011

答案:6BH=01101011B

二、计算机中常用的基本术语1、位(bit)

计算机中最小的数据单位。由于计算机采用二进制数,所以1位二进

制数称作1bit,例如110110B为6bit。2、字节(Byte,简写为B)8位的二进制数称为一个字节,1B=8bit3、字(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~

P3I/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、立即寻址

立即寻址是在指令的操作码后直接给出要操作的数据(不是数据的存

放地址),这个数据称为立即数,为了表明该数值是一个数据而不是地址,

要在该数值前加个“#”号。例如:MOVA,#0FFH;将数据0FFH(11111111B)送到累加器A中。

MOVA,#6BH;将数据6BH(01101011B)送到累加器A中。2、直接寻址

直接寻址是在指令的操作码后给出数据的存放地址,指令可以操作该

地址存放的数据。例如:MOVA,58H

该指令的含义是:将58H单元中的数据送到累加器A中。如果58H单

元中的数据为11010101,执行该指令后,58H单元中的数据会送到累加器

A中,累加器A中的数据也为

11010101,累加器A中之前存放的数据被冲掉。

直接寻址方式可以访问存储器的30H~7FH单元(数据缓冲区)、位

地址单元和特殊功能寄存器(SFR),而且特殊功能寄存器只能用直接寻

址方式访问。3、寄存器寻址

寄存器寻址是在指令的操作码后给出寄存器,指令可以操作寄存器中的数据。例如:MOVA,R7

该指令的含义是:将寄存器R7中的数据送到累加器A中。如果寄存

器R7中的数据为11010101,执行该指令后,R7中的数据会送到累加器A 中,累加器A中的数据也为11010101,累加器A中之前存放的数据被冲掉。五、汇编语言的指令系统汇编语言的指令格式如下:

[标号:]操作码(空格)[操作数1][,操作数2][,操作数3][;注释]

例:下面是一条汇编语言的指令: