51单片机C和汇编指令对比

合集下载

谈谈51单片机的指令字节数

谈谈51单片机的指令字节数

谈谈51单片机的指令字节数

现在的单片机程序大多都用C语言来编写了,汇编看起来有点OUT了。可是有时候汇编却很有用,因为它执行的效率高,而且每条指令占用的字节数和时钟周期都是确定的,这对于查表编程及对时钟要求严格的地方来说,是非常有用的。在嵌入式操作系统的移植中,有一部分代码是得用汇编来写的,不过这跟今天要谈的内容无关。现有来谈谈MCS-51单片机的指令的字节数。

汇编语言的语句的格式为:

标号段:操作码段第一操作数,第二操作数;注释段(如START: MOV A,#00H ;把0赋给A)

其中操作码段是必段的,其他的段是根据不同的指令而不同,操作数段可以只有一个操作数,也可以有两个操作数,有时还会有三个操作数的情况。

在51单片机中,有单字节指令、双字节指令和三字节指令。只要理解了指令占用的这些字节都是用来存放哪些量的,那自然就会判断不同的指令是多少字节指令了。

1、操作码段占用一个字节。

2、8位立即数占用一个字节,16位立即数占用两个字节。

3、8位操作数地址占用一个字节,16位操作数地址占用两个字节。

4、CPU内部的各种寄存器不占用指令字节,如A, B, R0, R1, DPTR等。

现在就可以判断51的指令占用的字节数了:

MOV A, R0 ;这是单字节指令,其中MOV占用一个字节,A和R0是CPU内部寄存器,不占用指令字节。

MOV A, #07H ;这是双字节指令,其中MOV占用一个字节,8位立即数#07H占用一个字节。

MOV DPTR, #0106H ;这是三字节指令,MOV占用一个字节,16位立即数#0106H 占用两个字节。

51单片机教程(从原理开始基于汇编)及单片机C语言教程

51单片机教程(从原理开始基于汇编)及单片机C语言教程

51单片机教程(从原理开始基于汇编)及单片机C语言教程

1.单片机可以做什么?

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。小到电话,玩具,手机,各类刷卡机,电脑键盘,彩电,冰箱,空调,电磁炉,大到汽车,工业自动控制,机器人,导弹导航装置,甚至是美国的火星车,这些设备里面都含有一个或者多个单片机。单片机的数量不仅远超过PC机,甚至比人类的数量还要多。因此,单片机的学习、开发与应用将造就一大批软硬件工程师。2. 学习单片机需要哪些基本条件?

模拟电路,数字电路基础,对C语言或汇编语言有一定的了解。当然,这些也可以在学习过程中掌握。对此这套教程均有讲解.

硬件条件的话:电脑一台,实验开发平台一套。3、单片机的结构

一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片机。单片机是一种

控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。不,价格并不高,从1元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。为什么会这样呢?功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。既然如此,单片机的功能肯定不强,干吗要学它呢?话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高

MCS-51单片机指令系统与汇编语言程序设计

MCS-51单片机指令系统与汇编语言程序设计

指令系统:一台计算机所能识别、执行的指令的集合就是它的指令系统。 机器语言:指令系统是一套控制计算机执行操作的二进制编码,称为机器语言。机器语言指令是计算机惟一能识别和执行的指令。 汇编语言:指令系统是利用指令助记符来描述的,称为汇编语言。 计算机的指令系统一般都是利用汇编语言描述的,是由计算机硬件设计所决定的。指令系统没有通用性。 单片机一般是空机,未含任何系统软件。因此在第一次使用前,必须对其进行编程,
(4)定义字节伪指令DB 格式:[标号:] DB x1, x2,…, xn 功能:将8位数据(或8位数据组)x1, x2,…, xn顺序存放在从当前程序存储器地址开始的存储单元中。xi可以是8位数据、ASCII码、表达式,也可以是括在单引号内的字符串。两个数据之间用逗号“,”分隔。 xi为数值常数时,取值范围为00H~FFH。xi为ASCII码时,要使用单引号‘’,以示区别。xi为字符串常数时,其长度不应超过80个字符。 (5)定义双字节伪指令DW 格式:[标号:] DW x1, x2,…, xn 功能:将双字节数据[或双字节数据组]顺序存放在从标号指定地址单元开始的存储单元中。其中,xi为16位数值常数,占两个存储单元,先存高8位(存入低位地址单元中),后存低8位(存入高位地址单元中)。
ห้องสมุดไป่ตู้
2.1.3 指令中的常用符号
Rn(n=0~7):表示当前工作寄存器R0~R7中的任一个寄存器。 Ri(i=0或1):表示通用寄存器组中用于间接寻址的两个寄存器R0, R1。 #data:表示8位直接参与操作的立即数。 #data16:表示16位直接参与操作的立即数。 direct:表示片内RAM的8位单元地址。 addr11:表示11位目的地址,主要用于ACALL和AJMP指令中。 addr16:表示16位目的地址,主要用于LCALL和LJMP指令中。 rel:用补码形式表示的8位二进制地址偏移量,取值范围为128~+127,主要用于相对转移指令,以形成转移的目的地址。 DPTR:数据指针,用于寄存器间接寻址方式和变址寻址方式。

单片机C语言与汇编语言混合编程_杨加国

单片机C语言与汇编语言混合编程_杨加国

击右边的“Generate Assembler SRC File”和“Assemble SRC File” , 使检查框由灰色变成黑色(有效)状态 .
第三步 , 根据选择的编译模式 , 把相应的库文 件(如 Small 模 式时 , 是 Keil C51 Lib C51S . Lib)加入工程中 , 该文件必须作为工程的最后文 件 .库文件与编译模式的关系如下 :
文章编号 :1004 -5422(2008)03 -0208 -04
单片机 C 语言与汇编语言混合编程
杨加国
(成都大学 电子信息工程学院 , 四川 成都 610106)
摘 要 :介 绍了单片机 C 语言与汇编语言 混合编程的两 种基本 方式 , C 语言程 序中嵌 入汇编 程序和 调用汇 编 程序的参数传递方法 , 以及在 keil C51 中的具体处理方法 . 关键词 :混合编程 ;嵌入汇编 ;编译 ;参数传递 中图分类号 :TP314 文献标识码 :A
C51S .LIB - 没有浮点运算的 Small model C51C .LIB - 没有浮点运算的 Compact model C51L.LIB - 没有浮点运算的 Large model C51FPS .LIB - 带浮点运算的 Small model C51FPC .LIB - 带浮点运算的 Compact model C51FPL.LIB - 带浮点运算的 Large model

MCS-51系列单片机的指令系统和汇编语言程序

MCS-51系列单片机的指令系统和汇编语言程序

3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统

和汇编语言程序

3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。

3·1·2 请总结:

(1)汇编语言程序的优缺点和适用场合。

(2)学习微机原理课程时,为什么肯定要学汇编语言程序?

3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。

3·1·4 要访问片内RAM,可有哪几种寻址方式?

3·1·5 要访问片外RAM,有哪几种寻址方式?

3·1·6 要访问ROM,又有哪几种寻址方式?

3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。

3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。

3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?

3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。3·1·11 请选用指令,分别到达以下操作: (1)

将累加器内容送工作存放器R6.

(2)将累加器内容送片内RAM 的7BH 单元。(3)

将累加器内容送片外RAM 的7BH 单元。(4)将

累加器内容送片外RAM 的007BH 单元。(5)将

ROM007BH 单元内容送累加器。

3·1·12 区分以下指令的不同功能:

第5章 单片机C语言与汇编语言混合编程-单片机原理与应用及C51程序设计(第2版)-谢维成

第5章  单片机C语言与汇编语言混合编程-单片机原理与应用及C51程序设计(第2版)-谢维成
5.2.1 混合汇编的参数传递
1.汇编程序调用C51函数的参数传递 如C51函数有参数,则汇编程序在调用C51函数前要准备好参数。 在汇编程序中C51函数最左边的一个参数由寄存器A传递,其他的 参数按顺序通过堆栈给出。C51函数的返回值是返回到A寄存器或 者由A寄存器给出的地址。 2.在C51中嵌入汇编程序的参数传递
第三步:根据选择的编译模式,把相应的库文件(如 Small 模式时, 是 Keil\C51\Lib\C51S.Lib)加入到工程中,该文件必须作为工程的最 后文件。
通过变量或特殊功能寄存器来实现
3.在C51中调用汇编程序的参数传递
C51中调用汇编程序进行参数传递时都必须严格遵守C51函数 的参数和返回值的相关约定。
C51中调用汇编程序进行参数传递的方式有两种,一种是通过寄 存器传递参数,第二种是通过固定存储区传递。
第5章 单片机C语言与汇编语言混合编程
1)
通过寄存器传递参数
3. 在C51中调用汇编程序
这种方法应用较多,C模块与汇编模块的接口较简单,分别用 C51与A51对源程序进行编译,然后用L51将obj文件连接即可,关 键问题在于C函数与汇编函数之间的参数传递和得到正确的返回值, 以保证模块间的数据交换。
第5章 单片机C语言与汇编语言混合编程
5.2 混合汇编的参数传递与实现
最多可通过51单片机的工作寄存器传递3个参数,余下的通过固定 存储区传递,

