基于MCS-51内核的汇编学习笔记

发布者:暮烟微雨最新更新时间:2017-10-07 来源: eefocus关键字:MCS-51内核  汇编 手机看文章 扫描二维码
随时随地手机看文章

数据传送类指令: 
MOV 访问内部数据储存器 
MOVX 访问外部数据储存器 
MOVC 访问ROM储存器 
XCH 整字节交换 
XCHD 半字节交换(低四位) 
PUSH 设置堆栈指针寄存器SP所指向的内容(把字压入堆栈) 
POP 把字弹出堆栈; 
SWAP 高低字节交换指令; 
数据传送指令不影响标志,只有一有堆栈操作可以直接修改程序状态字PSW,这样可以是某些标志位发生变化; 
格式:MOV 操作数 目标操作数 
操作数:A,Rn,direct(直接地址),@Ri(间接地址),#data; 
源操作数:A,Rn,direct(直接地址),@Ri(间接地址); 
提醒:MOV @DPTR,#data; 将16位的数据存入数据指针寄存器DPTR所指向的地址中;

算术运算类指令: 
只能是8位 
ADD 不带进位相加 
ADDC 带进位相加 
INC 加1指令 
SUBB 减法指令,操作数-源操作数-CY 
DEC 减1指令 
DAA 十进制调整指令; 
MUL 乘法指令 
DIV 除法指令 
算术标志指令将会影响进位标志CY,辅助进位标志AC,溢出标志OV:运算时,如果D7进位,则CY被置1,否则清零;如果D3位有进位,则AC将会被置1,否则会被清零;对于无符号数相加,若CY置1,则表示D7进位溢出(大于255);对于无符号数,若和数溢出(大于127或小于-128),则OV被置1;

逻辑运算指令: 
CLR 清0操作数 
CPL 对操作数按位取反 
ANL 与 
ORL 或 
XRL 异或 
RL 操作数左移1位 
RLC 带进位标志左移1位 
RR 右移一位 
RRC 带进位标志右移一位

控制转移指令 
AJMP 
LJMP 
SJMP 
JMP 
ACALL 
LCALL 
JZ 
JNZ 
CJNE 
DJNZ

1条件转移指令 
绝对转移指令 AJMP addr11;PC→PC+2+addr11 
2KB范围内无条件跳转指令,执行该指令时,先将PC+2,然后再将addr11的值送入PC10~PC0,而PC11~P15保持不变,这样得到跳转的目的地址。 
相对转移指令 SJMP rel;PC→PC+2+rel 
执行指令时,先将PC+2,再把指令中带符号的偏移量加上PC上,得到跳转的目的地地址送入PC;目标地址=源地址+2+rel。源地址是SJMP指令操作码(PC)的所在地;相对偏移量rel是一个用补码表示的8位带符号数,转移范围为当前PC的值的+127~-128共256个单元; 
若要求用动态停机可以用SIMP指令来实现:”HERE:SJMP HERE;”或者”HERE:SJMP ;”表示本指令所在单元地址 ($读dollar) 
长跳转指令 addr16; addr16→PC 
执行指令时,addr16可以指向64KB程序储存器中的任何地址,并且不影响标志位; 
间接转移指令(散转指令) 
JMP @A+DPTR; A+DPTR→PC 
将A中的8位无符号数和数据指针DPTR的16位数相加,然后将之后送到PC,并不改变A和DPTR的值,也不影响标志;间接转移指令特点是采用变址方式实现无条件转移,特点是转移地址可以在程序运行中加以改变,从可以实现多支转移。所以一条指令可以完成多条条件判断转移指令的功能;

