第三章80c51单片机的指令系统

第三章80c51单片机的指令系统
第三章80c51单片机的指令系统

第三章80C51单片机的指令系统

3·1 80C51的指令系统具有哪些特点?

答: 80C51的指令系统由111条指令组成。如果按字节数分类,有49条单字节指令、46条双字节指令和16条三字节指令,以单字节指令为主;如果按指令执行时间分类,有664条单周期指令、45条双周期指令和2条(乘、除)四周期指令,以单周期指令为主。

由此看来,80C51的指令系统具有存储效率高、执行速度快的特点。除此而外,指令系统还有如下特点:

①可以进行直接地址到直接地址的数据传送,能把一个并行I/I口中的内容传送到内部RAM单元中而不必经过累加器A或工作寄存器Rn。这样可以大大提高传送速度和缓解累加器A的瓶颈效应。

②用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器A中。这为编程翻译算法提供了方便。

③在算术运算指令中设有乘法(MUL)和除法(DIV)指令。

④指令系统中,一些对I/O口进行操作的指令具有"读一修改一写"的功能。"读一修改一写"指令是指:在执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2读人内部,进行修改、改变,然后重新写到锁存器中去。这一特点是由I/O口的准双向特性所决定的。这种类型的指令包含所有的口的逻辑操作(ANL、ORL、XRL)和位操作(JBC、CPL、MOV、SETB、CLR等)指令。

⑤80C51单片机内部有一个布尔(位)处理器,对位地址空间具有丰富的位操作指令。布尔(位)操作类指令共有17条,其中包括布尔传送指令、布尔状态控制指令、布尔(位)逻辑操作指令及布尔(位)条件转移指令。

3·2 简述80C51的寻址方式和所涉及的寻址空间。

答: ①寻址方式有下列七种。

●立即寻址:指在指令中直接给出操作数。

●直接寻址:指在指令中直接给出操作数单元的地址。

●寄存器寻址:指令中将指定寄存器的内容作为操作数。

●寄存器间接寻址:指令中要到寄存器的内容所指的地址去取操作数。

●相对寻址:指令中给出的操作数为程序转移的偏移量。

●变址寻址:以DPTR及PC作基址寄存器,累加器A作变址寄存器,以两者内容相加

形成的16位程序存储器地址作为操作数地址。

●位寻址:对数据位进行操作。

②各寻址方式所涉及的寻址空间如题表3-1所列。

题表3-1 寻址方式及寻址空间

3·3 访问特殊功能寄存器和外部数据存储器,应采用哪种寻址方式?

答访问特殊功能寄存器,应采用直接寻址、位寻址;访问外部数据存储器,应采用寄存器间接寻址。

在0~255B范围内,可用寄存器R0、Rl间接寻址:

MOVX A,@R0 或MOVX A,@R1

MOVX @R0,A 或MOVX @R1,A

在0~64KB范围内,用16位寄存器DPTR间接寻址

MOVX A,@DPTR

MOVX @DPTR,A

3·4 为什么说80C51的传送指令极为丰富?为什么在某些传送中要旁路累加器A?

答:(1)80C51的传送指令极为丰富

80C51具有丰富的数据传送指令,能实现多种数据的传送操作。数据传送指令共有29 条,占总指令数的25%还多。

数据传送指令按功能可分为:一般传送指令15条,目的地址传送指令1条,累加器传送指令11条和栈操作指令2条。

(2)传送中可以旁路累加器A

可以进行直接地址到直接地址的数据传送,能把一个并行I/O口中的内容传送到内部RAM单元中而不必经过累加器A,这称为旁路累加器A。这样,不仅可以大大提高数据传送的速度,而且能缓解累加器A的瓶颈效应。

3·5 对80C51片内RAM的128~255字节区的地址空间寻址时应注意些什么?对特殊功能寄存器应采用何种寻址方式进行访问?

答:①在片内RAM的128~255字节区的地址空间寻址时应注意:

●只有80C52中有这部分地址空间;

●在这部分地址空间,只有间接寻址方式有效,即

MOV @Ri,A ;i=0,1

MOV A,@Rj ;i=0,1

②对特殊功能寄存器可有两种寻址方式:

●直接寻址;

●对其地址的末尾为"0"和"8"的寄存器可进行位寻址。

3。6 在80C51的片内RAM中,己知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。

分析下面各条指令,说明源操作数的寻址方式,按顺存执行各条指令后的结果。答:

指令源操作数的寻址方式执行指令后的结果

MOV A,40H 直接寻址(A)=48H

MOV R0,A 寄存器寻址(R0)=48H

MOV P1,#0F0H 立即寻址(Pl)=0F0H

MOV @R0,30H 寄存器间接寻址因(R0)=48H.(30H)=Ft8H

所以(48H)=38H

MOV DPTR,#3848H 立即寻址(DPTR)=3848H

MOV 40H,38H 直接寻址(40H)=40H

MOV R0,30H 直接寻址(R0)=38H

MOV D0H,R0 直接寻址(D0H)=38H

MOV 18H,#30H 立即寻址(18H)=30H

MOV A,@R0 寄存器间接寻址因(R0)=30H.(30H)=38H

所以(A)=38H

MOV P2,P1 寄存器寻址(P2)=0F0H

3·7 设计一段程序,其功能是:将寄存器7的内容移到R6中。

答:按题意程序设计如下:

MOV A, R7

MOV R6, A

3·8 现需将外部数据存储器200DH单元中的内容传送到280DH单元中,请设计程序。答:按题意程序设计如下:

MOV DPTR,#200DH

MOVX A,@DPTR

MOV DPTR,#280DH

MOVX @DPTR,A

3·9 已知当前PC(程存计数器)值10l0H,请用两种方法将程序存储器l0FFH中的常数送入累加器A。

答:按题意有如下两种程序设计方法。

方法一:

MOV A, #0EFH

MOVC A, @A+PC

方法二:

MOV DPTR, #l0FFH

MOV A, #0

MOVC A, @A+DPTR

3.10 在进行单字节减法运算时,应注意什么?

答:在80C51指令系统中没有不带借位的减法,如果需要的话,应在"SUBB"指令前,用“CLR,C”指令将CY清零。

