51 汇编语言源程序的格式

合集下载

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 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。

单片机常用指令

单片机常用指令

计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。

MCS-51单片机汇编语言指令格式:操作符目的操作数,源操作数指令中的常用符号Rn: n=(0~7),表示当前工作寄存器R0~R7中的一个Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器dir : 8 位直接字节地址(片内RAM 和SFR )#data: 8位立即数,即8位常数。

可以为2进制(B)、10进制、16进制(H)、字符(‘ ’)#data16: 表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFHaddr16 : 表示16位地址addr11 : 表示11位地址rel : 相对偏移量(为一字节补码)用于相对转移指令中bit :位地址,在位地址空间中。

$: 表示当前指令的地址。

寻址方式1、立即寻址指令中直接给出操作数的寻址方式。

在51系列单片机的指令系统中,立即数用一个前面加“#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。

立即寻址中的数,称为立即数。

例如指令:MOV A,#30H2、直接寻址操作数的地址直接出现在指令中。

寻址对象:①内部数据存贮器:使用它的地址。

②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。

3、寄存器寻址操作数存放在寄存器中。

寻址对象:A,B,DPTR,R0~R7 。

B 仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。

A 可以寄存器寻址又可以直接寻址,直接寻址时写作ACC例如:MOV A,R0 ;R0→A,A、R0均为寄存器寻址,机器码E8MUL AB ;A*B→BA,A、B为寄存器寻址,机器码A4MOV B,R0 ;R0→B,R0为寄存器寻址,B为直接寻址机器码88F0,其中F0为B的字节地址(见表1-2)PUSH ACC ;A的内容压入堆栈机器码C0E04、寄存器间址操作数存放在以寄存器内容为地址的单元中。

c51的c语言程序格式

c51的c语言程序格式

c51的c语言程序格式
C51 是指基于8051微控制器的编程,通常使用C语言进行开发。

下面是一个简单的C语言程序示例,用于8051微控制器。

```c
include <> // 包含8051的寄存器定义
void main() {
while(1) { // 无限循环
P1 = 0x00; // 将P1端口的所有引脚设置为低电平
delay(1000); // 延时1ms
P1 = 0xFF; // 将P1端口的所有引脚设置为高电平
delay(1000); // 延时1ms
}
}
void delay(unsigned int t) { // 延时函数
while(t--);
}
```
这个程序将在P1端口上周期性地切换高电平和低电平,产生一个简单的LED闪烁效果。

注意:在实际的8051编程中,你还需要考虑如何配置微控制器的时钟、如何配置I/O端口、如何配置中断等。

此外,你还需要一个8051的编译器来编译你的C代码,生成可以在8051上运行的机器码。

51单片机汇编程序设计PPT课件

51单片机汇编程序设计PPT课件
格式:DS n DS n从标号指定单元开始,预留n个单元的存贮区。
5、赋值伪指令
格式汇编指令
格式: END END指示源程序到结束,常将其放在汇编语言源 程序的末尾。
3.3.3 汇编语言程序设计过程
1、分析任务,确定算法或解题思路 2、根据算法和解决思路画出程序流程图 流程图是由一些框图和流程线组合而成:
【例3-10】 求单字节有符号二进制数的补码。
编程如下:
CMPT:
MOV A , 30H
JNB ACC.7 , NCH
;(A)≥0,不需要转换
MOV C , ACC.7 ;保存符号
MOV 10H , C
CPL A
ADD A , #1
MOV C , 10H
MOV ACC.7 , C ;恢复符号
NCH: END
3.3.2 伪指令
1、定位伪指令 格式:ORG n 2、定义字节伪指令 格式:标号:DB X1, X2, ……Xn 此伪指令的功能是把Xi存入从标号开始连续的单元中。 3、定义双字节伪指令 格式:标号:DW X1,X2,……Xn 此伪指令的功能是把Xi存入从标号开始的连续单元中。
4、预留存贮区伪指令
解:编程说明: 内部数据区首址: R0←30H 外部数据区首址: DPTR←2000H 循环次数: R2←32H 程序流程如图3-9所示。
参考程序如下: START: MOV R0 , #30H MOV DPTR , #2000H MOV R2 , #32H
LOOP: MOV A , @R0 MOVX @DPTR , A INC R0 INC DPTR DJNZ R2 , LOOP END
MOV R2 , #10H MOV R4 , #00H MOV R5 , #00H

