MCS51单片机指令系统及汇编语言程序设计

合集下载

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

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

加1指令(5条)
INC INC INC INC INC A direct @Ri Rn DPTR
减1指令(4条)
DEC DEC DEC DEC A direct @Ri Rn
十进制调整指令(1条)
DA A ; DA指令只能放在加法指令后应用,把A中按二进制 相加后的结果调整成按BCD数相加的结果 。
堆栈操作类指令(2条)
PUSH direct POP direct 例:SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入 08H地址单元,SP=08H。
交换指令(5条)
XCH A,Rn XCH A,@Ri XCH A,direct XCHD A,@Ri SWAP A 例:A=80H,R0=32H,(32H)=FFH,指令XCHD A,@R0执行 后,A=8FH,(32H)=F0H。
• 作业: • 计算 2B46H * 8AH ,将计算结果放在片内 • RAM 4FH、4EH、4DH单元,4DH放最低 位。
3. 逻辑操作类指令(共24条)
“与”操作指令(6条)
ANL ANL ANL ANL ANL ANL A,direct A,#data A,Rn A,@Ri direct,A direct,#data
逻辑操作类指令共有24条,主要包括“与”、“或”、“异或”、求反、 清0、左右移位等逻辑操作。
“或”操作指令(6条)
ORL A,direct ORL A,#data ORL A,Rn ORL A,@Ri ORL direct,A ORL direct,#data 例:(21H)=3AH,A=14H,指令ORL 21H,A执行后,(21H)=3EH。
CHENG: MOV A , R2 • MOV B , R3 • MUL AB • MOV R5 , A • MOV R6 , B • MOV A , R2 • MOV B , R4 • MUL AB • ADD A , R6 • MOV R6 , A • MOV A , B • ADDC A , #00H • MOV R7 , A • RET

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。

指令系统与汇编语言程序设计

指令系统与汇编语言程序设计

1010011i n
85 n1 n2
MOV DPTR,#d1d2 ;DPTR←d1d2
90 d1 d2
习题1:找出配对指令,实精现选p反pt 向传送。
《单片机原理及应用》教学课件
例2-4-1:顺序执行下列指令序列,求每一步执行结果。
MOV A,#30H
;A= 30H
MOV 4FH,A
;(4FH)= 30H
2-1 指令格式
一. 汇编语言指令格式 [标号:]操作码 操作数1,操作数2[;注释]
换行表示一条指令结束。 例: LOOP: MOV A,#40H ;取参数
1.标号:指令的符号地址 2.操作码:指明指令功能。 3.操作数:指令操作对象 数据、地址、寄存器名及约定符号。 4.注释行:说明指令在程序中的作用。
第2章 指令系统与汇编语言程序设计 2-1 指令格式 2-2 指令寻址方式 2-3 状态标志 2-4 MCS-51指令系统
《单片机原理及应用》教学课件
单片机指令系统概述
一、MCS-51指令分类
MCS-51单片机共有111条指令。 1.按指令所占的字节数分类
①单字节指令49条 ②双字节指令46条 ③三字节指令16条 每条指令的平均字节数:
精选ppt
《单片机原理及应用》教学课件
例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要 求将查表求Y,存入片内RAM21H单元。
2)指令地址
1000H 1002H 1004H 1005H 1007H 1008H 100BH
源程序
ORG 1000H
;程序起始地址
SQU: MOV A,20H ;取X
操作码和操作数是指令主体。
精选ppt