3.11 已知累加器A中存放两位BCD吗教,请编写程序其现十进制数减1。

:按题意编写的程序如下:

MOV B,A ;保存A

ANL A,#0FH ;屏蔽A的高4位

CLR CY

SUBB A,#1

CJNE A,#0FH,LP

MOV A,B

ANL A,#0F0H

CLR CY

SUBB A,#l0H

ADD A,#9H

RET

LP:

ANL B,#0F0H

ORL A,B

RET

3·12 试编写程序,将片外数据存储器中20H单元中的内容和21H单元的内容相乘,并将结果存放在22H和23H单元中,高位存放在高地址中。

答:按题意编写的程序如下

MOV R0,#20H ;R0指向20H

MOVX A,@R0 ;取来被乘数,

MOV B,A ;存入B寄存器

MOV R0,#2lH ;R0指向2lH

(或用INC R0)

MOVX A,@R0 ;取来乘数,人累加器A

MUL AB ;得结果

MOV R0,#22H ;R0指向22H

(或用INC R0)

MOVX @R0,A ;结果低位在22单元中

MOV R0,#23H ;R0指向23H

(或用INC R0)

MOV A,B ;结果高位在23单元中

MOVX @R0,A

3.13 已知延时程序为:

DELAY: MOV R2,#0FAH

LI: MOV R3, #0FAH

L2: DJNZ R3,L2

DJNZ R2,L1

RET

若系统的晶振频率为6MHz,求该延时子程存的延时。

答:因为晶振频率为6MHz,所以机器周期为2us,DJNZ:4us;MOV:4us;RET:4us。

指令周期数执行时间DELAY: MOV R2, # 0FAH 2 4us

LI: MOV R3,#0FAH 2 4us

L2: DJNZ R3,L2 2 4us

DJNZ R2.L1 2 4us

RET 2 4us

其中,0FAH=250。

所以,总时间=4us十(250×4us十4us) ×250十4us= 251.008ms。

3·14 请将片外数据存储器地址为40H ~ 60H区域的数据块,全部搬移到片内RAM 内RAM的地址区域,并将原数据区全都填为FFH 。

答:按题意编程如下:

MOV R0,#40H ;指向数据区首地址

MOVE_PRO: MOVX A,@R0 ;取外部RAM中数据(用MOVX)

MOV @R0,A; 将数据存大片内RAM中(用MOV)

INC R0 ;指针加1

CJNE R0,#61H,MOVE_PRO ;到数据区末地址了吗?没有,循环

MOV R0,#40H ;到了,继续,重新指向数据区首地址

MOV A,#0FFH ;用#0FFH填充原来数据区

MOVE一PRO:MOVX @R0,A

INC R0

CJNE R0,#61H,MOVE__PRO1

RET

3·15 试编写子程序,使间址寄存器R0所指的连续两个片外数据存储器RAM单元中的低4位二进制数,合并为一个字节,装入累加器A中。己知R0指向低地址,并要求该单元低4 位放在A中的高4位。

答:按题意编程如下:

MOVX A,@R0 ;取来数据

ANL A,#0FH ;屏蔽高4位,保留低4位

SW AP A ;高4位与低4位对调

MOV B,A ;保存在B寄存器中

INC R0 ;指向下一个地址

MOVX A,@R0 ;取来数据

ANL A,#0FH ;屏蔽高4位,保留低4位

ADD A,B ;合为一个数

3.16 双字节与单字节无符号相乘,设被乘数存于41H、40H单元中,乘数存于R4中,乘

积存于52H、51H 、50H单元中(前者为高位字节,后者为低位字节,顺序排列)。

请编写此乘法程序段。

答:按题意编写的乘法程序段如下:

(41H)(40H)

(R4)

×

(40H)(50H)

(51H)

+(52H)

(52H)(40H)+(51H)(51H)(50H)

MOV B,40H ;被乘数低位进B寄存器

MOV A,R4 ;乘数进A

MUL AB ;乘

MOV 50H,A ;存积的低8位

MOV 40H,B ;暂存积的高8位人(40H)

MOV B,41H ;被乘数高位进B寄存器

MOV A,R4 ;乘数进A

MUL AB ;乘

MOV 5lH,A ;暂存积的低8位人(51H)

MOV 52H,B ;存积的高8位

MOV A,40H ;(40H)+(51H)→(51H)

CLR C

ADD A,5lH

MOV 5lH,A

MOV A,52H ;(52H)+(CY)→(52H)

ADDC A,#0

MOV 52H,A

3·17 试计算片内RAM区40H~47H八个单元中数的算术平均值,结果存放在4AH中。答:按题意编程如下

MOV R0,#40H ;指向数据区首地址

MOV 4AH,#0 ;清和数4AH,4BH单元

MOV 4BH,#0

LOOP:CLR C ;清进位位

MOV A,@R0 ;取数据

ADD A,4AH ;求和

MOV 4AH,A ;存回和数单元

MOV A,4BH

ADDC A,#0

MOV 4BH, A

INC R0

CJNZ R0,#48 H, LOOP

MOV R2,#3 ;右移三次,相当于除8

ACALL RR_LOOP

RET

;双字节(4BH,4AH)右移子程序

;右移的次数在R2中

;

RR_LOOP: CLR C ;清进位位

MOV A,4BH

RRC A

MOV 4BH,A

MOV A,4AH

RRC A

MOV 4AH,A

DJNZ R2,RR_LOOP

RET

3·18 设有两个长度均为15的数组,分别存放在0200H和0500H为首地址的片外数据存储器区域中,试编写求其对应项之和的程序,结果存放在以0300H为首地址的片外数据存储器区城中。

答:按题意编程如下

MOV R0,#02H ;设置片外RAM的首地址的高位

;字节

MOV Rl,#05H

MOV R2,#03H

MOV R3,#00H ;设置片外RAM的首地址的低位

;字节

MOV A,#0

MOV B,#0

COM_SUM: ;求和程序

MOV DPL, R3 ;取出地址为02XXH和05XXH中的

;内容,相加

MOV DPH,R0

MOVX A,@DPTR

MOV B,A

MOV DPH,Rl

MOVX A,@DPTR

ADD A,B

MOV DPH, R2 ;相加结果存于03XXH中

