第 2 章 汇编语言和汇编程序

33

description

第 2 章 汇编语言和汇编程序. 2.1 指令的寻址方式. 符号指令的构成. 操作助记符 [ 目的操作数 ] [ 源操作数 ] 操作助记符,也称指令助记符。它以符合形式给出该指令 进行什么操作。 如,数据传送 MOV, 加 ADD, 逻辑与 ANL 。 操作数可以是操作数本身,可以是寄存器,也可以是操作数的地址。 有 0 , 1 , 2 个操作数多种情况 一条带操作数的指令要指明用什么方式寻找操作数,寻找操作数的方式称为 寻址方式 。. 常用符号. Rn: 工作寄存器中的寄存器 R0 、 R1…R7 之一; - PowerPoint PPT Presentation

Transcript of 第 2 章 汇编语言和汇编程序

Page 1: 第 2 章 汇编语言和汇编程序
Page 2: 第 2 章 汇编语言和汇编程序

第 2 章 汇编语言和汇编程序

Page 3: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.1 指令的寻址方式

Page 4: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

符号指令的构成操作助记符 [ 目的操作数 ] [ 源操作数 ] 操作助记符,也称指令助记符。它以符合形式给

出该指令进行什么操作。如,数据传送 MOV,加ADD, 逻辑与 ANL 。

操作数可以是操作数本身,可以是寄存器,也可以是操作数的地址。

有 0 , 1 , 2 个操作数多种情况一条带操作数的指令要指明用什么方式寻找操作

数,寻找操作数的方式称为寻址方式。

Page 5: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

常用符号Rn: 工作寄存器中的寄存器 R0、 R1…R7 之一;Ri: 工作寄存器中的寄存器 R0或 R1 ;#data: 8 位立即数;#data16: 16 位立即数;direct: 片内 RAM或 SFR 的地址 (8位 ) ;@: 寄存器间接寻址;Bit: 片内 RAM或 SFR 的位地址;addr11: 11 位目的地址;addr16: 16 位目的地址;rel: 8 位地址偏移量,偏移范围为 -128~127 ;/ : 该位求反后参与操作,不影响该位;(X) : 地址单元中的内容→ : 箭头左边的内容送入箭头右边的单元内

Page 6: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.1.1 立即寻址指令中直接给出操作数的寻址方式,在操作码

之后,称为立即数,用 "#" 表示。主要作用:赋初值。

如: MOV A, #80H

MOV R7, #0F5H

MOV DPTR, #1245H

MOV PSW,#08H ;选择通用寄存器组1( 08H-0FH )

操作数存在程序存储器中

Page 7: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.1.2 直接寻址直接使用数所在单元的地址找到了操作数,所

以称这种方法为直接寻址。

操作数在 SFR 、内部 RAM 、位地址 ( 即操作数据在内部数据存储器或特殊功能寄存器中 ) 空间。

如: MOV A, 00H MOV C, 20H.0; 源操作数是位地址 00H. MOV C, 24H.0; 源操作数是位地址 20H. MOV A, 0F0H ;B 寄存器 P24

Page 8: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.1.3 寄存器寻址对选定的工作寄存器 R0~ R7 、累加器 A 、通

用寄存器 B 、地址寄存器 DPTR 中的数进行操作。 例: MOV A, R0 ;将 R0 工作寄存器中的数

据送到累加器 A 中去。

Page 9: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.1.4 寄存器间接寻址把地址放在另外一个寄存器中,根据这个寄存

器中的数值决定该到哪个单元中取数据。 R0,R1---8 位地址,片内低 128 字节或片外DPTR---16 位,片外 64KB

如: MOV A, @R0

MOVX A, @R0; 对片外 RAM 进行读操作 MOVX A, @DPTR

操作数在片内RAM中

操作数在片外 RAM中

操作数在片外 RAM中

Page 10: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.1.5 变址寻址以 DPTR或 PC 为基址寄存器,累加器 A 为变

址寄存器。把两者内容相加,结果作为操作数的地址。常用于查表操作。

MOVC A, @A+DPTR ; (A+DPTR)→A

MOVC A, @A+PC ; PC+1→PC,(A+PC)→A

这是两条查找表指令,用于从程序存储器中读取数据。