第三章MCS51单片机的指令系统和汇编语言程序示例(第5范文

第三章MCS51单片机的指令系统和汇编语言程序示例(第5范文

第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1)MOV A,#19HADD A,#66H(2)MOV A,#5AHADD A,#6BH2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?(1)ADDC A,R0, (2)ADDC A,31H(3) ADDC A,@R0, (4) ADDC A,#85H3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。

4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?CLR CMOV A,#52HSUBB A,#0B4H5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R16.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。

7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。

8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?(1)MOV A, #0FFH ANL A, R0(2)MOV A, #0FH ANL A, 30H(3)MOV A, #0F0H ANL A, @R0(4)MOV A, #80H ANL 30H, A9.设:A=0AAH和P1=0FFH,试编程把累加器A的低四位送入P1口的低四位,P1口的高四位保持不变。

大学课件MCS51单片机指令系统与汇编语言程序设计

大学课件MCS51单片机指令系统与汇编语言程序设计

ANL C, P ; (C)← (C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。
(4)字节符号地址(字节名称)加位序号的形式。对于部分特 殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名 称加位序号形式来访问某一位。AC 如:
定义:操作数存放在MCS-51内部的某个工作寄存器Rn (R0~R7)或部分专用寄存器中,这种寻址方式称为 寄存器寻址。
特点:由指令指出某一个寄存器的内容作为操作数。 存放操作数的寄存器在指令代码中不占据单独的一个 字节,而是嵌入(隐含)到操作码字节中。
寻址范围:四组通用寄存器Rn(R0~R7)、部分专用 寄存器( A, B, DPTR, Cy )。
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制 信息,不产生可执行的目标代码,是CPU不能执行的指令。
(1)定位伪指令ORG
格式:ORG n
其中:n通常为绝对地址,可以是十六进制数、标号或表达式。
功能:规定编译后的机器代码存放的起始位置。在一个汇编 语言源程序中允许存在多条定位伪指令,但每一个n值都应和前
2.2.2 直接寻址
定义:将操作数的地址直接存放在指令中,这种寻址方式称为 直接寻址。 特点:指令中含有操作数的地址。该地址指出了参与操作的数 据所在的字节单元地址或位地址。计算机执行它们时便可根据 直接地址找到所需要的操作数。
寻址范围:ROM、片内RAM区、SFR和位地址空间。P42
2.2.3 寄存器寻址
定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址 方式称为位寻址方式。
特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中 的某一位的地址进行操作。
寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位 可以位寻址)。

第3章_MCS-51单片机指令系统及汇编语言程序设计2

第3章_MCS-51单片机指令系统及汇编语言程序设计2

3. 汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用? 答案: MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。 标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操 作码之间可以有空格。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 4. MCS-51汇编语言有哪几条常用伪指令?各起什么作用? 答案: ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址; EQU:赋值指令,用来给变量标号赋予一个确定的数值; DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中; DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中; DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元; BIT:位定义,其功能是把位地址赋给字符名称; END:汇编结束,表明汇编语言程序结束。
2.顺序程序
顺序程序是指程序中没有使用转移类指令的程序段,机器执行这 类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环, 也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0~255之间,将其除以100后, 商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存 放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中, #64H可直接写成#100 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH ;将10送入B中, #0AH可直接写成#10 DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $

第4章 MCS-51单片机汇编语言程序设计

第4章 MCS-51单片机汇编语言程序设计
开始
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END

第4章 MCS-51单片机的汇编语言程序设计

第4章 MCS-51单片机的汇编语言程序设计

下面介绍一些MCS-51汇编程序常用的伪指令。 (1)汇编起始伪指令ORG 格式:[标号:] ORG 16位地址 功能:规定程序块或数据块存放的起 始地址。如: ORG 8000H START: MOV A ,#30H …… 该指令规定第一条指令从地址 8000H 单元开 始存放,即标号START的值为8000H。
【例4.5】多分支程序。根据R7的内容分别转向相应的处理程序。 设R7的内容为处理程序的序号0~N,对应的处理程序的入口地 址分别为A0~AN。 程序如下: START:MOV DPTR,#TAB ;设置数据指针 MOV A,R7 ;处理程序的序号送A ADD A,R7 ;序号加倍后作为偏移量 MOV R3,A ;偏移量暂存于R3 MOVC A,@A+DPTR ;取处理程序入口地址高8位 XCH A,R3;偏移量交换于A中,入口地址高8位交换于R3中 INC A ;偏移量加1 MOVC A,@A+DPTR ;取处理程序入口地址低8位 MOV DPL,A ;低8位地址送DPL MOV DPH,R3 ;高8位地址送DPH CLR A ;A 清0 JMP @A+DPTR ;转向相应的处理程序 TAB: DW A0,A1,A2, A,41H
MOV R1,A CLR A ADDC A,#00H MOV R0,A MOV A,42H ADD A,R1 MOV R1,A CLR A ADDC A,RO MOV R0,A
;取40H单元值 ;40H单元值+41H单元值,结果存 ;于A中,并影响标志位CY ;结果暂存于R1 ;A清0 ;进位标志CY送A ;CY送高位 ; 取42H单元值 ;前两单元和的低位与42H单元内容相加, ;并影响标志位CY ;和的低位存于R1 ; ;两次高位相加 ;高位和存于R0

第4章 MCS-51单片机汇编语言程序设计(2)

第4章 MCS-51单片机汇编语言程序设计(2)
START:MOV DPTR,#TAB : MOV A,R7 ADD A,R7 MOV R3,A MOVC A,@A+DPTR
XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1

MCS51_Exp

MCS51_Exp

第二章指令系统和汇编语言程序设计实验本章实验主要包括指令系统和汇编语言程序设计两部分。

采用软件模拟调试的方法,目的在于通过这些实验可以使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。

第一节指令系统实验实验一熟悉键盘操作及数传指令编程设计一、实验目的1.熟悉软件模拟调试的环境及键盘操作。

2.掌握汇编语言程序设计的方法,加深对指令的理解。

3.学会软件模拟调试和察看修改观察项的方法。

二、实验内容印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。

三、实验步骤1.进入调试软件环境,输入源程序;2.汇编源程序;3.用单步方式运行程序;4.检查并记录各寄存器和存储单元内容的变化。

四、程序清单1.内部RAM数据传送需要查看的数据有30H,31H,A,R0等。

ORG 0000HMOV R0,#30HMOV 30H,#45HMOV 31H,#46HMOV R2,30HMOV 02H,31HMOV A,#87HMOV 0E0H,30HMOV 30H,AMOV 31H,@R0SJMP $END2.外部数据传送需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。

ORG 0000HMOV A,#89HMOV DPTR,#2000HMOVX @DPTR,AINC DPTRCLR AMOVC A,@A+DPTRSJMP $ORG 2000HDB 44HDB 78HDB 67HEND3.堆栈操作需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。

1)可用于保护现场和恢复现场的程序ORG 0000HMOV SP,#5FHMOV 50H,#3BHMOV 51H,#2FHMOV A,#12HPUSH 50HPUSH 51HPUSH ACCPOP 0E0HPOP 51HPOP 50HSJMP $END2)可用于数据交换的程序ORG 0100HMOV SP,#6FHMOV 50H,#3BHMOV 51H,#2FHPUSH 50HPUSH 51HPOP 50HPOP 51HSJMP $END4.数据交换记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。

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用于控制功能部件完成某一

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的中断服务程序