MOVX @DPTR, A

INC R3 ;片外RAM的低位地址加1

CJNE R3,#U5, COM_SUM ;判断是否完成,否则继续

RET

3·19 在起始地址为2100H,长度为64的数表中找出ASCII码"F",将其送到1000H单元中去。

答:按题意编程如下:

MOV DPTR,#2100H ;设置起始地址

MOV R0,#0 ;设置当前所在地址

SCH_PROO:

MOV DPL,R0 ;设置当前地址

MOVX A,@DPTR ;取出当前地址的内容

INC R0 ;地址指针加1

CJNE A,#46H,SCH_PROl ;判断当前地址内容是否为"F"

MOV DPTR,#1000H ;是,则存储到1000H单元中

;并结束

MOVX @DPTR, A

RET

SCH_PRO1:

CJNE R0, #64, SCH_PRO0 ;判断当前是否己取完所有的

;数,否则继续,是,则结束

RET

3·20 3000H为首地址的存储区域中,存放着14个由ASCII码表示的0~9之间的数。试编写程序,将它们转换成BCD吗,并以压缩BCD码的形式,存放在2000H~2006H

单元中。

答:按题意编程如下:

MOV DPTR,#3000H ;指向数据区首地址

MOV R2,#0 ;存数区地址的低字节

BCD_LOOP: MOVX A,@DPTR ;取数

ANL A,#0FH ;屏蔽高4位,保留低4位

SW AP A ;高4位与低4位对调

MOV B,A ;暂存

INC DPTR ;指向下一个数据

MOVX A,@DPTR ;取数

ANL A,#0FH ;屏蔽高4位,保留低4位

ADD A,B ;组合成压缩BCD码

PUSH DPL ;保存当前地址和BCD码

PUSH DPH

PUSH ACC

MOV A,R2

MOV DPTR,#2000H ;存数区首地址

ADD A,DPL

MOV DPL,A

POP ACC

MOVX @DPTR,A

POP DPH

POP DPL

INC R2

INC DPTR

CJNZ DPL, #14, BCD_LOOP

RET

注意:0~9的ASCII码是30H~39H.

3·21 试编写一段程序,把0500H一0506H单元的压缩BCD码转换成ASCII码,存放在0500H为首地址的存储单元中。

答:按题意编程如下

MOV DPTR, #0500H ;指向数据区首地址

MOV R2, # 0 ;存放数据区地址的低字节

ASCIL.LOOP: MOVX A, @ DPTR ;取数

MOV B,A ;暂存

ANL A.#0FH ;屏蔽高4位,保留低4位

ADD A,#30H ;组成ASCII码

PUSH ACC

MOV A,R2

MOV DPTR, #0500H ;存数据区首地址

ADD A,DPL

MOV DPL,A

POP ACC

MOVX @ DPTR, A

MOV A,B

SWAP A ;高4位与低4位对调

ANL A.#0FH ;屏蔽高4位,保留低4位

ADD A,#30H ;组成ASCII码

INC DPTR ;指向下一个数据

MOVX @DPTR, A ;取数

INC DPTR

INC R2

INC R2

CJNZ R2,#14, ASCII_LOOP

RET

3·22 请设计一段能准确地读出运行的定时器中计教值的程序。

答:按题意编程如下

ORG 000BH

AJMP IT0P

.

.

.

ORG 100 H

START:MOV SP,#60H ;设栈指针

ACALL PTOM3 ;调定时器初始化程序

.

.

MOV A,TL0 先读TL0

MOV 30H,A ;存人30H单元

MOV A,TH0 ;再读TH0

MOV 31H,A ;存人31H单元

.

.

PTOM3:MOV TMOD,#01H ;定时器初始化,设T0为方式1

MOV TL0,#0

MOV TH0,#0

SETB R0 ;定时开始

SETB ET0 ;开中断

SETB EA

RET

.

.

ITOP:MOV TL0,#6H ;TL0定时器中断程序

RETI

3·23 请用位操作指令,求下列逻辑方程(注意:原书的题目有错漏,这里己改正)。答:用位操作指令,求解逻辑方程如下

(1) P1. 7 = ACC. 0 * ( B. 0 + P2. 0 ) + P3. 0

MOV C,B·0

ORL C,P2.0

ANL C,ACC.0

ORL C,/P3.0

MOV Pl.7,C

(2) PSW. 5 == P1. 0 * ACC. 2+ B. 6 * P1. 4

MOV C,Pl.0

ANL C,/ACC.2

ORL C,B. 6

ANL C,/P1.4

MOV PSW.5,C

(3) PSW·5= P1.7* B·4十C 十ACC·7* Pl.0

MOV B.0,C ;保护CY

MOV C,/P1.7

ANL C,B.4

MOV B.l,C

MOV C,Pl.0

ANL C,/ACC.7

ORL C,B.0

ORL C,B·l

MOV PSW.5,C

3.24 请指出下列程存中data、74H、78H 的本质和数量。

答:MOV A, #data ;data为立即数

MOV A, data ;data为片内RAM中的存储单元

MOV datal, data2 ;datal,dala2均为片内RAM中的存储单元

MOV 74H,#78H ;#78H为立即数,74H为片内RAM中的存储单元

3.25 设R0的内容为32H,A的内容为48H,而片内RAM 的32H单元的内容为80H,40H

单元的内容为08H。请指出在执行下列程存段后,上述各单元的内容变化。

答:指令执行结果

MOV A ,@ R0 A 的内容变为80H

MOV @ R0,40H 片内RAM 的32H 单元的内容为08H

MOV 40H ,A 片内RAM 的40H 单元的内容为80H

MOV R0,# 35 R0 的内容变为23H

结果: R0 的内容为23H ,A 的内容为80H ,片内RAM 的32H 单元的内容为08H ,40H单元的内容为80H 。

3·26 80C51有哪些逻辑运算功能?各有什么用处?设A中的内容为101010l0B,R4由表为01010101B。请写出它们进行"与"、"或"、"异或"操作的结果。

答(1)逻辑运算功能

①单操作数逻辑运算指令,其操作对象都是累加器A,包括:清0、取反、循环左移、带进位循环左移、循环右移、带进位循环右移和半字节互换指令。