2 条件转移指令 
JZ rel;A= 0转移 
JNZ rel;A≠0转移; 
这种类转移一句累加器A的值是否为0。满足条件时转移(这个转移就相当于一个相对转移指令PC+2+rel→PC),条件不满足时则顺序执行下面一条指令。 
3 比较转移指令 
MCS51没有专门的比较指令,但提供了下面4条比较不相等转移指令: 
CJNE A,direct,rel; A≠direct转移 
CJNE A,#data,rel; A≠data转移 
CJNE Rn,#data,rel; Rn≠data转移 
CJNE @Ri,#data,rel; Ri≠data转移 
比较操作数和源操作数的大小,如果不想等就转移。相等的话就不转移,继续执行下面的程序;转移地址的计算计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数,CY将会被置1,否则0,但是不影响任何操作数的内容; 
4 减1不为0转移指令 
DJNZ Rn,rel;Rn-1→Rn ≠0转移 
DJNZ direct,rel;direct-1→direct ≠0转移 
这两条指令把原操作数减1,结果送还到源操作数中,如果结果不为0则转移; 
5 调用及返回指令 
绝对调用指令 ACALL addr11 
长调用指令 LCALL addr16 
子程序返回指令 RET 
中断返回指令 RET1 
空操作指令 NOP; PC+1→PC 
6 位操作指令 
操作范围为内部RAM的位寻址区20H~2FH单元中连续的128位,以及特殊功能寄存器中可以进行位寻址的各位;位地址为(00H~7F); 
位操作指令包括布尔变量的传送,逻辑运算,控制转移等指令,共有17条指令,所用到的助记符有MOV,CLR,CPL,SETB,ANL,ORL,JC,JB,JNB,JBC共11种; 
在布尔处理机制中,进位标志CY的作用与CPU中的累加器A,通过CY完成位的传送和逻辑运算。 
指令中位地址的表达方式有以下几种:直接地址方式(90H),点操作符方式(IE.0),位名称方式(EX0)等;

位数据传送指令
MOV     C,bit;bit→CY
MOV bit,C;CY→bit
位变量修改指令
CLR     C;0→CY
CLR     bit;0→bit;
CPL     bit;/bit→bit
CPL     C;/CY→CY
SETB    C;1→CY;
SETB        bit;1→1
位变量逻辑与指令
ANL C,bit;  (CY)^(bit) →CY
ANL C,/bit; (CY)^(/bit) →CY
位变量逻辑或指令
ORL C,bit;      (CY)|(bit) →CY
ORL C,/bit; (CY)|(/bit) →CY
位变量条件条件转移指令
JC  rel     若CY=1,则转移   PC+2+rel→PC
JNC rel     若CY=0, 则转移  PC+2+rel→PC
JB  bit,rel 若bit=1,则转移,PC+3+rel→PC
JNB bit,rel 若bit=0,则转移,PC+3+rel→PC
JBC bit,rel 若bit=1,则转移,PC+3+rel→PC,并且0→bit;
(注意:只有JBC指令执行后,bit位被清0)


关键字:MCS-51内核  汇编 引用地址:基于MCS-51内核的汇编学习笔记

上一篇:51单片机之串口操作入门经验总结与C源程序
下一篇:Printf在51单片机的使用方法

推荐阅读最新更新时间:2024-03-16 15:39