第4章 单片机的C51语言

第4章 单片机的C51语言
缺省存储种类为auto (自动)型变量
第4章单片机的C51语言
【存储种类】
数据类型
【存储类型】
变量名
数据类型用于表示数据存放格式
标准C语言的数据类型
* 有符号数类型可以忽略signed标识符
第4章单片机的C51语言
除上述常规格式外,51单片机还有三种新的存储格式:
bit型存储格式 sfr型存储格式
第4章单片机的C51语言
【存储种类】 数据类型
【存储类型】
变量名
变量名可以由字母、数字和下划线三种字符组成,且第一个 字符必须为字母或下划线,变量名长度随编译系统而定。 变量名具有字母大小写的敏感性,如SUM和sum代表不同的 变量。 强调:头文件中定义的变量都是大写的,若程序采取小写变 量则需要重新定义。
第4章单片机的C51语言
C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变 量。
用一条预处理命令#include <REG51.H>把这个头文件包含 到C51程序中,无需重新定义即可直接使用它们的名称。
第4章单片机的C51语言
编程举例:
第4章单片机的C51语言
【存储种类】
第4章单片机的C51语言
举例:在两个数据中选出较大的数据,并赋值给变量c。 其中,要求选数任务采用汇编子程序完成。
第4章单片机的C51语言