第4章80C51的汇编语言程序设计

第4章80C51的汇编语言程序设计

4.3.1 顺序程序
(无分支、无循环)
4.3 基本程序结构
【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。
ORG 0040H START:MOV A,21H ;取十位ASCII码 ANL A,#0FH ;保留低半字节 SWAP A ;移至高半字节 MOV 20H,A ;存于20H单元 MOV A,22H ;取个位ASCII码 ANL A,#0FH ;保留低半字节 ORL 20H,A ;合并到结果单元 SJMP $ END
1400H
32H
4AH
00H
3CH
1401H
1402H
1403H
大端模式
定义常值为符号名伪指令EQU
符号名 EQU 常值表达式
LEN EQU 10 SUM EQU 21H BLOCK EQU 22H CLR A MOV R7,#LEN MOV R0,#BLOCK LOOP:ADD A,@R0 INC R0 DJNZ R7,LOOP MOV SUM,A
4.1.3 汇编语言的语句格式
非数字字符开头,后跟字母、数字、“-”、“?”等 不能用已定义的保留字(指令助记符、伪指令等) 后跟英文冒号“:”
Keil的汇编器A51可以识别的语句形式为:
标号(即符号地址)
[标号:] 指令助记符 [操作数1,] [操作数2,] [操作数3,] [;注释]
指令助记符
4.2.2 伪指令
伪指令,也叫汇编命令。仅对汇编过程进行指示 伪指令无对应的单片机可执行代码
起始地址设定伪指令ORG
ORG 表达式
表达式通常为十六进制地址,例:

MCS-51单片机的汇编语言

MCS-51单片机的汇编语言

绝对地址段选择伪指令
CSEG
[AT
address]
DSEG
[AT
address]
ISEG
[AT
address]
BSEG
[AT
address]
XSEG
[AT
address]
分别为程序存储器、内部数据存储器、间接寻址的内部数据存 储器、位寻址区和外部数据存储器的使用指定绝对地址
1.5 通用的转移和调用语句
MCS-51汇编器允许程序员使用通用的转移和调用助记符JMP 与CALL
用来代替SJMP、AJMP、LJMP和ACALL、LCALL
汇编产生的未必是最优化的结果
1.6 条件汇编
将一个软件的多个版本保存在同一组源程序文件中 使用IF、ELSEIF、ELSE、ENDIF IF或ELSEIF后的表达式通常为关系表达式 当IF或ELSEIF后的数值表达式的值非零时,汇编其后的语句组;
1.4 伪指令语句
ORG伪指令
ORG
பைடு நூலகம்
expression
设置汇编计数器的值,指定其后语句的起始地址
伪指令语句
END伪指令
应当是源程序的最后一条语句 通知汇编程序汇编过程应在此结束 汇编器不理会END后面的文件内容
每个程序文件都应以END结束
伪指令语句
EQU和SET伪指令
symbol
单片机原理与应用
MCS-51单片机的汇编语言
INTS SET
IF ELSE ENDIF
INTS = 1 MAIN_START
MAIN_START
NUM1 DATA NUM2 DATA
DSEG AT
STACK: DS
20H

MCS-51单片机的汇编语言指令系统

MCS-51单片机的汇编语言指令系统

3.2.3 寄存器寻址方式 操作数在寄存器中
MOV A,R0
寻址范围: (1)工作寄存器:4组R0~R7 (2)部分特殊功能寄存器:如A、B、DPTR等
3.2.4 寄存器间接寻址方式
寄存器中存放的是操作数的地址, 即操作数是通过寄存器间接得到的 如:MOV A,@R0
寻址范围: (1)内部RAM低128单元 (2)外部RAM 64KB 如 MOVX A,@DPTR (3)外部RAM的低256单元 如:MOV A,@R0 (4)堆栈操作指令(PUSH、POP),以堆栈作间址
如: INC DPTR 1010 0011
MOV A,Rn
无操作数 含有操作数
1110 1rrr
一字节指令49条
2、双字节指令 包括二个字节,其中第一个字节为操作码,
第二个字节为操作数
如:MOV A,#data 指令代码:0111 0100
立即数
双字节指令共45条
3、三字节指令 三字节指令中,操作码占一个字节 操作数占两个字节
目的地址=转移指令地址+转移指令字节数+ rel 偏移量rel是一个带符号的8位二进制补码数,表示的数 的范围是:-128~+127
3.2.7 位寻址方式 位处理功能,可以对数据位进行操作
如:MOV C,3AH 把3AH位的状态送进位位C 寻址范围: (1)内部RAM中的位寻址区
单元地址为20H~2FH,共16个单元128位,位地址 是00H~7FH (2)专用寄存器的可寻址位 可供寻址的专用寄存器共有11个,实有寻址位83位
第3章 MCS-51单片机的汇编语言指令系统
3.1 指令格式及其符号说明
单片机汇编语言:助记符语言 单片机的指令:是CPU用于控制功能部件完成某一

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

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

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位。

MCS-51汇编语言程序设计

MCS-51汇编语言程序设计
20
判断正误
ORG 0000 LEN1 DATA 31H LEN2 EQU 32H MOV A, LEN1+1 MOV B,LEN2+1 MOV R1,#LEN1 MOV R2,#LEN2 MOV R2,#LEN2+LEN1 ;CNT1 DATA R5 CNT2 EQU R6 ;CNT EQU ADD MOV R3,#LEN1+1 MOV R4,#LEN2+1 MOV DPTR,#TOEND TOEND:SJMP $ LEN1 DATA 31H LEN2 EQU 32H END
用汇编语言与用高级语言进行程序设计很相似。对于比 较复杂的问题可以先根据题目的要求作出流程图,然后 再根据流程图来编写程序。对于比较简单的问题则可以 不作流程因而直接编程。 两者的差别还是很大的。一个很重要的差别就在于用汇 编语言编程时,对于数据的存放位置,以及工作单元的 安排等都要由编程者自己安排。而用高级语言编程时, 这些问题都是由计算机安排的,编程者则不必过问。 主要知识点:顺序程序;分支程序;循环程序; 查表程序;子程序;运算程序 ;
6
基本语法规则3
对于直接地址direct,有多种选择: (1)直接数据地址(各种进制),如MOV A、30H等; (2)标号地址,如MOV A,SUM等, SUM应该在程序中 某处加以定义; (3)带有加减的表达式,设SUM为已定义的标号地址, 如MOV A,SUM十13; (4)特殊功能寄存器名,如MOV A,P2等。
24
程序框架
1. ORG 0000H 2. LJMP MAIN
;跳转至主程序
中断入口地址
3. ORG 0003H 4. LJMP INT0_INT ;跳转至外部中断0的中断服务程序

ASM-51 宏汇编使用手册

ASM-51 宏汇编使用手册

ASM-51 宏汇编使用手册强烈推荐使用配套光盘中的MedWin或Keil开发环境进行编程!其中的A51与这里的ASM51基本相同ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能。

源程序的编写完全采用 Inter标准助记符和行格式。

在编写程序过程中,可借助于文本编辑(Windows的记事本)或文字处理软件Word等编辑,经ASM-51汇编后生成列表输出文件(.LST)和目标代码文件(.HEX)。

此目标代码文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051进行模拟/调试,或直接用于硬件仿真器上运行。

当然,这也是要烧写到单片机ROM中的代码。

1、宏汇编语言的基本语法1、1 宏汇编的特点ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编控制指令和多层条件语句,程序逻辑分段,还有模块化程序设计的连接功能,汇编速度快等特点。

1、2 汇编处理过程(1) 用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编语言源程序,它的文件扩展名为。

ASM。

(2) 用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。

列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。

目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。

进行模拟/调试,或直接用于硬件仿真器上运行。

1、3 语句汇编语言可分为两类语句:指令性语句和指示性语句。

(1)指令性语句这一类语句是指在汇编过程中能生成指令代码的语句(如 MOV ,DEC等)。

其格式为:[标号:] [指令助记符] [操作数] [;注释]其中方括号[ ]中为选择项。

下同。

51单片机汇编语言

51单片机汇编语言

51单片机汇编语言51单片机汇编语言是一种基于51系列单片机的汇编语言,它是一种直接操作硬件的低级语言。

在嵌入式系统开发中,经常需要使用汇编语言来编写底层驱动程序和实现特定功能。

本文将介绍51单片机汇编语言的基本概念、语法结构以及常用指令集。

一、51单片机简介51单片机是一种基于哈佛结构的8位单片机,由英特尔公司设计,并于1980年发布。

它具有低功耗、高性能和易于编程的特点,广泛应用于家电、汽车电子、工控设备等领域。

二、汇编语言基础1. 数据类型:51单片机汇编语言支持的数据类型包括位(bit)、字节(byte)、字(word)和双字(dword)。

可以通过定义变量来使用这些数据类型。

2. 寄存器:51单片机包含一组通用寄存器和特殊功能寄存器。

通用寄存器用于存储临时数据,特殊功能寄存器用于控制和配置硬件。

常用的通用寄存器有ACC累加器、B寄存器和DPTR数据指针。

3. 指令集:51单片机汇编语言的指令集丰富多样,包括数据传送指令、算术运算指令、逻辑运算指令、跳转指令等。

例如,MOV指令用于数据传送,ADD指令用于加法运算,JMP指令用于无条件跳转。

三、汇编语言示例下面是一个简单的51单片机汇编语言程序示例,实现了一个LED 灯的闪烁效果。

```ORG 0x0000 ; 程序起始地址MOV P1, #0x00 ; 将0x00赋值给P1口,关闭LED灯LOOP:MOV P1, #0xFF ; 将0xFF赋值给P1口,打开LED灯CALL DELAY ; 调用延时子程序MOV P1, #0x00 ; 将0x00赋值给P1口,关闭LED灯CALL DELAY ; 调用延时子程序JMP LOOP ; 无条件跳转到LOOP标签DELAY:MOV R0, #0xFF ; 将0xFF赋值给R0寄存器DELAY_LOOP:DJNZ R0, DELAY_LOOP ; R0减1,如果不等于0则跳转到DELAY_LOOP标签RET ; 返回调用子程序的指令END ; 程序结束标志```四、汇编语言开发工具51单片机汇编语言的开发工具有很多,常用的有Keil C51、SDCC、ASM51等。

51单片机习题及答案

51单片机习题及答案

C51单片机习题及答案第一章1-1选择1.计算机中最常用的字符信息编码是( A )A ASCIIB BCD码C 余3码D 循环码2.要MCS-51系统中,若晶振频率屡8MHz,一个机器周期等于(A ) μsA 1.5B 3C 1D 0.53.MCS-51的时钟最高频率是( A ).A 12MHzB 6 MHzC 8 MHzD 10 MHz4.以下不是构成的控制器部件(D ):A 程序计数器、B指令寄存器、C指令译码器、D存储器5.以下不是构成单片机的部件(D )A 微处理器(CPU)、B存储器C接口适配器(I\O接口电路) D 打印机6.下列不是单片机总线是(D )A 地址总线B 控制总线C 数据总线D 输出总线7.-49D的二进制补码为.( B )A 11101111B 11101101C 0001000D 111011008.十进制29的二进制表示为原码(C )A 11100010B 10101111C 00011101D 000011119. 十进制0.625转换成二进制数是( A )A 0.101B 0.111C 0.110D 0.10010 选出不是计算机中常作的码制是( D )A 原码B 反码C补码 D ASCII1-2填空1.计算机中常作的码制有原码、反码和补码2.十进制29的二进制表示为000111013.十进制数-29的8位补码表示为.111000114.单片微型机CPU、存储器和I\O接口三部分组成.5.若不使用MCS-51片内存器引脚EA必须接地.6.输入输出设备是计算机与外部世界交换信息的载体.7.十进制数-47用8位二进制补码表示为.110100018.-49D的二进制补码为.111011019.计算机中最常用的字符信息编码是ASCII10.计算机中的数称为机器数,它的实际值叫真值。

1-3判断1.我们所说的计算机实质上是计算机的硬件系统与软件系统的总称。

(√)2.MCS-51上电复位时,SBUF=00H。

经典:80C51单片机汇编语言程序设计

经典:80C51单片机汇编语言程序设计

上例中,如果采用CJNE指令,应如何修改程序? 18
XAD EQU
1000H;
BUF EQU
2000H;
ORG 1000H
START:MOV DPTR, #XAD ;数据X的地址送数据指针DPTR
MOVX A,
@DPTR; A←取数据X
CJNE A, #0, ANZ ; X≠0转ANZ
SJMP SAV;
难度较大。要求使用者必须精通单片机的硬件系 统和指令系统。缺乏通用性,程序不易移植。
2
4.1.2 单片机使用的高级语言
对于8051单片机,现有4种语言支持,即汇编、 PL/M、C和BASIC。
C语言最终得到广泛应用。 可以大大提高单片机应用系统研制的开发效率。移 植性好。 高级语言的不足:生成的目标代码较长,导致应用程 序运行速度较慢。
分支程序
BR1: …
BRn: …
21
(2)通过转移指令表实现程序多分支
MOV A, n
RL A
;分支序号值乘以2
MOV DPTR, #BRTAB;转移指令表首址
JMP @A+DPTR
BRTAB: AJMP BR0
;转分支程序0
AJMP BR1
;转分支程序1
BR0: … BR1: …
AJMP BR127
顺序结构程序是最简单的程序结构。程序既无分支、 循环,也不调用子程序,程序执行时一条接一条地 按顺序执行指令。
6
2、程序设计的一般步骤
(1)分析任务 (2)确定算法 (3)画流程图 (4)编写程序 (5)上机调试
查错、改错, 用指令的形式
对程序进行 将程序流程图
优化。
实现出来。
当接到程序设计的任务后, 首先对任务进行详尽的分析, 搞清楚已知的数据和想要得 到的结果,程序应该完成何 种的功能。明确在程序设计 时应该 “做什么” 。

MCS-51单片机汇编语言概述

MCS-51单片机汇编语言概述
单片机原理与应用
1.1 汇编语言的特点
汇编语言是用助记符来表示机器语言的指令代码的。汇编 语言具有如下特点: ① 助记符指令和机器指令一一对应。用汇编语言编写的程序效 率高,占用存储空间小,运行速度快,且能编写出最优化的 程序。 ② 汇编语言与计算机硬件设备密切相关。汇编语言程序能直接 管理和控制硬件设备,直接访问存储器及接口电路,也能处 理中断。 ③ 汇编语言编程比高级语言程序的编写和调试要困难。汇编语 言是面向计算机的,汇编语言的程序设计人员必须对计算机 硬件有相当深入的了解。 ④ 汇编语言缺乏通用性,程序不易移植。各种计算机都有自己 的汇编语言,不同计算机的汇编语言之间不能通用。
① 标号由1~8个ASCII码字符组成,第一个字符必须是字母,其余 字符可以是字母、数字和一些特定字符。
② 不能使用汇编语言中已经定义的符号作为标号,如指令助 记符、 伪指令、专用寄存器的符号名称等均不能用作标号。
③ 标号后必须紧跟一个冒号。
④ 同一个标号在一个程序中只能定义一次,不能重复定义。
⑤ 一条语句可以有标号,也可以没有标号,标号的有无取决于 本程序中的其他语句是否需要访问这条语句。
TBL:
DB
DB
30H 0C0H,0F9H,0A4H 0B0H,99H,92H
第二条伪指令定义了一个常数表,该表的起始地址为 TBL,表中数据按伪指令中数据的顺序排列。
又例如:
DB
“how old are you?”,“A”,“#”
把引号中的字符按ASCII码存于连续的ROM中。
5. DW 定义字命令
其功能是从指定的地址单元开始,定义若干个16位的数据字。 命令格式:
[标号:] DW 字数据表
一个数据字占两个字节。存放时,高8位在前(低地址),低8位在 后(高地址)。例如:

第三章MCS-51指令系统及汇编语言程序设计

第三章MCS-51指令系统及汇编语言程序设计

指 令 系 统 的 寻 址 方 式
MCS-51指令系统及一般说明 MCS-51指令系统及一般说明
在介绍指令之前, 在介绍指令之前 , 先对指令中使用的一些符号意义进行简单 的说明。 的说明。 direct---直接地址, ---直接地址 ① direct---直接地址,即8位的内部数据存储器单元或特殊 功能寄存器的地址。 功能寄存器的地址。 #data--包含在指令中的8位常数。 --包含在指令中的 ② #data--包含在指令中的8位常数。 #datal6--包含在指令中的16位常数 包含在指令中的16位常数。 ③ #datal6--包含在指令中的16位常数。 rel-- 位的带符号的偏移量。用于SJMP --8 SJMP及所有的条件转移 ④ rel--8位的带符号的偏移量。用于SJMP及所有的条件转移 指令中。 指令中 。 偏移量按相对于下一条指令的第一个字节地址与跳转 后指令第一个字节地址之差计算, 范围内取值。 后指令第一个字节地址之差计算,在-128~+127范围内取值。 128 +127范围内取值 DPTR--数据指针,可用作16位的地址寄存器。 --数据指针 16位的地址寄存器 ⑤ DPTR--数据指针,可用作16位的地址寄存器。
指 令 系 统 的 寻 址 方 式
寄存器间接寻址
寄存器间接寻址方式可用于访问内部RAM 或外部数据存储器 寄存器间接寻址方式可用于访问内部 RAM或外部数据存储器 。 RAM 或外部数据存储器。 这种寻址方式是由指令指定某一寄存器的内容作为操作数的 地址。 地址。 其中(Ri)=40H (Ri)=40 例如 MOV A,@Ri ;(i=0或1),其中(Ri)=40H 这条指令表示从Ri中找到源操作数所在单元的地址, Ri中找到源操作数所在单元的地址 这条指令表示从Ri中找到源操作数所在单元的地址,把该地 址中的内容传送给A 即把内部RAM 40H单元的内容送到累加器A RAM中 址中的内容传送给A。即把内部RAM中40H单元的内容送到累加器A 中。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 五 章 汇 编 语 言 程 序 设 计
4. 子程序 ③通过堆栈传递参数 例5.19 在HEX单元有2个16进制数, 试将它们分别转换成ASCII码, 存 入ASC和ASC+1单元。 HEX DATA 30H ASC DATA 31H PUSH HEX ACALL HASC POP ASC MOV A, HEX SWAP A PUSH ACC ACALL HASC POP ASC+1 SJMP $
5.4 MCS-51程序设计举例
第 五 章 汇 编 语 言 程 序 设 计
4. 子程序 ①通过R0~R7或A来传送数据
2
03 31 09
例5.17 用程序实现c=a2+b2。设a,b,c存于内部RAM的D1,D2,D3。 MOV A, D1 ACALLSQR MOV R1, A MOV A, D2 ACALLSQR ADD A, R1 MOV D3, A SJMP $ SQR: INC A MOVC A, @A+PC RET TAB: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END
2
03 31 09
MOV MOV LOOP: MOV ANL ADD MOVC MOV INC MOV
TEMP, R0 TEMP+1,R1 A, @R0 A, #0FH A, #18 A, @A+PC @R1, A R1 A, @R0
SWAP A ANL A, #0FH ADD A, #9 MOVC A, @A+PC MOV @R1, A INC R1 INC R0 DJNZ R2, LOOP MOV R0, TEMP MOV R1, TEMP+1 ; RET ASCTB:DB “0,1,2,3,4,5,6,7,8,9” DB “A,B,C,D,E,F” TEMP DATA 20H END
R1, R2,
#BLOCK
#SUM #0
N2:
ADD
INC MOV
A,
R1 @R1,
B
A R2 R3 A
MOV
MOV JNB MOV N1: INC MOV JNB
R3,
A, R2, R0 B, B.7,
#0
@R0 #0FFH @R0 N2
DEC
MOV MOV RET
R1
A, @R1,
ACC.7, N1
格式: OGR
eg. ORG START:MOV
16位地址
2000H A,#64H
2. END(汇编结束)——在END以后所写的指令,汇编程序都不予处理。源程
序中只能有一条END,放在所有指令的最后。
格式:END 3. EQU(等值命令)——将一个数或特定的汇编符号赋予规定的字符名称。用
EQU定义的字符名称,必须先定义后使用,且通常不能用于表达式中。
2
03 31 09
HASC: DEC SP DEC SP POP ACC ANL A, #0FH ADD A, #7 MOVC A, @A+PC PUSH ACC INC SP INC SP RET ASCTB:DB “0, 1, 2, 3, 4, 5, 6, 7” DB “8, 9, A, B, C, D, E, F” END
2. 操作数
A. 对于#data: #10010010B; #10; #9BH; #0ABH→注意不能丢掉前面的0; 否则 按符号地址ABH处理。eg. MOV A,#0ABH <=> MOV A,#ABH B. 对于直接地址dirdct可以用: ①10010011B;98;0F9H;eg. MOV A,98 ②标号地址:eg. MOV A,SUM ③带 +、-号的表达式 => 直接地址:eg. MOV A,SUM+3 ④SFR名:eg. MOV A,P2 C. 对于相对寻址的 rel:除可以采用上面提到的① ② ③外,还允许采用一个专 门的符号“$”,它表示相对转移指令所在的地址。eg. JNB TF0,$ *源程序中除“注释”外,不能出现全角符号;即必须全为西文字符。
5.4 MCS-51程序设计举例
第 五 章 汇 编 语 言 程 序 设 计
1. 分支程序设计 例5.8 设有4分支, 对应R3的值为 0~3; 每分支用于分别从内部RAM, 外部RAM256B, 外部64kB, 或外部 RAM4kB缓冲区读取数据, 设低8 位地址=>R0,高8位地址=>R1。 MOV A, R3 MOV DPTR, #BRTAB MOVC A, @A+DPTR JMP @A+DPTR BRTAB:DB BR0 -BRTAB DB BR1 -BRTAB DB BR2 -BRTAB DB BR3 -BRTAB BR0: MOV SJMP MOVX SJMP MOV MOV MOVX SJMP MOV ANL ANL ORL MOVX SJMP A, BRE A, BRE DPL, DPH, A, BRE A, A, P2, P2, A, $
03 31 09
5.2 伪指令
第 五 章 汇 编 语 言 程 序 设 计
1
每种汇编语言都会定义若干条伪指令,用来对汇编过程进行某种控 制,或者对符号、标号赋值。 1. ORG(汇编起始命令)——用于规定下面的目标程序的起始地址,在源程序
中可以多次使用,但所规定的地址必须从小到大,且不能造成地址重叠。
5.4 MCS-51程序设计举例
第 五 章 汇 编 语 言 程 序 设 计
5. 运算程序
2
例5.20 8位带符号数加法, 和超过8位。两个加数存于BLOCK和BLOCK+1单元, 和存在SUM和SUM+1单元。(先将两个8位带符号数扩展为16位带符号数,再相加)
MOV
MOV SUB: MOV
R0,
03 31 09
5.4 MCS-51程序设计举例
第 五 章 汇 编 语 言 程 序 设 计
1. 分支程序设计
1
例5.6_设变量X存放在VAR单元, 函数值Y存放在FUNC单元。按下式给Y赋值: -1 X < 10 Y= 0 10≤X≤20 1 20 < X VAR DATA 30H FUNC DATA 31H MOV A, VAR
5.4 MCS-51程序设计举例
第 五 章 汇 编 语 言 程 序 设 计
②通过R0, R1和DPTR传递数据所在地址
2
例5.18 求两个无符号数据块的最大值。数据块的首地址为BLOCK1和BLOCK2, 每个数据块的第一个字节都存放数据块的长度,设长度不为0,结果存入MAX单元。
TEM
DATA 20H MOV R1, #BLOCK1 ACALLFMAX MOV TEM, A MOV R1, #BLOCK2 ACALLFMAX CJNE A, TEM, NEX NEX: JNC NEX1 MOV A, TEM NEX1: MOV MAX, A SJMP $
{
CJNE NEXT1: JC MOV CJNE NEXT3: JNC MOV SJMP NEXT2: MOV NEXT4: MOV
A, #10, NEXT1 NEXT2 R0, #1 A, #21, NEXT3 NEXT4 R0, #0 NEXT4 R0, #0FFH FUNC, R0
03 31 09
R1
40H, 79H, 24H 0H, 19H, 12H 02H, 78H, 00H, 18H
5.4 MCS-51程序设计举例
第 五 章 汇 编 语 言 程 序 设 计
3. 查表程序 例5.15 将一组16进制数转换为ASCII
码。每个字节内存放两个16进制数。 16进制数据块首地址存于R0,存放 ASCII码区域的首地址存于R1,数据 块长度存于R2。
2
LOOP:
NEXT: RESU:
03 31 09
KTAB:
MOV MOV MOV MOV MOVC CJNE SJMP INC SJMP MOV RET DB DB DB
R1, B, DPTR, A, A, A, B, RESU R1 LOOP A,
#00H A #KTAB R1 @A+DPTR NEXT
5.4 MCS-51程序设计举例
第 五 章 汇 编 语 言 程 序 设 计
例5.13 有10组3字节的被加数和加数, 分别存在两个数据块中, 首地址
2
分别存于R0和R1中, 求这10组数的10组和, 各组的和仍送回以R0为指针的单元。
03 31 09
MOV MOV MOV LOOP: MOV CLR LOOP1:MOV ADDC MOV INC INC DJNZ DJNZ MOV MOV TEMP DATA
TEMP, TEMP+1, R3, R2, C A, A, @R0, R0 R1 R2, R3, R0, R1, 20H
R0 R1 #10 #3
@R0 @R1 A
LOOP1 LOOP TEMP TEMP+1
5.4 MCS-51程序设计举例
第 五 章ห้องสมุดไป่ตู้汇 编 语 言 程 序 设 计
3. 查表程序
例5.16若A中存放的是某一位十进制数的7段码, 通过查表程序, 将其转 换为相应的BCD码, 仍存于A中。
03 31 09
格式:字符名称 EQU 数或汇编符号 4. DATA(数据地址赋值命令)——将数据地址或代码地址赋予规定的字符名
称; 用DATA定义的字符名称,允许先使用后定义,且可用在表达式中。
格式:字符名称 DATA 表达式
5.2 伪指令
第 五 章 汇 编 语 言 程 序 设 计
1
5. BIT(位地址符号命令)——将位地址赋予所规定的字符名称。 格式:字符名称 BIT 位地址;eg. A1 BIT P1.0 ; A2 BIT 20H 6. DB/DW(定义字节/字命令)——从指定地址单元开始, 定义若干个8/16 位内存单元内容 格式: [标号:] DB 8位二进制数表 ; [标号:] DW 16位二进制数表 ;(*高8位在前,低8位在后) eg. lab: DB 45H, 73, “5”, “A” DW 45H, 73, “5”, “A” *注意2者的区别 7. DS(定义空间命令)——从指定地址单元开始,保留若干字节内存空间备用。 格式: [标号:] DS 表达式 ; **以上6、7两条伪指令均只能作用于ROM
相关文档
最新文档