单片机汇编语言详解

发布者:数字狂想最新更新时间:2011-09-20 关键字:单片机  汇编语言 手机看文章 扫描二维码
随时随地手机看文章

数制的概念  

  数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制和十六进制。

  数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。计算机是信息处理的工具,任何信息必须转换成二进制形式数据后才能由计算机进行处理,存储和传输。

 
十进制数(Decimal)

  人们通常使用的是十进制。它的特点有两个:有0,1,2….9十个基本数字组成,十进制数运算是按“逢十进一”的规则进行的.
  在计算机中,除了十进制数外,经常使用的数制还有二进制数和十六进制数.在运算中它们分别遵循的是逢二进一和逢十六进一的法则.

 
二进制数(Binary)

  二进制数有两个特点:它由两个基本数字0,1组成,二进制数运算规律是逢二进一。
  为区别于其它进制数,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。
  例如:二进制数10110011可以写成(10110011)2,或写成10110011B,对于十进制数可以不加注.计算机中的数据均采用二进制数表示,这是因为二进制数具有以下特点:
  1) 二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器件。例如,电路中有,无电流,有电流用1表示,无电流用0表示。类似的还比如电路中电压的高,低,晶体管的导通和截止等。
  2) 二进制数运算简单,大大简化了计算中运算部件的结构。
  二进制数的加法和乘法运算如下:
  0+0=0 0+1=1+0=1 1+1=10
  0×0=0 0×1=1×0=0 1×1=1

 
八进制数(Octal)

  由于二进制数据的基R较小,所以二进制数据的书写和阅读不方便,为此,在小型机中引入了八进制。八进制的基R=8=2^3,有数码0、1、2、3、4、5、6、7,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。八进制用下标8或数据后面加Q表示 例如:二进制数据 ( 11 101 010 . 010 110 100 )2 对应 八进制数据 ( 3 5 2 . 2 6 4 )8或352.264Q.

 
十六进制数(Hex)

  由于二进制数在使用中位数太长,不容易记忆,所以又提出了十六进制数
  十六进制数有两个基本特点:它由十六个字符0~9以及A,B,C,D,E,F组成(它们分别表示十进制数10~15),十六进制数运算规律是逢十六进一,即基R=16=2^4,通常在表示时用尾部标志H或下标16以示区别。
  例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。

 
数的位权概念

  对于形式化的进制表示,我们可以从0开始,对数字的各个数位进行编号,即个位起往左依次为编号0,1,2,……;对称的,从小数点后的数位则是-1,-2,……
  进行进制转换时,我们不妨设源进制(转换前所用进制)的基为R1,目标进制(转换后所用进制)的基为R2,原数值的表示按数位为AnA(n-1)……A2A1A0.A-1A-2……,R1在R2中的表示为R,则有(AnA(n-1)……A2A1A0.A-1A-2……)R1=(An*R^n+A(n-1)*R^(n-1)+……+A2*R^2+A1*R^1+A0*R^0+A-1*R^(-1)+A-2*R^(-2))R2
  (由于此处不可选择字体,说明如下:An,A2,A-1等符号中,n,2,-1等均应改为下标,而上标的幂次均用^作为前缀)
  举例:
  一个十进制数110,其中百位上的1表示1个10^2,既100,十位的1表示1个10^1,即10,个位的0表示0个100,即0。
  一个二进制数110,其中高位的1表示1个2^2,即4,低位的1表示1个2^1,即2,最低位的0表示0个2^0,即0。
  一个十六进制数110,其中高位的1表示1个16^2,即256,低位的1表示1个16^1,即16,最低位的0表示0个16^0,即0。
  可见,在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,我们称这关系为数的位权。
  十进制数的位权是以10为底的幂,二进制数的位权是以2为底的幂,十六进制数的位权是以16为底的幂。数位由高向低,以降幂的方式排列。

 