第4章 单片机的C51语言

第4章 单片机的C51语言
第4章 单片机的C51语言
4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程
第4章单片机的C51语言
51汇编语言能直接操作单片机的系统硬件,指令执行速度 快。但其程序可读性差,且编写、移植困难。
第4章单片机的C51语言
表3-6 位运算其说明
符号 & Ι ^ ~ << >> 说明 位逻辑与 位逻辑或 位异或 位取反 位左移 位右移
37
5. 赋值、指针和取值运算符
是对变量操作的基本运算。赋值、指针和取值运算符 及其说明如表3-7所示。
表3-7 位运算其说明
符号
= * &
说明
赋值 指向运算符 取地址
38
3.2.5 C51的分支与循环程序结构
main(函数) Func1-1(函数)
Funcn-1(函数)
sub1 (子程序)
sub1 (子程序)
……
……
……
……
Func1-n(函数)
……
Funcn-n(函数)
……
LIB(库函数)
subn (子程序)
subn (子程序)
C51(库函数)
(头文件)
Keil C51
第4章单片机的C51语言

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集

一、数据传送类指令(7种助记符)

MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;

MOVC(Move Code)读取程序存储器数据表格的数据传送;

MOVX (Move External RAM) 对外部RAM的数据传送;

XCH (Exchange) 字节交换;