第03章 MCS - 51单片机指令系统

第03章 MCS - 51单片机指令系统
这里源操作数不能进行寄存器间接寻址, 也就是MOV Rn , @Rn 这个指令是不能用 的。
第 二 节 数 据 传 送 指 令
第3章 MCS-51单片机指令系统
(2)将数据传送到工作寄存器Rn的指令(3条) 例:已知累加器A的内容为30H,寄存器R7的内容 为50H,内部RAM30H单元的内容为40H,内部 RAM50H单元的内容为10H,请指出下列每条指令 执行以后相应单元内容的变化.
第 一 节 指 令 格 式 与 寻 址 方 式
第3章 MCS-51单片机指令系统
(6) 相对寻址:
在MCS -51 指令系统中设有转移指令, 分 为直接转移和相对转移指令, 在相对转移 指令中采用相对寻址方式。这种寻址方式 是以PC的内容为基本地址, 加上指令中给 定的偏移量作为转移地址,也就是目的地 址(用来修改PC的值)。指令中给出的偏 移量是一个 8 位带符号的常数, 可正可负, 其范围为-128~+127。
第3章 MCS-51单片机指令系统
(1) 立即寻址:
立即寻址方式是将操作数直接存放在指令字 节中,作为指令的一部分存放在代码段里。 比如:MOV A, #3AH 跟在指令操作码后面的数就是参加运 算的数, 该操作数称为立即数。立即数有一字 节和二字节两种可能, 如指令: MOV DPTR, #0DFFFH 上述两条指令均为立即寻址方式, 第 一条指令的功能是将立即数 3AH送累加器A中, 第二条指令的功能是将立即数 0DFFFH送数据 指针DPTR中(DPH, 0FFH→DPL)。
第 二 节 数 据 传 送 指 令
第3章 MCS-51单片机指令系统
3.2数据传送指令
程序中使用最多的指令,主要用于内部RAM、 寄存器、外部RAM以及程序存储器之间的数据 传送、保存以及交换。 工作原理:将源操作数简单地传给目的 操作数,而源操作数的内容不变,PSW的内容 不改变。 分类:内部数据传送指令、外部传送指 令、查表指令、交换指令和堆栈指令。

第三章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)。