进数制之间的转换

  1.二进制数、十六进制数转换为十进制数(按权求和)
  二进制数、十六进制数转换为十进制数的规律是相同的。把二进制数(或十六进制数)按位权形式展开多项式和的形式,求其最后的和,就是其对应的十进制数——简称“按权求和”.
  例如:把(1001.01)2转换为十进制数。
  解:(1001.01)2
  =1*8+4*0+2*0+1*1+0*(1/2)+1*(1/4)
  =8+0+0+1+0+0.25
  =9.25
  把(38A.11)16转换为十进制数
  解:(38A.11)16
  =3×16的2次方+8×16的1次方+10×16的0次方+1×16的-1次方+1×16的-2次方
  =768+128+10+0.0625+0.0039
  =906.0664
  2.十进制数转换为二进制数,十六进制数(除2/16取余法)
  整数转换.一个十进制整数转换为二进制整数通常采用除二取余法,即用2连续除十进制数,直到商为0,逆序排列余数即可得到――简称除二取余法.
  例:将25转换为二进制数
  解:25÷2=12 余数1
  12÷2=6 余数0
  6÷2=3 余数0
  3÷2=1 余数1
  1÷2=0 余数1
  所以25=(11001)2
  同理,把十进制数转换为十六进制数时,将基数2转换成16就可以了.
  例:将25转换为十六进制数
  解:25÷16=1 余数9
  1÷16=0 余数1
  所以25=(19)16
  3.二进制数与十六进制数之间的转换
  由于4位二进制数恰好有16个组合状态,即1位十六进制数与4位二进制数是一一对应的.所以,十六进制数与二进制数的转换是十分简单的.
  (1)十六进制数转换成二进制数,只要将每一位十六进制数用对应的4位二进制数替代即可――简称位分四位.
  例:将(4AF8B)16转换为二进制数.
  解: 4 A F 8 B
  0100 1010 1111 1000 1011
  所以(4AF8B)16=(1001010111110001011)2
  (2)二进制数转换为十六进制数,分别向左,向右每四位一组,依次写出每组4位二进制数所对应的十六进制数――简称四位合一位.
  例:将二进制数(000111010110)2转换为十六进制数.
  解: 0001 1101 0110
  1 D 6
  所以(111010110)2=(1D6)16
  转换时注意最后一组不足4位时必须加0补齐4位

 
数制转换的一般化

  1)R进制转换成十进制
  任意R进制数据按权展开、相加即可得十进制数据。 例如:N = 1101.0101B = 1*2^3+1*2^2+0*21+1*2^0+0*2^-1+1*2^-2+0*2^-3+1*2^-4 = 8+4+0+1+0+0.25+0+0.0625 = 13.3125
  N = 5A.8 H = 5*161+A*160+8*16-1 = 80+10+0.5 = 90.5
  2)十进制转换R 进制
  十进制数转换成R 进制数,须将整数部分和小数部分分别转换.
  1.整数转换----除R 取余法 规则:(1)用R 去除给出的十进制数的整数部分,取其余数作为转换后的R 进制数据的整数部分最低位数字; (2)再用2去除所得的商,取其余数作为转换后的R 进制数据的高一位数字; (3)重复执行(2)操作,一直到商为0结束。 例如: 115 转换成 Binary数据和Hexadecimal数据 (图2-4) 所以 115 = 1110011 B = 73 H
  2.小数转换-----乘R 取整法 规则:(1)用R 去除给出的十进制数的小数部分,取乘积的整数部分作为转换后R 进制小数点后第一位数字; (2)再用R 去乘上一步乘积的小数部分,然后取新乘积的整数部分作为转换后R 进制小数的低一位数字; (3)重复(2)操作,一直到乘积为0,或已得到要求精度数位为止。
关键字:单片机  汇编语言 引用地址:单片机汇编语言详解

上一篇:存储器分类及周期
下一篇:堆栈以及堆和栈的区别

推荐阅读最新更新时间:2024-03-16 12:41