XCHD (Exchange low-order Digit) 低半字节交换;

PUSH (Push onto Stack) 入栈;

POP (Pop from Stack) 出栈;

二、算术运算类指令(8种助记符)

ADD(Addition) 加法;

ADDC(Add with Carry) 带进位加法;

SUBB(Subtract with Borrow) 带借位减法;

DA(Decimal Adjust) 十进制调整;

INC(Increment) 加1;

DEC(Decrement) 减1;

MUL(Multiplication、Multiply) 乘法;

DIV(Division、Divide) 除法;

三、逻辑运算类指令(10种助记符)

ANL(AND Logic) 逻辑与;

ORL(OR Logic) 逻辑或;

XRL(Exclusive-OR Logic) 逻辑异或;

CLR(Clear) 清零;

CPL(Complement) 取反;

RL(Rotate left) 循环左移;

RLC(Rotate Left throught the Carry flag) 带进位循环左移;

51单片机汇编指令大全

51单片机汇编指令大全

51汇编指令大全

Rn: 表示当前寄存器区的8个工作寄存器R0~R7

Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1)

@: 为间接寄存器或基址寄存器的前缀.

Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能

寄存器SFR的地址(128~255)或名称,

A: 累加器ACC.

B: .特殊功能寄存器B,用于MUL和DIV指令中.

C: 进位位Cy.

#data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间.

#data16: 表示包含在指令中的双字节(16位)立即数.

Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间.

Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页.

Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值.

DPTR: 为数据指针,可用作16位的地址寄存器.

/: 加在位操作的前面,表示对该位进行非运算.

bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位.

“(x): 寄存器或地址单元中的内容.

((x)): 有x见解寻址的单元中的内容.

<-: 表示将箭头右边的内容传送至箭头的左边.

51单片机总汇编语言及C语言经典实例

51单片机总汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例

实验及课程设计

一、闪烁灯

如图1 所示为一简单单片机系统原理图:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮一灭,一亮一灭的时间间隔为0.2 秒。

延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要

求的闪烁时间间隔为0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,

插入延时程序,来达到我们的要求,但这样的

延时程

序是如何设计呢?下面具体介绍其原理:如图4.1.1 所示的石英晶体为12MHz,因此,1 个机器周期为 1 微秒,机器周期微秒如图 1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管的单向导电性可知,这时发光

二极管L1 熄灭;当P1.0 端口输出低电平,

即P1.0=0 时,发光二极管L1 亮;我们可以使用SETB P1.0 指令使P1.0端口输出高电

平,使用CLR P1.0 指令使P1.0 端口输出低

电平。

C 语言源程序

#include

sbit L1=P1^0;

void delay02s(void) //延时0.2 秒子程序