Page 11: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.2 常用指令

Page 12: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.1 数据传送与交换类指令助记符:MOV、MOVX、MOVC XCH、 XCHD、 SWAP PUSH、 POP 源操作数寻址方式 (5种 ) : 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。目的操作数寻址方式 (3种 ) : 直接寻址、寄存器寻址、寄存器间接寻址除了目的操作数为 ACC 的指令影响奇偶标志 P 外,一般不影响标志位。

Page 13: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.2.1 数据传送与交换类指令十六位数的传递指令 (1条 )

MOV DPTR, #data16

8051 是一种 8 位机,这是唯一的一条 16 位立即数传递指令。功能:将一个 16 位的立即数送入 DPTR 中去。其中高 8位送入 DPH ,低 8 位送入 DPL 。

Page 14: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.2.1 数据传送与交换类指令例: MOV DPTR, #1234H

执行完了之后 DPH 中的值为 12H, DPL 中的值为 34H 。如果我们分别向 DPH, DPL 送数,则结果也一样。如下面两条指令: MOV DPH, #12H

MOV DPL, #34H 。则就相当于执行了 MOV DPTR, #1234H 。

Page 15: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.2 算数运算类指令助记符:ADD、 ADDC、 INC SUBB、 DEC、 DA 源操作数寻址方式 (4种 ) : 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址。目的操作数寻址方式 (1种 ) : 寄存器 (A) 寻址影响 PSW 有关标志位。 ( 如进位、溢出等等 )

Page 16: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.2.2 算数运算类指令 BCD 数(十进制)加法调整指令 DA (加 6调整) 在进行 BCD 码加法运算时,跟在 ADD和 ADDC 指令之

后,用于对累加器 A 中刚进行的两个 BCD 码的加法的结果进行十进制调整。

例: A=0001 0101BCD (代表十进制数 15 ) ADD A, #8 ; A=1DH ,按二进制规律加

DA A ; A=23H ,按十进制规律加

Page 17: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.3 逻辑运算及移位类指令助记符:ANL、 ORL、 XRL、 CPL RR、 RL、 RRC、 RLC,CLR

主要用于对 2 个操作数按位进行逻辑操作或对 A 进行循环移位操作,将结果送到 A 或直接寻址单元。

☼主要操作与、或、异或、移位、取反、清零等。☼对标志位的影响除了目的操作数为 A 的指令影响奇偶标志 P,CY 外,一

般不影响标志位。

Page 18: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

CYCY

2.2.3 逻辑运算及移位类指令A.7A.7 A.6A.6 A.5A.5 A.4A.4 A.3A.3 A.2A.2 A.1A.1 A.0A.0

A.7A.7 A.6A.6 A.5A.5 A.4A.4 A.3A.3 A.2A.2 A.1A.1 A.0A.0

A.7A.7 A.6A.6 A.5A.5 A.4A.4 A.3A.3 A.2A.2 A.1A.1 A.0A.0

A.7A.7 A.6A.6 A.5A.5 A.4A.4 A.3A.3 A.2A.2 A.1A.1 A.0A.0CYCY

RR A

RL A

RRC A

RLC A

说明:后两条指令,影响 P 标志和 CY 。

Page 19: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.5 控制转移指令MCS -51 提供了较丰富的控制转移指令 , 因此在编程上

相当灵活方便。包括以下类型:

无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令

助记符:AJMP、 LJMP、 SJMP、 JMP、 ACALL、 LCALL、 JZ、 JNZ、 CJNE、 DJNZ

Page 20: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.5 控制转移指令比较不等转移指令

转移到相对于当前 PC 值的 8 位移量的地址去。即: 新的 PC值 = 当前 PC+ 偏移量 rel

CJNE A, #data, rel CJNE A, direct, relCJNE Rn, #data, relCJNE @Ri, #data, rel

此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。

同样,在编写汇编语言源程序时,可以直接写成: CJNE A, #data ,标号 ;即转移到标号处。

Page 21: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.5 控制转移指令比较不等转移指令

利用这些指令,可以判断两数是否相等。但有时还想得知两数比较之后哪个大,哪个小,本