51单片机的数码管和矩阵键盘
使用4*4的矩阵键盘和一个数码管 在4*4的矩阵键盘上编码0-F的字符,和一个数码管显示每个键盘上输入的字符。 //4*4键盘检测程序,按下键后相应的代码显示在数码管上 #include reg51.h typedef unsigned char UINT8; UINT8 i=100; UINT8 j,k,temp,key; void delay(unsigned char i) { for(j=i;j 0;j--) for(k=125;k 0;k--); } UINT8 code table = { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,
[单片机]
74ls164与单片机的串并转换(串转并\串进并出)
74LS164串转并实验 本实验是用74LS164把输入的串行数转换成并行数输出,74LS164为串行输入并行输出移位寄存器,其引脚图及功能如下: A、B:串行输入端; QA~QH:并行输出端; CLR:清零端,低电平有效; CLK:时钟脉冲输入端,上升沿有效。 实验采用单片机串行工作方式0和P1端口两种方式串行输出数据。串行口工作方式0时,数据为8位,从RXD端输出,TXD端输出移位信号,其波特率固定为Fosc/12。在CPU将数据写入SBUF寄存器后,立即启动发送。待8位数据输完后,硬件将状态寄存器的TI位置1,TI必须由软件清零。 串行口工作方式0数据/时钟是自动移位输出,用P1端口输出数据时,要编程位移数据,每输出一个
[单片机]
74ls164与<font color='red'>单片机</font>的串并转换(串转并\串进并出)
基于51单片机的半导体激光器电源控制系统的设计
半导体激光器(LD)体积小,重量轻,转换效率高,省电,并且可以直接调制。基于他的多种优点,现已在科研、工业、军事、医疗等领域得到了日益广泛的应用,同时其驱动电源的问题也更加受到人们的重视。使用单片机对激光器驱动电源的程序化控制,不仅能够有效地实现上述功能,而且可提高整机的自动化程度。同时为激光器驱动电源性能的提高和扩展提供了有利条件。 1总体结构框图 本系统原理如图1所示,主要实现电流源驱动及保护、光功率反馈控制、恒温控制、错误报警及键盘显示等功能,整个系统由单片机控制。本系统中选用了C8051F单片机。C8051F单片机是完全集成的混合信号系统级芯片(SOC),他在一个芯片内集成了构成一个单片机数据采集或控制系统所需要的几乎
[单片机]
基于51<font color='red'>单片机</font>的半导体激光器电源控制系统的设计
一种实用的单片机多字节除法程序
在单片机的实际应用中,除法运算是以比较常见的运算。 以MCS-51单片机为例,虽然提供了除法指令,但只能进行单字节的运算。如果要进行多字节的除法运算,就得自己设计算法。目前,许多资料上都介绍了四字节除以二字节的算法,但它们主要有以下几点不足: 1. 只能求出商,不能求出余数; 2. 在被除数高二字节大于除数时,不能进行运算; 3. 商只有两个字节。 例如,被除数是0FFFFFFFFH,除数是0004H时,商数应该是3FFFFFFFH,余数是0003H。 但是,用以前的算法是无法进行运算的。 在实际运用中,参与运算的数是任意的,有时需要求出余数,有时商数要求有四个字节,因此,以前的算法在实际应用中受到了很大的限制。 为了满
[单片机]
基于单片机的红外发射C语言程序
#include reg52.h sbit P3_4 = P2^1; static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器 static unsigned int endcount; //终止延时计数 static unsigned char flag; //红外发送标志 char iraddr1; //十六位地址的第一个字节 char iraddr2; //十六位地址的第二个字节 void SendIRdata(char p_irdata); void delay(); void main(void) { count = 0; fl
[单片机]
单片机的C编程<2>
说明:以下程序都是经过本人亲自调试并成功. 目的:蜂鸣器的响动 程序如下: #include reg52.h sbit buzzer=P3^5; void delay02s (void) //延时蜂灵 { unsigned x,y,k; for(x=10;x 0;x--) for(y=10;y 0;y--) for(k=248;k 0;k--); } void main(void) //主程序 { while(1) { buzzer=0XFF; delay02s(); buzzer=0X00; delay02s(); } }
[单片机]
C51单片机学习手记之1:一盏闪烁
最近开始学习C51单片机,可谓磕磕绊绊,因为本人比较笨笨啦...(听听Michael Jackson的《Heal The World》就坚持下来了),不知道对大家是否有用... 闲言碎语不要讲,下面我就来说说这迈出的第一步,我从2010年才接触到单片机,想想比别人晚了10多年,不过没关系,只要有心学习,从0-1很难,但从1到100、1000、...可能就没有那么麻烦了。主要要自学单片机原理、电子线路、汇编语言,C语言,如果你刚好学过,那就恭喜啦。 本文旨在介绍单片机入门的基础知识,为和我一样的新手提供一个交流的平台。仿真所使用单片机为 ATMEL公司的AT89C52,软件为PROTEUS和KEIL;只提供原理图和KEIL环境
[单片机]
C51<font color='red'>单片机</font>学习手记之1:一盏闪烁
51单片机常见的硬件电路
要想自己做板,没有硬件电路知识储备是非常困难的,下面我们来说下51单片机中常见的几种电路,大家也可以通过看电路然后来评估一下自己有没有做硬件工程师的潜质。在51单片机中我们常见的电路有晶振电路、复位电路、电源电路、存储电路等。 晶振电路:晶振常用到的有两种。一种是12Mhz的;另一种是11.0592Mhz的。两种晶振的用途是不一样的,12Mhz的比较适合计算延时时间,而另一个晶振比较适合串口通信。 复位电路:51单片机是高电平复位的,想复位是给对应的引脚一个高电平信号就可以实现。 电源电路:常用的5V稳压电路,使用的是LM7805芯片 3.3V稳压电路:我们通过输入5V电压到1117,通
[单片机]
51<font color='red'>单片机</font>常见的硬件电路
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved