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 是指基于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课件

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.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单片机的汇编语言

绝对地址段选择伪指令
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单片机的汇编语言指令系统

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单片机汇编语言程序设计一、二进制数与十六进制数之间的转换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位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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