条指令也具有这样的功能:如果两数不相等,则 CPU 还会用 CY( 进位位 )来反

映哪个数大,哪个数小。如果前面的数大,则 CY=0 ,否则 CY=1 。因此在程序转移后再次利用 CY 就可判断出哪个数

大,哪个数小了。

Page 22: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.5 控制转移指令

因此最终结果是:如果 R0=10H ,则 R1=00H ;如果 R0>10H ,则 R1=0AAH ;如果 R0<10H ,则 R1=0FFH 。

MOV A, R0

CJNE A, #10H, L1 MOV R1, #0

AJMP L3L1: JC L2

MOV R1, #0AAH AJMP L3

L2: MOV R1, #0FFHL3: SJMP L3

例:

Page 23: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.5 控制转移指令减 1 不等于零转移指令

转移到相对于当前 PC 值的 8 位移量的地址去。即:

新的 PC值 = 当前 PC+ 偏移量 rel

DJNZ Rn, relDJNZ direct, rel

同样,在编写汇编语言源程序时,可以直接写成: DJNZ Rn ,标号 ;即转移到标号处。

这两条指令把源操作数减 1, 结果回送到源操作数中去 , 如果结果不为 0 则转移。

Page 24: 第 2 章 汇编语言和汇编程序

第二章 MSC51单片机指令系统

2.2.5 控制转移指令将 23H 单元中的数连续相加,存至 A 中,每加一次, 23H单元中的数值减 1 ,直至减到0 ,共加( 23H )次。

MOV 23H,#0AH

CLR ALOOP: ADD A,23H DJNZ 23H,LOOP SJMP $

例:

本例中的 23H 中的数是 10 ,实际就是求:1+2+……+10=?

Page 25: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

32.3 伪指令

Page 26: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.3 伪指令 伪指令:对汇编起某种控制作用的特殊命令,但自身并不产生机器码,不属于指令系统,而仅仅为汇编服务的一些指令,因此称为伪指令。 不同汇编程序允许的伪指令并不完全相同,但是一些基本的伪指令在大部分汇编程序中都能使用。 51 中常用的伪指令分为 5 大类: 程序计数与结束伪指令: ORG, END ; 符号定义伪指令:EQU, DB, DW, DS, BIT, SET 等; 附加文件指令: INCLUDE ; 程序清单格式化伪指令: TITLE, PAGE ; 一般控制伪指令: LIST, NOLIST, NOCODE 。

Page 27: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.3 伪指令ORG

功能:程序计数伪指令,用于设置由表达式决定的初始地址, ORG 也称为起始伪指令。表达式缺省为 0 。 格式: ORG 16 位地址 例如:

ORG 2000H

74 40 START: MOV A,#40H74

40

………

………

2000H

Page 28: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.3 伪指令END

功能:汇编语言源程序结束的标志,在 END 以后的所有指令,汇编程序不再处理。一个源程序只有一个 END 指令,放在所有指令的最后,若没有 END 指令,编译将报错。 格式: END

例如:END

ORG 2000H

74 40 START: MOV A,#40H

编译器不处理

Page 29: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.3 伪指令EQU

功能:将一个数值或寄存器名赋给一个指定的符号名。 格式:符号名 EQU 表达式 / 寄存器名 例如: DELY EQU 3344H

ROT EQU 40H

MOV DPTR, #DELY

MOV DPTR, #3344H

MOV ROT, A

MOV 40H, A

Page 30: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.3 伪指令BIT

功能:将一个位地址赋给指定的符号。 格式:符号名 BIT 位地址 例如:

CTRL BIT P0.0

RST BIT 90H (P1.0,详细见教材 P24)

SETB CTRL

SETB RST

Page 31: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.4 指令的时序

Page 32: 第 2 章 汇编语言和汇编程序

第二章 汇编语言和汇编程序

2.4.1 指令、机器、状态和振荡周期如:当单片机外接 12MHz晶振时的各种时序单位大小

如下:振荡周期 =

状态周期 =

机器周期 =

指令周期 =(1~4) 机器周期 =1~4us

usMHzfOSC

0833.012

11

usMHzfOSC

1667.012

22

usMHzfOSC

112

1212

Page 33: 第 2 章 汇编语言和汇编程序