②双操作数逻辑运算指令,包括:逻辑"与"(ANL)、逻辑"或"(ORL)及逻辑"异或"(XOR)三类操作。

③布尔(位)逻辑操作指令,包括:位逻辑"与"(ANL)及位逻辑"或"(ORL)两类操作。

( 2 ) 逻辑运算的用处

①若是对口的操作,即为"读一改一写"。

②逻辑"与"运算指令用做清除。

③逻辑"或"运算指令用做置位。

④用"RLC A"指令将累加器A的内容作乘2运算。

⑤用"RRC A"指令将累加器A的内容作除2运算。

( 3 ) 操作的结果

A"与"R4操作的结果: 00000000B

A"或"R4操作的结果: 111111llB

A"异或"R4操作的结果: 111111llB

3·27 80C51的转移类指令有何独特优点?有哪几种无条件转移指令?如何选用?

答: 1. 条件转移指令

在条件转移指令中两类指令有独特的优点。

(1)比较转移(CJNE)指令

CJNE A,direct,rel A内容与直接寻址单元内容比较,并转移。

CJNE A,#data,rel A内容与立即数比较,并转移。

CJNE Rn,#data,rel 寄存器内容与立即数比较,并转移。

CJNE @Ri,#data,rel 间址单元内容与立即数比较,并转移。

这4条指令能对所有单元内容进行比较,当不相等时程序作相对转移,并指出其大小,以备作第二次判断。

其功能可从程序转移和数值比较两个方面说明。

①程序转移:

若目的操作数=源操作数,则

程序顺利执行PC←(PC)+3

进位位清0 CY←0

若目的操作数﹥源操作数,则

程序转移PC←(PC)+3十rel

进位位清0 CY←0

若目的操作数﹤源操作数,则

程序转移PC←(PC)+3十rel

进位位清0 CY←l

②数值比较:

在80C51的指令系统中没有比较指令,两个数值的比较可利用这4条指令来实现,即可按指令执行后,根据CY的状态来判断数值的大小。

若(CY)=0,则目的操作数﹥源操作数;

若(CY)=1,则目的操作数﹤源操作数。

(2)循环转移(DJNZ)指令

80C51设有功能极强的循环转移指令:

DJNZ Rn,rel 以工作寄存器作控制计数器。

DJNZ direct,rel 以直接寻址单元作控制计数器。

这2条基本指令可派生出很多条不同控制计数器的循环转移指令,大大扩充了应用范围和多重循环层次。

2. 无条件转移指令

无条件转移指令的功能是程序无条件地转移到各自指定的目标地址去执行,不同的指令形成的目标地址不同。共有4条:

(1)相对转移(SJMP)指令

SJMP rel

指令的目标地址是由PC(程序计数器)和指令的第二字节带符号的相对地址相加而成的。指令可转向指令前128B或指令后127B。

(2)短转移(AJMP)指令

AJMP addr11

指令提供11位地址,目标地址由指令第一字节的高三位a10。~a8和指令第二字节的a7~ a0所组成。因此,程序的目标地址必须包含AJMP指令后第一条指令的第一个字节在内的2KB范围内。

(3)长转移(LJMP)指令

LJMP addrl6

指令提供16位地址,目标地址由指令第二字节和第三字节组成。因此,程序转向的目标地址可以包含程序存储器的整个64KB空间。

(4)间接转移(JMP)指令

JMP @A+DPTR

指令的目标地址是将累加器A中的8位无符号数与数据指针DPTR的内容相加而得。相加运算不影响累加器A和数据指针DPTR的原内容。若相加的结果大于64KB,则从程序存储器的零地址往下延续。

3·28 为什么SlIMP指令的rel= 0FEH时,将实现单指令的无限循环?

答:

HERE:SJMP HERE

上述指令的机器码为80FF,即rel=0FEH,此时程序将在原地进行无限循环。在等待中断或程序结束时常用此种办法。

8051单片机常用指令

3.2.1数据传送与交换类指令 共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指 9.堆栈操作 3.2 分类指令 在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。Rn:当前指定的工作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。 Ri:当前指定的工作寄存器组中的RO,R1(其中i=0,1)。 (Ri):Ri间址寻址指定的地址单元。 ((Ri)):Ri间址寻址指定地址单元中的内容。 dir:8位直接字节地址(在片内RAM和SFR存储空间中)。 #data8:8位立即数。 #datal6:16位立即数。 addrl6:16位地址值。 addrll:11位地址值。 bit:位地址(在位地址空间中)。 rel:相对偏移量(一字节补码数)。 下面介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。 3.2.1数据传送与交换类指令

共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指 令;数据交换指令以及准栈操作指令。

9.堆栈操作 PUSH dir ;SP十1-6P,(dir)一(SP) POP dir ;((SP))一dir,SP-1--P , 例1 SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP= 08H。 例2 SP=13H,(13H)= 1FH,指令POP 25H执行后,1FH压入25H地址单元,SP此时为12H。 综合例把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。方法一(直接地址传送法): MOV A ,50H

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

#第3章-MCS-51系列单片机的指令系统和汇编语言程序

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 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,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码和执行下列指令后的结果(指各有关寄存器、RAM单元和端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

MCS-51单片机指令系统

一、填空题 1、寻址是指( )。80C51单片机指令系统有7种寻址方式,分别是:( )。 2、访问内部RAM可以采用的两种寻址方式为:( )和( )。 3、MCS-51单片机指令的基本格式为:( )。 4、Rn代表( ),其中n的取值范围是( );Ri代表( ),其中i的取值范围是( )。@Ri的含义是( )。 5、在单片机指令中,30H和#30H的区别是( );R0和@ R0的区别是( );A←R1 和A←(R1) 的区别是( );DPTR和@DPTR的区别是( )。 6、汇编是指由( )“翻译”为( )的过程。 7、常用的伪指令有8条,试写出其中的5条( )、( )、( )、( )、( )。 8、LJMP指令的转移范围是(); AJMP指令的转移范围是(); SJMP指令的转移范围是()。 二、简答题 1、指出下列指令中的操作数的寻址方式。 (1)MOV R0,#30H (2)MOV A,30H (3)MOV A,@R0 (4)MOV @R0,A (5)MOVC A,@A+DPTR (6)CJNE A,#00H,30H (7)MOV C,30H (8)MUL AB (9)MOV DPTR,#1234H (10)POP ACC 2、80C51指令中,常用字符代表立即数或存储单元,试判断下列字符ABC的含义。(1)MOV A,#ABC (2)MOV A,ABC (3)MOV C,ABC (4)MOV DPTR,#ABC 3、若R0=11H,(11H)=22H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV A,R0 (2)MOV A,@R0 (3)MOV A,33H (4)MOV A,#33H 4、若A=11H,(11H)=22H,B=44H,写出执行下列指令后的结果。 (1)MOV R1,A (2)MOV R3,11H (3)MOV R3,#11H (4)MOV R3,B 5、若A=11H,R0=33H,(22H)=66H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV 40H,A (2)MOV 40H,R0 (3)MOV 40H,@R0 (4)MOV 40H,22H (5)MOV 40H,#22H 6、若A=11H,R0=33H,(22H)=66H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV @R0,A (2)MOV @R0,22H (3)MOV @R0,#22H 7、若 A=11H,R0=33H,B=44H,(11H)=22H,(22H)=66H,(33H)=44H,分别写出执行下列指令后的结果。 (1)MOV A,R0 (2)MOV B,#55H (3)MOV 40H,@R0 (4)MOV 11H,22H (5)MOV @R0,22H 8、试将30H、R7、B、A、PSW、DPTR中的数据依次压入堆栈。并指出每次堆栈操作后,SP=?、(SP)=?设原SP=60H,当前工作寄存器区为0区,(30H)=11H,R7=22H,B=33H,A=44H,PSW=55H,DPTR=6677H。 9、若A=78H,R0=34H,(34H)=DCH,(56H)=ABH,求分别执行下列指令后A和Cy中的数据。 (1)ADD A,R0 (2)ADDC A,@R0 (3)ADD A,56H (4)ADD A,#56H

51单片机指令

3.2 分类指令 在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。 Rn:当前指定的工作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。 Ri:当前指定的工作寄存器组中的RO,R1(其中i=0,1)。 (Ri):Ri间址寻址指定的地址单元。 ((Ri)):Ri间址寻址指定地址单元中的内容。 dir:8位直接字节地址(在片内RAM和SFR存储空间中)。 #data8:8位立即数。 #datal6:16位立即数。 addrl6:16位地址值。 addrll:11位地址值。 bit:位地址(在位地址空间中)。 rel:相对偏移量(一字节补码数)。 下面介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。 3.2.1数据传送与交换类指令 共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指

令;数据交换指令以及准栈操作指令。 9.堆栈操作 PUSH dir ;SP十1-6P,(dir)一(SP)

POP dir ;((SP))一dir,SP-1--P , 例1 SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP= 08H。 例2 SP=13H,(13H)= 1FH,指令POP 25H执行后,1FH压入25H地址单元,SP此时为12H。 综合例 把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。方法一(直接地址传送法): MOV A ,50H 数据传送与交换类指令是各类指令中数量最多、使用最频繁的一类指令,编程时应能十分熟练地灵活运用

51单片机的指令系统及试验

51单片机的指令系统及试验 在讲指令系统前我们先来复习一下数制的概念。1. 十进制(Decimal)基数是10,它有10个数字符号,即0,l,2,3,4,5,6,7,8,9。其中最大数码是基数减1,即9,最小数码是0。2.二进制(Binary)基数是2,它 只有两个数字符号,即0和1。这就是说,如果在给定的数中,除0和1外还有其它数,例如 1012,它就决不会是一个二进制数。3、十六进制(Hexadecilnal)基数是16,它有16个数字符号,除了十进制中的10个数可用外,还使用了6个英文字母。它的16个数字依次是0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A至F 分别代表十进制数的10至15,最大的数字也是基数减1。 4、二进制数与十六进制数的相互转换。(1)、二进制转换为十六进制:整数部分,从低位开始,小数部分,从高位开始,每四位一组(不够四位的补0),转换为对应的 十六进制数。例:(1 0001 0011.1100 0111)2=(113.C7)H (2)、十六进制转换为二进制:将十六进制数的每一位分别转换为对应的四位二进制数。例:(3E9D)H=(11 1110 1001 1101)B例:( 2ABE)H= 0010 1010 1011 1110B 以后我们在单片机编程方面采用十六进制,这个请大家 注意了!MCS-51系列单片机的指令系统共有111条指令,

其中49条是单字节指令,45条是双字节指令,17条是三字节指令。MCS-51的指令系统共有33个功能,用汇编编程时只需要42个助记符就能指明这33个功能操作。1、指令格式:MCS-51汇编语言指令格式与其他微机的指令格 式一样,均由以下几部分组成:[标号:]操作码 [操作数][,操作数][;注释]标号:又称为指令地址符号,地址的符号化,一般由1到6个字符组成,以字母开头的字母数字串,与操作码之间用冒号分开。操作码:是由助 记符表示的字符串,它规定了指令的操作功能。操作数:是指参加操作的数据和数据的地址。注释:是为该条指 令作说明,以便于阅读。注意:[ ]中表示为可选项。操作数可以为1、2、3个,也可以没有。不同功能的指令,操作数作用不同,如:传送指令多数有两个操作数,写 在左面的是目的操作数(表示操作结果存放的单元地址),写在右面的称为源操作数(指出操作数的来源)。操作码和操作数之间必须用空格分隔,操作数与操作数之间必 须用逗号“,”分隔。带方括号项可有可无,称为可选项。操作码是指令的核心不可缺少。2、指令分类 MCS-51的111条指令分为下面5类:(1)数据传送类 指令29条,分为片内RAM,片外RAM、程序存储器的传送指令,交换及堆栈操作指令。(2)算术运算类24条,分为加,带进位加,减,乘,除,加1,减1指令。(3)

MCS-51系列--单片机指令系统

机器语言指令格式: 单字节指令:操作码 双字节指令:操作码操作数 三字节指令:操作码第一操作数,第二操作数........................................................... 汇编语言指令格式: 标号:操作码目的操作数,源操作数;注释........................................................... 寻址方式: ①立即寻址方式---#data ②直接寻址方式---direc ③寄存器寻址方式---Rn ④寄存器间接寻址方式---@ ⑤变址寻址方式---@A+DPTR ⑥相对寻址方式---SJMP ⑦位寻址方式(MOV ACC.3,Cy) ........................................................... MCS-51系列单片机指令系统: 1数据传送指令: (1)内部RAM中一般数据传送指令 (2)16位数据传送指令 (3)累加器与外部数据存储器的数据传送指令

(4)访问程序存储器指令(5)堆栈操作指令 (6)数据交换指令 2算术运算指令: (1)加法指令 (2)减法指令 (3)乘法指令 (4)除法指令 (5)加1/减1指令 (6)BCD码调整指令 3逻辑运算指令: (1)逻辑“与”运算指令(2)逻辑“或”运算指令(3)逻辑“异或”运算指令(4)清零和取反指令 (5)循环移位指令 4转移和调用返回指令:(1)子程序调用和返回指令 ①绝对调用指令 ②长调用指令 ③子程序返回指令 ④中断返回指令

(2)转移指令: ①无条件转移指令 ②条件转移指令 (3)空操作指令 5位操作指令: (1)位传送指令 (2)位置位指令 (3)位清零指令 (4)位取反指令 (5)位逻辑运算指令........................................................... 指令系统中的常用符号: (1)A, #data, direct, Rn, @Rn, DPTR, PC (2)#data16, addr11, addr16, rel, B, Cy, bit, /bit ...........................................................

MCS-51系列单片机指令表

MCS-51系列单片机指令A表 MCS-51系列单片机指令以A开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码: 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0), 取代PC的低11位,PC的高5位不变。 操作内容: PC←(PC)+2 SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addr l0~0 字节数: 2 机器周期:2

使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令 指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn), n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令 指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加 操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri ’ 指令名称:间接寻址加法指令 指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加 操作内容:A←(A)+((Ri)), i=0,1 字节数: 1 机器周期:1

5、ADD A,#data 指令名称:立即数加法指令 指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令 指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C), n=0~7 字节数: 1 机器周期:1 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令 指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1

快速学习51单片机汇编指令集(入门必备)

51单片机汇编指令集(入门必备) 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;

)1MCS51单片机的指令格式中操作码与操作数之间必须用.

第2章汇编语言----智能电子产品的指令系统 判断题 ()1.MCS—51单片机的指令格式中操作码与操作数之间必须用“,”分隔。 ()2.MCS—51指令:MOV A,#40H ;表示将立即数40H 传送至A 中。 ()3.MCS—51指令:MOV A,@R0 ;表示将R0指示的地址单元中的内容传送至A 中。()4.MCS—51 指令:MOVX A,@DPTR ;表示将DPTR 指示的地址单元中的内容传送至A 中。 ()5.MCS—51 的数据传送指令是把源操作数传送到目的操作数,指令执行后,源操作数改变,目的操作数修改为源操作数。 ()6.MCS—51指令中,MOVX 为片外RAM 传送指令。 ()7.MCS—51指令中,MOVC 为ROM 传送指令。 ()8.将37H 单元的内容传送至A的指令是:MOV A,#37H。 ()9.MCS—51指令中,16 位立即数传送指令是:MOV DPTR,#data16。 ()10.MCS—51 单片机,CPU 对片外RAM 的访问只能用寄存器间接寻址的方式,且仅有4 条指令。 ()11.如JC rel 发生跳转时,目标地址为当前指令地址加上偏移量。 ()12.对于8051 单片机,当CPU 对内部程序存储器寻址超过4K 时,系统会自动在外部程序存储器中寻址。 ()13.指令MUL AB 执行前(A)=F0H,(B)=05H,执行后(A)=FH5,(B)=00H。()14.已知:DPTR=11FFH 执行INC DPTR 后,结果:DPTR=1200H。 ()15.已知:A=11H B=04H,执行指令DIV AB后,其结果:A=04H,B=1 CY=OV=0。()16.已知:A=1FH,(30H)=83H,执行ANL A,30H 后,结果:A=03H (30H)=83H P=0。 ()17.无条件转移指令LJMP addr16 称长转移指令,允许转移的目标地址在128KB 空间范围内。 ()18.MCS—51 指令系统中,执行指令FGO bit F0 ,表示凡用到F0 位的指令中均可用FGO 来代替。 ()19.MCS—51指令系统中,执行指令ORG 2000H;BCD:DB “A,B,C,D”表示将A、B、C、D 的ASII 码值依次存入2000H 开始的连续单元中。

51单片机汇编指令集

1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移;

AT89C51单片机指令系统

第3章AT89C51单片机指令系统 难点 ?MCS-51单片机的寻址方式 ?数据传送指令和算术运算指令的使用 ?位操作和控制转移类指令的使用 要求 掌握: ?MCS-51单片机的寻址方式 ?指令系统的基本格式 ?指令系统的操作功能 了解: ?指令系统的基本格式 ?操作数的使用方法 ?指令系统的操作过程 3.1 MCS-51单片机指令格式 3.2 寻址方式 3.3 指令系统 3.1 MCS-51单片机指令格式 计算机的指令系统是表征计算机性能的重要指标,每种计算机都有自己的指令系统。MCS—51单片机的指令系统是一个具有255种代码的集合,绝大多数指令包含两个基本部分:操作码和操作数。操作码表明指令要执行的操作的性质;操作数说明参与操作的数据或数据所存放的地址。 MCS—51指令系统中所有程序指令是以机器语言形式表示,可分为单字节、双字节、三字节3种格式。 用二进制编码表示的机器语言由于阅读困难,且难以记忆。因此在微机控制系统中采用汇编语言指令来编写程序。本章介绍MCS—51指令系统就是以汇编语言来描述的。 表3-1汇编指令与指令代码 标号:操作码目的操作数,源源操作数;注释 标号与操作码之间“:”隔开; 操作码与操作数之间用“空格”隔开; 目的操作数和源源操作数之间有“,”分隔; 操作数与注释之间用“;”隔开。 标号是由用户定义的符号组成,必须用英文大写字母开始。标号可有可无,若一条指令中有标号,标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址,在汇编时,把该地址赋值给标号。 操作码是指令的功能部分,不能缺省。MCS—51指令系统中共有42种助记符,代表了33种不同的功能。例如MOV是数据传送的助记符。