{

unsigned char i,j,k;

for(i=20;i>0;i--)

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

void main(void)

{

while(1)

{

L1=0;

delay02s();

L1=1;

delay02s();

}

汇编源程序

ORG 0

START: CLR P1.0

LCALL DELAY

SETB P1.0

单片机C语言编程与汇编混合编程

单片机C语言编程与汇编混合编程

//DSP 发向 PC 机的数据
int to_dte_num;
// 缓冲区中存放的有效字节数
int to_dte_store;
// 缓冲区的存放指针
int to_dte_read;
// 缓冲区的读取指针
这样经过链接就可以完成对应。
2 程序入口问题
在 C 程序中,程序的入口是 main() 函数。而在汇编程序中其入口由*.cmd 文件中的命令决定,如:-e m ain_start;程序入口地址为 main _start。这样,混合汇编出来的程序得不到正确结果。因为 C 到 ASM 的汇 编有默认的入口 c-int00,从这开始的一段程序为 C 程序的运行做准备工作。这些工作包括初始化变量、设 置栈指针等,相当于系统壳不能跨越。这时可在*.cmd 文件中去掉语句:-e main_start。如仍想执行某些汇 编程序,可以 C 函数的形式执行,如:
3、根据选择的编译模式,把相应的库文件 (如 Small 模式时,是 Keil\C51\Lib\C51S.Lib) 加入工程中, 该文 件必须作为工程的最后文件;
4、编译,即可生成目标代码。
来个实例吧:
#i nclude <reg51.h>
void main(void)
{
P2=1;
#pragma asm
(2) c 程序中访问汇编程序中的变量

51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例

汇编语言是一种用来编写计算机指令的低级语言,它与机器语言十

分接近,可以直接控制计算机硬件。而C语言是一种高级程序设计语言,它具有结构化编程和模块化设计的特点。本文将介绍51单片机汇

编语言和C语言的经典实例,并进行详细解析。

一、LED指示灯的闪烁

我们首先来看一个经典的51单片机汇编语言的实例——LED指示

灯的闪烁。我们可以通过控制单片机的IO口来实现LED的闪烁效果。以下是汇编语言的代码:

```assembly

ORG 0 ; 程序起始地址

MOV P1, #0; 将 P1 置为0,熄灭LED

LJMP $ ; 无限循环

```

以上代码使用了51单片机的MOV指令和LJMP指令。MOV指令

用来将一个立即数(这里是0)存储到寄存器P1中,控制对应的I/O

口输出低电平,从而熄灭LED。而LJMP指令则是无条件跳转指令,

将程序跳转到当前地址处,实现了无限循环的效果。

对应的C语言代码如下:

```c

#include <reg51.h>

void main() {

P1 = 0; // 将 P1 置为0,熄灭LED

while(1); // 无限循环

}

```

以上代码使用了reg51.h头文件,该头文件提供了对51单片机内部寄存器和外设的访问。通过将P1赋值为0,控制IO口输出低电平,实现了熄灭LED的效果。while(1)是一个无限循环,使得程序一直停留在这个循环中。

二、数码管的动态显示

接下来我们介绍51单片机汇编语言和C语言实现数码管动态显示的经典实例。数码管动态显示是通过控制多个IO口的高低电平来控制数码管显示不同的数字。以下是汇编语言的代码:

C语言与汇编语言的区别

C语言与汇编语言的区别

如果你做得程序比较小几k而已,用汇编代码程度会比c小点,应为你可以规划的很清楚,但是如果你的程序稍微大一些那么c的优势就体现出来了,开发速度比汇编快了多得多,代码长度也不错(因为你无法规划到最最优化),维护修改比汇编容易得多(恐怕没有那个项目老板的要求不会改吧?),一般的实时性没有问题,真的要求时间非常精确也可以嵌入汇编(以前做cpu卡,7816-3的标准,就用汇编做最底层单字节读写然后用c主程序调用)

简单地说,很小的程序,主要是硬件简单控制的可以用汇编,

稍微复杂一点尤其是牵涉到一些计算或者管理等方面的最好用c

现在的c编译器,优化功能很好而且bug也很少了。劝你还是开始用c吧,你会发现开发有乐趣的多(推荐keil c 7.04),去(好像是这里下载)

---------------------------------------------------------------

c是高级语言中最接近低级的语言,如果运用熟练、恰当再结合汇编,其综合评价高于仅使用汇编。

1:若只有较简单的逻辑操作、逻辑算法、简单运算,使用汇编会得到较为精准的代码,但用c也同样可以做到。

2:若掺有复杂运算、浮点运算、非线性方程等,汇编恐怕无能为力了(最起码难度很大)。

3:单片机种类繁多,各自的汇编语法大都不一样,若仅使用汇编,可扩充性、可移植性都很差,用c就会好的多。

4:设想一下,当你花了很大力气用熟了一种汇编,又有新的品种出现,你要么甘心落后,要么拼命跟进,不是俄死,就是累死。

以上只是个人浅见,有错当改。

-----------------------------------------------

51单片机汇编语言及C语言经典实例解析

51单片机汇编语言及C语言经典实例解析

51单片机汇编语言及C语言经典实例

实验及课程设计

一、闪烁灯

如图1 所示为一简单单片机系统原理图:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮一灭,一亮一灭的时间间隔为0.2 秒。

延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要

求的闪烁时间间隔为0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,

插入延时程序,来达到我们的要求,但这样的

延时程

序是如何设计呢?下面具体介绍其原理:如图4.1.1 所示的石英晶体为12MHz,因此,1 个机器周期为 1 微秒,机器周期微秒如图 1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管的单向导电性可知,这时发光

二极管L1 熄灭;当P1.0 端口输出低电平,

即P1.0=0 时,发光二极管L1 亮;我们可以使用SETB P1.0 指令使P1.0端口输出高电

平,使用CLR P1.0 指令使P1.0 端口输出低

电平。

C 语言源程序

#include <AT89X51.H>

sbit L1=P1^0;

void delay02s(void) //延时0.2 秒子程序

{

unsigned char i,j,k;

for(i=20;i>0;i--)

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

void main(void)

{

while(1)

{

L1=0;

delay02s();

L1=1;

delay02s();

}

汇编源程序

ORG 0

START: CLR P1.0

51单片机汇编双字节比较程序

51单片机汇编双字节比较程序

51单片机汇编双字节比较程序51单片机是一种广泛应用于嵌入式系统的微控制器。它基于8位的8个通用寄存器和一个特殊函数寄存器(PSW),并且具有丰富的指令集和内置的外设模块。在编程中,单片机的汇编语言被广泛使用,因为它可以直接操作硬件资源,并提供更高的代码效率和灵活性。

在51单片机汇编语言中,实现双字节的比较程序非常常见。下面我将为您详细介绍一种实现双字节比较的程序,并解释其每一步的逻辑。

1.首先,我们需要定义两个双字节数据,分别存储在两个16位的寄存器中,比如说R0和R1。假设我们要比较的两个双字节数据分别是A和B。

2.我们可以使用CMP指令来比较这两个双字节数据。该指令将比较两个操作数,并设置相应的标志位(PSW寄存器中的标志位)以反映比较的结果。

3.我们需要检查标志位来确定比较的结果。在CMP指令执行后,我们可以使用JZ、JNZ、JC、JNC等条件转移指令来根据不同的比较结

果执行不同的操作。例如,如果A等于B,则跳转到一个标记为EQUAL

的代码块;如果A大于B,则跳转到一个标记为GREATER的代码块;如果A小于B,则跳转到一个标记为LESS的代码块。

4.在以上的各个代码块中,我们可以执行相应的操作,例如显示

比较结果、保存结果到寄存器或存储器、进行其他相关的逻辑处理等。这些操作将根据具体的应用需求来确定。

需要注意的是,由于51单片机是基于8位处理器,双字节数据需

要通过两个8位寄存器来存储。在使用CMP指令进行比较时,我们需

要注意比较的顺序和字节的对齐方式。同时,由于RAM有限,需要合

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

51单片机C和汇编指令对比

一、单一指令比较:字节操作

加法指令

减法指令

乘法指令

除法指令

取模指令

位测试指令

_testbit_ (bit);

左移指令

Variable = Variable 右移指令

Variable = Variable >> 1;

位取反指令

与运算指令

或运算指令

异或运算指令

子程序调用

RESULT=BYTESUB(ARG1, ARG2);

CALL BYTESUB

判断指令

CJNE R1,#0F0H,LABEL1

DJNZ R1,LABEL1

查表指令

相关文档
最新文档