格雷码转换为二进制码_51单片机汇编语言子程序
卡诺图是组合逻辑电路设计和分析最常用和有效的数学工具, 格雷码是特点是任意两相邻代码之间只有一位数不同,其余各位均相同,正好和卡诺图循环邻接特点一致。 格雷码转换为二进制码的51单片机汇编语言子程序如下: ;;入口:8位格雷码存于累加器A, ;;返回值:转换所得8位二进制码仍存于累加器A。 GtoB: MOV R5, #8 ;;R5←循环次数 MOV 22H, A ;;原格雷码送至RAM的22H单元暂存 LP1: RLC A ;;A带进位左移 MOV 23H, A ;;RAM的23H单元←(A) MOV A, 22H ;;A←(22H)
[单片机]
格雷码转换为二进制码_51单片机<font color='red'>汇编</font>语言子程序
PIC12F675两通道的AD转换的汇编程序
;程序功能:上电开机:PIN5为高电平,绿灯亮;PIN2,PIN3为低电平,红灯灭; ; 轮流检测PIN6,PIN7脚电平,欠压3.9V,10V,红灯亮,绿灯灭,过压5.9V,15.9V ; 红灯亮,绿灯灭,alram为TTL高电平,过压锁死 LIST P=12F675 INCLUDE P12F675.INC __CONFIG(B'11000101110100') ;Highest band gap voltage,0,0,Data memory is not protected ;Program memory is code-protected,BOD enabled,MCLR pin is MC
[单片机]
汇编中AREA和ENTRY理解
1、AREA 语法格式: AREA 段名 属性1 ,属性2 ,…… AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用“|”括起来,如:|1_test| 。 属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下: — CODE 属性:用于定义代码段,默认为READONLY 。 — DATA 属性:用于定义数据段,默认为READWRITE 。 — READONLY 属性:指定本段为只读,代码段默认为READONLY 。 — READWRITE 属性:指定本段为可读可写,数据段的默认属性为READWRITE 。
[单片机]
单片机汇编语言编程:汽车转向灯控制器
;刚才在百度知道上看到一个题目: http://zhidao.baidu.com/question/439326240.html ;转眼之间,知道宝贝又找不到了,百度真是变化莫测。 ;呵呵,做而论道已经提前一步保存下来了题目的要求。 ;================================================= ;题目:汽车转向灯控制器的编程 ;1号键(左转向)按下时 实现P3.6闪亮,P0-P2口左流水; ;2号键(右转向)按下时 实现P3.7闪亮,P0-P2口右流水; ;3号键(刹车键)按下时 实现P0-P2口同时亮; ;4号键(紧急状况键) 按下时 实现P3.6和P3.7同时闪亮。 ;按键按住时,执行
[单片机]
单片机<font color='red'>汇编</font>语言编程:汽车转向灯控制器
GNU ARM 汇编指令
第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范。 一. Linux汇编行结构 任何汇编行都是如下结构: ]] 每一个段以段名为开始, 以下一个段名或者文件结尾为结束。这些段都有缺省的标志(flags),连接器可以识别这些标志。(与armasm中的AREA相同)。 下面是ELF格式允许的段标志 标志 含义 a 允许段 w 可写段 x 执行段 【例3】定
[单片机]
单片机串行口通信程序汇编语言编写
ORG 0000H ;http://www.51hei.com 出品汇编语言串口通信程序 mov p1,#0ffh mov p3,#0ffh ;mov p3,#00h mov p1,#00h MOV SCON,#50H;设置成串口1方式 MOV TMOD,#20H;波特率发生器T1工作在模式2上 MOV PCON,#80H;波特率翻倍为2400x2=4800BPS MOV TH1,#0faH;预置初值(按照波特率2400BPS预置初值) MOV TL1,#0FaH;预置初值(按照波特率2400BPS预置初?1 setb tr1 LOOP:JnB P3.2,WRIT; LCALL DELAY10 SETB
[单片机]
51单片机步进电机控制汇编语言程序
;本程序是通过秒信号触发中断来实现的,要求中断程序必须在1S内执行完毕 ;步进电机转速控制是通过8255输入信号在每次执行中断程序内调整控制信号的循环次数来实现的 CODE SEGMENT ASSUME CS:CODE START: PUSH CS POP DS;数据段和代码段共用一个地址 JMP MAIN NUM DB 08H,04H,02H,01H; 定义循环控制信号 DAT1 DB 0H ;定义循环参量 DAT2 DB 0H ;---------初始化8253计数器----------- MAIN: MOV DX,203H;计数器0初始化,工作在方式3 MOV
[单片机]
ARM9 汇编指令总结1
ARM体系结构支持7种处理器模式: 用户模式:正常程序工作模式,不能直接切换到其它模式。 快中断模式:支持高速数据传输及通道处理。FIR异常响应时,进入此模式 中断模式:通用中断处理。IRQ异常响应时,进入此模式。 管理模式:操作系统保护代码,系统复位和软件中断时,进入此模式。 中止模式:支持虚拟内存,存储器保护。 未定义模式:支持硬件协处理器和软件仿真。未定义指令异常响应时,进入此模式。 系统模式:用于支持OS的特权任务。与用户模式类似,但可以直接切换到其它模式。 除用户模式外,其它都为特权模式。某些ARM内部寄存器和一些片内外设在硬件设计上只允许特权模式下访问。特权模式可以自由切换处理器模式。但用户模式不能直接切换到别的模式。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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