8051单片机指令系统

8051 单片机指令系统
难点

MCS-51 单片机的寻址方式 数据传送指令和算术运算指令的使用 位操作和控制转移类指令的使用
要求
掌握:

MCS-51 单片机的寻址方式 指令系统的基本格式 指令系统的操作功能
了解:

指令系统的基本格式 操作数的使用方法 指令系统的操作过程
2.7.1
MCS-51 单片机指令格式
计算机的指令系统是表征计算机性能的重要指标,每种计算机都有自己的指令系统. MCS—51 单片机的指令系统是一个具有 255 种代码的集合,绝大多数指令包含两个基本部 分:操作码和操作数.操作码表明指令要执行的操作的性质;操作数说明参与操作的数据或 数据所存放的地址. MCS—51 指令系统中所有程序指令是以机器语言形式表示,可分为单字节,双字节, 三字节 3 种格式. 用二进制编码表示的机器语言由于阅读困难, 且难以记忆. 因此在微机控制系统中采用 汇编语言指令来编写程序.本章介绍 MCS—51 指令系统就是以汇编语言来描述的.
表 1 汇编指令与指令代码
代码字节 单字节 单字节 双字节 三字节
指令代码 84 A3 7410 B440 rel
汇编指令 DIV AB INC DPTR MOV A,#10H CJNE A,#40H,LOOP
指令周期 四周期 双周期 单周期 双周期

一条汇编语言指令中最多包含 4 个区段,如下所示: 标号: 操作码 目的操作数,源源操作数 ;注释
标号与操作码之间": "隔开; 操作码与操作数之间用"空格"隔开; 目的操作数和源源操作数之间有", "分隔; 操作数与注释之间用"; "隔开. 标号是由用户定义的符号组成,必须用英文大写字母开始.标号可有可无,若一条指令 中有标号,标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址, 在汇编时,把该地址赋值给标号. 操作码是指令的功能部分,不能缺省.MCS—51 指令系统中共有 42 种助记符,代表了 33 种不同的功能.例如 MOV 是数据传送的助记符. 操作数是指令要操作的数据信息.根据指令的不同功能,操作数的个数有 3,2,1 或没 有操作数.例如 MOV A,#20H,包含了两个操作数 A 和#20H,它们之间用","隔开. 注释可有可无, 加入注释主要为了便于阅读, 程序设计者对指令或程序段作简要的功能说明, 在阅读程序或调试程序时将会带来很多方便.
2.7.2
寻址方式
所谓寻址方式,通常是指某一个 CPU 指令系统中规定的寻找操作数所在地址的方式, 或者说通过什么的方式找到操作数.寻址方式的方便与快捷是衡量 CPU 性能的一个重要方 面,MCS—51 单片机有七种寻找方式.
1
立即数寻址
立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本 身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中.立即数只 能作为源操作数,不能当作目的操作数. 例如: MOV A,#52H ;A←52H MOV DPTR,#5678H ;DPTR←5678H 立即寻址示意图如 1 所示.
图 1 立即寻址示意图

80C51系列单片机指令集

80C51指令系统

@Ri 表示R0、R1。RS1、RS0=00 时为1 区寄存器, RS1、RS0=01 时为2 区寄存器, RS1、RS0=10 时为3 区寄存器, RS1、RS0=11 时为4 区寄存器。 data 表示直接字节位;#data 表示立即常数; addr 11 表示11 位地址;addr 16表示16 位地; bit 表示直接位,rel 表示转移步数。 伪指令 注[<标号:>]和[<表达式>]可省略; 对80C51,DB、DW、DS命令只能对程序存储器使用,不能对数据存储器使用。 PSW 程序状态字(D0H)

中断允许控制寄存器(IE) ES:ES=0,禁止串行中断;ES=1,允许串行中断; ET1/ ET0=0:禁止定时器中断;ET1/ ET0=1:允许定时器中断 EX1/ EX0=0:禁止外部中断;EX1/ EX0=1:允许外部中断。 串行口控制寄存器(SCON) SM2:模式0时SM2必需为0,模式1时,当接收到的停止位不正确时RI不操作,在模式2与3 时,当SM2=1时,接收妻的第9个数据为0时,RI 不操作。 REN:由软件设置,REN=1 时,接收串行数据输入。 TEB8:在模式2 与3 时,传送的第9 位数据由软件控制。 RB8:在模式0 时此位无效,在模式1时,如SM2=0,则RB8 接收停止位数据。 在模式2 与3 时,传送的第9位数据放在这里。 TI:传送中断标志位,在模式0 时第8 位数据结束时,硬件自动将此位置1。 其它模式时,在停止位开始时设置此位为1,需由软件清除。 RI:接收中断标志位,在模式0时,第8位结束时,硬件会将此位置1,在其它模式时,在停止位的一半时间内由硬件会将此位置(见SM2),此位需由软件清除。 中断优先级控制寄存器(IP) PT1:定时器1的中断优先级设定位; PX1:外部中断1的优先级设定位; PT0:定时器0 的中断优先级设定位; PX0:外部中断0 的中断优先级设定位。

经典的51单片机汇编指令详解

MCS-51系列单片机指令以A开头的指令有18条,分别: ACALL addr11 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data AJMP addr11 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data 以X开头的指令有10条,分别为: XCH A,Rn XCH A,direct XCH A,@Ri XCHD A,@Ri XRL A,Rn XRL A,direct XRL A,@Ri XRL A,#data XRL direct,A XRL direct,#data 1、XCH A,Rn 指令名称:寄存器寻址字节交换指令 指令代码:C8H~CFH 指令功能:寄存器寻址字节 操作内容:(A)交换(Rn);n=0~7 字节数: 1 机器周期:1 2、XCH A,direct 指令名称:直接寻址字节交换指令 指令代码:C5H 指令功能:累加器内容与内部RAM低128单元或专用寄存器内容交换操作内容:(A)交换(direct) 字节数: 2