§3-4 逻辑运算类指令
共分两大类:单字节逻辑操作,双字节逻辑操作,共24条。 一、单字节逻辑操作指令 CLR A ;(A) 0 CPL A A中8位按位求反。
循环左移、右移指令: RL A RLC A RR A RRC A 注:左移一位相当于乘2;右移一位相当于除2。
二、双字节逻辑操作指令 “与操作”: ANL A,Rn ; (A) ANL A,direct ANL A,Ri ANL A,#data ANL direct,A ANL direct,#data
;以下类同。
INC Rn
INC direct
INC Ri
INC DPTR 例1、设(R0)= 7FH; (7EH)= 40H
执行:INC R0
INC R0
INC R0 后,
(R0)= 7FH; (7EH)= 00H; (7FH)= 41H
DA A
;二 ——十进制调整指令。
执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的 AC及C标志位的状况自动选择一个修正值(00H、06H、60H、 66H)与原运算结果相加,进行二——十进制调整。
ADDC A,Rn
;(A) (A)+(Rn)+(C)
; 以下类同。
ADDC A,direct
ADDC A,Ri
ADDC A,#data
上述四条指令多用于多字节数相加。
INC A
;(A)
INC Rn
INC direct
INC Ri
INC DPTR
(A)+1 ,以下类同。
INC A
;(A)
(A)+1
4、寄存器间接寻址
指令中寄存器的内容作为操作数存放的地址,在工作上间接寻 址寄存器前用“”表示前缀。
例如: “一本书放在甲抽屉中,上了锁;其开锁的钥匙放在乙 抽屉中,乙抽屉也上了锁。问如何才能取到哪本书?”
这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书。 而寄存器间接寻址也是同样。
例如:
MOV 30H,#20H MOV R0,#30H MOV A,R0
#data —— 8位常数 #data 16 —— 16位常数 addr 16 —— 16位目的地址 addr 11 —— 11位目的地址
rel —— 8位带符号的偏移地址 DPTR —— 16位外部数据指针寄存器
bit —— 可直接位寻址的位
A —— 累加器 B —— 寄存器B C —— 进、借位标志位,或位累加器 —— 间接寄存器或基址寄存器的前缀 / —— 指定位求反 (x)—— x中的内容 ((x))—— x中的地址中的内容 $ —— 当前指令存放的地址
;书放在甲抽屉中
;甲抽屉的钥匙放在乙抽屉中
;取书 ,A中
20H
此例中,20H就当成是那本书;30H就当成是甲抽屉;
R0就当成是乙抽屉,执行的结果就是将20H这个立即数装入A中。 期间也经历了两次寻址,即间接寻址。
5、变址寻址 操作数地址 = 变地址 + 基地址 基地址寄存器 DPTR 或 PC 变址寄存器 A 该寻址方式常用于访问程序存储器,查表。 如 MOVC A,A + DPTR
MOV #data, A
Х
等等指令是非法指令。
2、栈操作指令
PUSH direct
POP direct
不影响任何标志位。
PUSH direct 指令执行中,机器自动进行两步操作:
(1) (SP)
(SP)+ 1
(2)((SP)) (direct)
例1、设(SP) = 09H,(DPTR)= 0123H,分析:
例4、设(A)= 一个BCD码常数,试用查表法获得其相应的 ASCII码。
解法I: MOV DPTR,#TAB MOVC A,.A+DPTR
TAB:DB 30H
DB 31H DB 32H,33H,34H,35H
······ 解法II: MOVC A,A+PC
TAB:DB 30H,31H,32H,33H DB 34H,35H,36H,37H
DA A 结果为:124 注意:1)DA指令只能跟在加法指令后面使用; 2)调整前参与运算的两数是BCD码数; 3)DA指令不能与减法指令配对使用,但可以实现对A中 压缩BCD数进行减一操作。 例3、设(A)=30H(压缩BCD码数),执行: ADD A,#99H DA A 后,便实现了30 - 1 = 29的操作。
例3、试编写一程序段,实现将外RAM 0FAH单元中的 内容传送到外RAM 04FFH单元中。 解: MOV DPTR,#04FFH
MOV R0,#0FAH MOVX A,R0
MOVX DPTR, A
三、 查表指令 与ROM之间的数据传送。 MOVC A,A + DPTR
MOVC A, A + PC 执行后会使/PSEN有效。 MOVC 含义是传送常数。 以DPTR 为基地址的指令,可在ROM 的64KB范围内查表; 而以PC为基地址的指令只能在(PC)+ 1为中心上、下256B范 围内查表。
一、汇编语言程序设计的意义 什么是程序? 完成某项特定任务的指令的集合。 计算机按程序一条一条地依次执行指令,从而完成指定任务。 要让计算机完成各项任务,就应设计各种程序。
程序设计语言: 机器语言: 用二进制代码表示指令和数据。 汇编语言: 用助记符表示指令操作功能,用标号表示操作对象。 高级语言: 独立于机器,面向过程,接近自然语言和数学表达式.
选择修正值的规则: (A3 ~ 0)> 9时或(AC)= 1时,(A3 ~ 0) (A3 ~ 0)+6
(A7 ~ 4)> 9或(C) = 1时, (A7 ~ 4) (A7 ~ 4)+ 6
例2、设(A) = 56H 为56的压缩的BCD码数,(R3)= 67H, (CY)=1
执行 ADDC A,R3
三、寻址方式 寻找操作数寻址 所要找的操作数是一二进制数或十进制数,出现在指令中, 用“#”作前缀
MOV A,#20H 2、寄存器寻址 操作数存放在工作寄存器R0 ~ R7中,或寄存器B中。
MOV A,R2 3、直接寻址 指令中直接给出操作数的地址。
MOV A,30H MOV 30H,DPH
例6、试将A中的二进制数转换为3位BCD码,其中,百位数存 放于31H单元,十位数和个位数压缩后存于30H单元中。
解:
MOV B,#100 DIV AB MOV 31H,A MOV A,#10 XCH A,B DIV AB SWAP A ADD A,B MOV 30H,A
小结:算术运算类指令都有哪些类型?
6、相对寻址 把指令中给定的地址偏移量与本指令所在单元地址(PC内容)
相加得到真正有效的操作数所存放的地址。 例如 “李同学20岁,张同学比李同学大3岁,问张同学多少岁?” 这就是一个相对寻年龄的问题,而相对寻址与此类似。 如 JC 60H ;设(PC) = 2000H为基址,相对偏移量为60H;
MOV Ri,A
MOV Ri, direct
MOV Ri,#data
MOV DPTR,#data16 ;唯一的16位数据传送指令。
上述指令不影响任何标志位,但PSW的P位除外。
上述指令不影响任何标志位,但PSW的P位除外。
注意:MOV Rn,Rn
Х
MOV Ri, Ri
Х
MOV Rn, Ri
Х
哇!好 容易出 错啊!
执行 PUSH DPL
PUSH DPH
后,各单元中的内容。
POP direct 指令执行中,机器也自动进行两步操作: (1)(direct) ((SP)) (2)(SP) (SP)- 1 例2、设(SP)= 0BH,(0BH)= 01H,(0AH)= 23H
执行 POP DPH POP DPL 后,各单元中的内容。
例4、两个4位BCD码相加,一个存放在(31H)(30H); 另一个存放在(33H)(32H);和数拟回存在(31H) (30H)中,试编程实现之。
解:
MOV R0,#30H
MOV R1,#32H
MOV A,R0
ADD A,R1
DA A
MOV R0,A
INC R0
INC R1 MOV A,R0 ADDC A,R1 DA A MOV R0,A
······
小结: 数据传送类指令有几种类型? 是否影响标志位?
§3-3 算术运算类指令
包括:加、 减、乘、除;加一、减一。 一、加法指令 ADD A,Rn ;(A) (A)+ (Rn)以下类同。 ADD A,direct ADD A,Ri ADD A,#data 无符号数相加时:若C = 1,说明有溢出(其值 > 255)。 带符号数相加时:若OV = D7c⊕D6c = 1,说明有溢出。
二、减法指令 SUBB A,Rn ;(A) (A)-(Rn)-(C),以下类同。 SUBB A,direct SUBB A,Ri SUBB A,#data 注意:减法之前先清零C。
DEC A ;(A) (A)-1 ,以下类同。 DEC Rn DEC Ri DEC direct
例5、设(R0)=7FH,在内RAM中,(7EH)=00H, (7FH)=40H
; 则当C = 1时,转移的目的地址 = 2000H + 2 + 60H
巩固新课: 1、汇编语言有何种特点?指令格式? 2、MCS—51系列机共有多少条指令?分几类? 3、MCS—51系列汇编语言指令有几种寻址方式?
§3-2 数据传送类指令
一、内部RAM数据传送类
1、一般数据传送指令
片外 程序 存储器
结论:1)PUSH 与 POP 操作过程刚好相反; 2)进、出栈规则: 先进后出,后进先出。应注意指令书写先后顺序; 3)可用于“保护现场,恢复现场”。
相关文档
最新文档