3、XCH A,@Ri 指令名称:间接寻址字节交换指令 指令代码:C6H~C7H 指令功能:累加器内容与内部RAM低128单元内容交换 操作内容:(A)交换((Ri)); i=0,1 字节数: 1 机器周期:1 4、XCHD A,@Ri 指令名称:半字节交换指令 指令代码:D6H~D7H 指令功能:累加器内容低4位与内部RAM低128单元低4位交换 操作内容:(A)3~0交换((Ri))3~0;i=0,1 字节数: 1 机器周期:1 5、XRL A,Rn 指令名称;逻辑异或操作指令 指令代码:68H~6FH 指令功能:累加器内容与寄存器内容进行逻辑异或操作 操作内容:A<-(A)异或(Rn); n=0~7 字节数: 1 机器周期:1 6、XRL A,direct 指令名称:逻辑异或操作指令 指令代码:65H 指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:A<-(A)异或(direct) 字节数: 2 机器周期:1 7、XRL A,@Ri 指令名称:逻辑异或指令 指令代码:66H~67H 指令功能:累加器与内部RAM低128单元内容进行逻辑异或操作 操作内容:A<-(A)异或((Ri)); i=0,1

MCS51单片机指令系统练习

第二章MCS51单片机指令系统与汇编语言程序设计 1.8051单片机的指令系统有何特点? 解:8051的指令系统由111条指令组成。如果按字节数分类,有49条单字节指令46条双字节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64条单周期指令、45条双周期指令和2条四周期指令,以单周期指令为主。 8051的指令系统具有以下特点: (1)存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送,能把一个并行I/O口中的内容传送到内部RAM单元中而不必经过累加器A或工作寄存器Rn。这样可以大大提高传送速度和缓解累加器A的瓶颈效应。 (2)用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器A中。这为编成翻译算法提供了方便。 (3)在算术运算指令中设有乘法和除法指令 (4)指令系统中一些对I/O口进行操作的指令具有“读——修改——写”的功能。这一功能指:在执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2度入内部,进行修改、改变,然后重新写到锁存器中去。这种类型指令包含所有的逻辑操作和位操作指令。 (5)8051单片机内部有一个布尔处理器,对为地址空间具有丰富的位操作指令。布尔操作类指令有17条,包括布尔传送指令、布尔状态控制指令、布尔逻辑操作指令、布尔条件转移指令。 2.8051单片机指令系统按功能可分为几类?具有几种寻址方式?它们的寻址范围如何?解:MCS-51单片机指令系统按功能可分为5类: (1)数据传送指令 (2)算术运算指令 (3)逻辑运算和移位指令 (4)控制转移指令 (5)位操作指令 MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表: 3.访问特殊功能寄存器和外部数据存储器应采用哪种寻址方式? 解:访问特殊功能寄存器,应采用直接寻址、位寻址方式。 访问外部数据存储器,应采用寄存器间接寻址方式。 1

51单片机指令速查表

MCS-51系列单片机指令速查表 算术运算指令(共24条) 机器码助记符功能 对标志影响 字节数周期数P OV AC CY 28~2F ADD A,Rn(A)+(Rn)→A√√√√11 25ADD A,direct(A)+(direct)→A√√√√21 26,27ADD A,@Ri(A)+((Ri))→A√√√√11 24ADD A,#data(A)+ data →A√√√√21 38~3F ADDC A,Rn(A)+(Rn)+Cy →A√√√√11 35ADDC A,direct(A)+(direct)+ Cy →A√√√√21 36,37ADDC A,@Ri(A)+((Ri))+Cy →A√√√√11 34ADDC A,#data(A)+ data +Cy →A√√√√21 98~9F SUBB A,Rn(A)-(Rn)-Cy →A√√√√11 95SUBB A,direct(A)-(direct)-C y →A√√√√21 96,97SUBB A,@Ri(A)-((Ri))-Cy →A√√√√11 94SUBB A,#data(A)- data - Cy →A√√√√21 04INC A(A)+ 1 →A√×××11 08~0F INC Rn(Rn)+ 1→Rn××××11 05INC direct(direct)+ 1 →direct××××21 06,07INC @Ri((Ri))+ 1 →(Ri)××××11 A3INC DPTR(DPTR)+ 1 →DPTR××××12 14DEC A(A)- 1 →A√×××11 18~1F DEC Rn(Rn)- 1→Rn××××11 15DEC direct(direct)- 1 →direct××××21 16,17DEC @Ri((Ri))- 1 →(Ri)××××11 A4MUL AB(A)·(B)→AB√××√14 84DIV AB(A)/(B)→AB√××√14 D4DA A对A进行十进制调整√√√√11 逻辑运算指令(共25条) 机器码助记符功能 对标志影响 字节数周期数P OV AC CY 58~5F ANL A,Rn(A)∧(Rn)→A√×××11 55ANL A,direct(A)∧(direct)→A√×××21 56,57ANL A,@Ri(A)∧((Ri))→A√×××11 54ANL A,#data(A)∧data →A√×××21 52ANL direct,A(direct)∧(A)→direct××××21 53ANL direct,#data(direct)∧data →direct××××32 48~4F ORL A,Rn(A)∨(Rn)→A√×××11 45ORL A,direct(A)∨(direct)→A√×××21 46,47ORL A,@Ri(A)∨((Ri))→A√×××11 44ORL A,#data(A)∨data →A√×××21

8051单片机21个特殊功能寄存器和指令汇总

MCS-51单片机 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SF R存储空间中,地址空间为80H-FFH,在这片SF R空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有R OM,用来存放程序,有R AM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SF R)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。 8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0 例:78H+97H(01111000+10010111) AC:辅助进、借位(高半字节与低半字节间的进、借位)。 例:57H+3AH(01010111+00111010) F0:用户标志位 由用户(编程人员)决定什么时候用,什么时候不用。 R S1、R S0:工作寄存器组选择位 通过修改PSW中的R S1、R S0两位的状态,就能任选一个工作寄存器区。这个特点提高了MCS-51现场保护和现场恢复的速度。对于提高CPU的工作效率和响应中断的速度是很有利的。若在一个实际的应用系统中,不需要四组工作寄存器,那么这个区域中多余单元可以作为一般的数据缓冲器使用。

相关文档
最新文档