MCS-51单片机指令系统

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

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

MCS-51单片机指令系统的特点:

(1)指令执行时间快。

(2)指令短,约有一半的指令为单字节指令。

(3)用一条指令即可实现单字节数的相乘或相除。

(4)具有丰富的位操作指令。

(5)可直接用传送指令实现端口的输入输出操作。

3.1 MCS-51指令系统的分类、格式及一般说明

3.1.1 指令分类

?按指令功能,MCS-51指令系统分为数据传送与交换、算术运算、逻辑运算、程序转移、布尔处理操作、CPU控制等6类。

?布尔处理操作类指令又称位操作指令。

3.1.2 指令格式

?在MCS-51指令中,一般指令主要由操作码、操作数组成。

?指令应具有以下功能:

(1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。

(2)操作数指明操作的数本身或者是操作数所在的地址。

(3)指定操作结果存放的地址。

Rn:当前选中的寄存器区中的8个工作寄存器R0~R7(n=0~7)。

Ri:当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。

Direct:8位的内部RAM单元中的直接地址。

#data:包含在指令中的8位立即数。

#data16:包含在指令中的16位立即数。

Addr16:16位目的地址。

Addr11:11位目的地址。

3.1.3 指令描述符号介绍

rel:8位带符号的偏移字节,简称偏移量。

DPTR:数据指针,可用作16位地址寄存器。

Bit:内部RAM或专用寄存器中的直接寻址位。

A:累加器。

B:专用寄存器,用于乘法和除法指令中。

C:进位标志/进位位或布尔处理机中的累加器。

@:间址寄存器或基址寄存器的前缀,

如@Ri,@DPTR。

/ :位操作数的前缀,表示对该位操作数取反,

如/bit。

×:片内RAM的直接地址或寄存器。

(×):由×寻址的单元中的内容。

← :箭头左边的内容被右边的内容所代替。

3.2 寻址方式

3.2.1 立即寻址

操作数以指令形式出现,称作立即数,用加

# 号的8位或16位数来表示。

例如MOV A,# 60H ;A←#60H

MOV DPTR,# 3400H ;DPTR←#3400H

MOV 30H,# 40H ;30H单元←#40H

上述三条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。

3.2.2 直接寻址

指令中直接给出操作数的8位地址,能进行直接寻址的存储空间有SFR和片内RAM。

例如:MOV PSW,# 20H ;PSW←#20H

PSW直接地址为D0H,在指令中可用其名称。

MOV A,30H ;A←30H内部RAM

; 单元中的内容

30H为直接给出的内部RAM的地址。

3.2.3 寄存器寻址

这里的寄存器是指所选中的工作寄存器R0~R7或A、B 、DPTR、AB 。

例如:CLR A ;A←0

INC DPTR ;DPTR←DPTR+1

ADD A,R2 ;A←A+R2

MUL AB

3.2.4 寄存器间接寻址

以寄存器的内容作为操作数的地址,在寄存处器前加@以示区别。即以寄存器作为指针,可用于访问片内RAM和片外RAM。不能访问SFR。

能作为间接寻址的寄存器有R0、R1、DPTR,SP。其中R0、R1是指所选中的工作寄存器。SP仅用于堆栈操作。

1.访问片内RAM:用R0、R1作为间接寄存器,堆栈用SP作为间接寄存器。

例如:MOV @Ri,A (i=0或1)

2.访问片外RAM:这是唯一访问方法

⑴访问低256字节,可用R0或R1作为间接寄存器

例如:MOVX A,@Ri (i=0或1)

⑵访问整个64kB空间,可用R0或R1作为间接寄存器,用P2指出高8位地址

例如:MOV P2,# 高8位地址

MOVX A,@Ri (i=0或1)

⑶访问整个64kB空间,可用DPTR作为间接寄存器

例如:MOVX @DPTR,A

MOVX A,@R1 MOVX @DPTR,A

3.2.5 变址寻址

变址寻址只能对程序存储器中的数据进行读取访问。在指令符号上采用MOVC的形式。用基址寄存器DPTR或PC的内容与变址寄存器A中的内容相加形成要访问数据的地址。

例如:MOVC A,@ A+DPTR ;A←(A+DPTR)

或MOVC A,@ A+PC ;A← (A+PC)

变址寻址示意图

3.2.6 相对寻址

相对寻址是为实现程序的相对转移而设计。在相对转移指令中,给出地址偏移量rel,它是8位带符号数的补码:80H~7FH (-128~+127)。

以PC的当前值加上指令中给出的偏移量就形成新的PC值,即程序转移地址。

PC的当前值是指执行完该转移指令后的PC值。因为转移指令有2或3个字节,所以应该在原转移指令操作码地址基础上加上2或3。

转移有效地址=(PC+2/3)+偏移量

例如,SJMP 08H ;PC←PC+2+08H

相对寻址示意图

3.2.7 位寻址

位寻址只能对有位地址的单元作位寻址操作。

位寻址其实是一种直接寻址方式,不过其地址是位地址。

例如指令SETB 10H 将10H位置1,若22H单元中存放着数据40H,22H单元的D0位的位地址为10H,执行上述指令后(22H)=41H。

又如:MOV 32H,C ;32H←进位位C

ORL C ,32H ;C←C∨32H

3.3 分类指令

3.3.1 数据传送类指令

数据传送类指令共29种,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP 8种。

源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。MCS-51单片机片内数据传送途径如图所示。

MCS-51单片机片内数据传送图

1.以A为目的操作数

MOV A,Rn ;A← Rn

MOV A,direct ;A←(direct)

MOV A,@Ri ;A←(Ri)

MOV A,#data ;A← #data

2.以Rn为目的操作数

MOV Rn,A ;Rn ← A

MOV Rn,direct ;Rn ←(direct)

MOV Rn,#data ;Rn ← #data

3.以直接地址为目的操作数

MOV @Ri,A ;(Ri)← A

MOV @Ri,direct ;(Ri)←(direct)

MOV @Ri,#data ;(Ri)← #data

4.以间接地址为目的操作数

MOV @Ri,A ;(Ri)← A

MOV @Ri,direct ;(Ri)←(direct)

MOV @Ri,#data ;(Ri)← #data

例如:设(30H)=6FH,R1=40H,执行MOV @R1,30H后,30H单元中数据取出送入R1间接寻址的40H单元,(40H)=6FH。

5.以DPTR为目的操作数

MOV DPTR,#data16 ;DPTR ← #data16

例如执行MOV DPTR,#2000H 后,(DPTR)= 2000H。

6.访问外部数据RAM

MOVX A,@DPTR ;A ←(DPTR)

MOVX @DPTR,A ;(DPTR)← A

MOVX A,@Ri ;A ← (P2Ri)

MOVX @Ri,A ;(P2 Ri)← A

7.读程序存储器

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

MOVC A,@A+PC ;A ← (A+PC)

例如已知A=30H,DPTR=3000H,程序存储器单元(3030H)=50H,

执行MOVC A,@ A+DPTR后,A=50H。

8.数据交换

⑴字节交换

XCH A,Rn ;A<=> Rn

XCH A ,direct ;A<=>(direct)

XCH A,@Ri ;A<=>(Ri)

⑵半字节交换

XCHD A,@Ri ;A0~3<=>(Ri)0~3

SWAP A ;A0~3<=>A4~7

9.堆栈操作

所谓堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条专用指令:

PUSH direct ;SP←(SP+1),(SP)←(direct)

POP direct ;(direct)←(SP),SP ← SP-1

PUSH是进栈(或称为压入操作)指令。指令执行过程如图3-7所示。

指令PUSH 40H操作示意图指令POP 30H操作示意图【例3.1】将片内RAM 30H单元与40H单元中的内容互换。

方法1(直接地址传送法)

MOV 31H,30H

MOV 30H,40H

MOV 40H,31H

SJMP $

方法2(间接地址传送法)

MOV R0,#40H

MOV R1,#30H

MOV A,@R0

MOV B,@R1

MOV @R1,A

MOV @R0,B

SJMP $

【例3.2】将片内RAM 30H单元与40H单元中的内容互换。

方法3(字节交换传送法)

MOV A,30H

XCH A,40H

MOV 30H,A

SJMP $

方法4(堆栈传送法)

PUSH 30H

PUSH 40H

POP 30H

POP 40H

SJMP $

3.3.2 算术运算类指令

1.加法指令

ADD A,Rn ;A← A + Rn

ADD A,direct ;A← A +(direct)

ADD A,@Ri ;A← A +(Ri)

ADD A,#data ;A← A + #data

2.带进位加指令

ADDC A,Rn ;A← A + Rn + C

ADDC A,direct ;A← A +(direct)+ C

ADDC A,@Ri ;A← A +(Ri)+ C

ADDC A,#data ;A← A + #data + C

C为来自PSW状态寄存器中的进位位C。

例如,设A=20H,R0=21H,C=1,

执行指令ADDCA,R0后,A=42H。

3.带借位减指令

SUBB A,Rn ;A← A - Rn - C

SUBB A,direct ;A← A -(direct)- C

SUBB A,@Ri ;A← A -(Ri)- C

SUBB A,#data ;A← A - #data – C

例如,设A=39H,R0=20H,(20H)=32H,C=1,

执行指令SUBB A,@R0后,A=06H。

4.乘法指令

MUL AB ;BA← A×B

A和B中各存放一个8位无符号数,指令执行后,16位乘积的高8位在B中,低8位存A中。例如,A=30H,B=60H,

执行MUL AB 后,A=00H,B=12H。

5.除法指令

DIV AB ;A÷B→商在A中,余数在B中

A和B中各存放一个8位无符号数,A放被除数,B放除数。

指令执行后,A中存放商,B中存入余数。若B=00H,则指令执行后OV=1,A与B不变。

例如,A=30H,B=07H,

执行DIV AB 后,A=06H,B=06H。

6.加1指令

INC A ;A← A + 1

INC Rn ;Rn← Rn + 1

INC direct ;(direct)← (direct)+ 1

INC @Ri ;( Ri)← ( Ri)+ 1

INC DPTR ;DPTR← DPTR + 1

例如,(30H)=22H,

执行INC 30H 后,(30H)=23H。

7.减1指令

DEC A ;A← A - 1

DEC Rn ;Rn← Rn - 1

DEC direct ;direct← (direct)- 1

DEC @Ri ;(Ri)←(Ri)- 1

例如,R0=30H,(30H)=22H,

执行DEC @R0 后,(30H)=21H。

8.十进制调整指令

DA A ;把A中按二进制相加的结果

;调整成按BCD码相加的结果

例如,A=65BCD,B=78BCD,C=0,

执行下列指令

ADD A,B ; A=DDH

DA A

后,A=43 BCD,C=1。

【例3.2】试把存放在R1、R2和R3、R4中的两个16位数相加,结果存于R5R6中。

解:参考程序如下:

MOV A,R2 ;取第一个数的低8位

ADD A,R4 ;两数的低8位相加

MOV R6,A ;保存和的低8位

MOV A,R1 ;取第一个数的高8位

ADDC A,R3 ;两数的高8位相加,并把低8位相加时的

;进位位加进来

MOV R5,A ;把相加的高8位存入R5寄存器中

3.3.3 逻辑运算与循环类指令

1.逻辑“与”操作指令

ANL A, Rn

ANL A, @Ri

ANL A, #Data ANL Didect, #Data

ANL A, Didect ANL Didect, A

利用“与”操作屏蔽一些位或影响标志位。例如要去掉一个字节中的最高位(为0)可用F0H进行与操作。

2.逻辑“或”操作指令

ORL A, Rn

ORL A, @Ri

ORL A, #Data ORL Didect, #Data

ORL A, Didect ORL Didect, A

利用“或”操作组合信号。例如要把数字转换成ASCII码,可用30H进行或操作

3.逻辑“异或”操作指令----同0异1

XRL A, Rn

XRL A, @Ri

XRL A, #Data XRL Didect, #Data

XRL A, Didect XRL Didect, A

4.Acc内容按位求反与清零指令

求反指令CPL A ;

清零指令CLR A ;

5.循环指令

⑴Acc内容循环移位指令(移8次还原)

左移RL A

右移RR A

⑵Acc内容循带进位环移位指令(移9次还原)

左移RLC A

右移RRC A

⑶Acc内容循环移4次(低4位与高4位交换)

SWAP A

3.3.4 程序转移类指令

1.无条件转移指令

⑴长转移指令

LJMP addr16 ;PC ← addr16

⑵短(相对)转移指令

SJMP rel ;PC ← PC + 2 + rel

⑶绝对转移指令

AJMP addr11 ;PC10~0 ← addr11

该指令机器码构成:Addr11=a10a9a8a7a6a5a4a3a2a1a0

这11位地址在机器码中作如下安排:

操作码a10a9a800001 a7a6a5a4a3a2a1a0

01H 0 0 0 高三位a10a9a8加上00001形成操作码

21H 0 0 1

。。。

E1H 1 1 1

实际转移地址是原PC中的地址的最高五位保持不变,低11位换上Addr11。

在使用中关键是知道要转移的地址,如何得到操作码?

用转移目的地址高8位中的最低三位加上00001构成操作码,用转移目的地址低8位作为低8位。

⑷间接转移指令(散转指令)

JMP @A+DPTR ;PC ← A + DPTR

DPTR中的基地址加上Acc中无符号数形成有效转移地址,通过改变Acc中的内容便可以转移到不同的分支程序,故称散转指令。例如:

MOV DPTR,#TABLE

JMP @A+DPTR

TABLE: AJMP ROUT0 ;A=0

AJMP ROUT1 ;A=2

。。。。。。

2.条件转移指令

1. 进位/无进位转移指令(2字节相对转移指令)

JC rel ; Cy = 1,则转移

JNC rel ; Cy = 0,则转移

2. 累加器内容全零/非零转移指令(2字节相对转移指令)

JZ rel ; (A) = 0,则转移

JNZ rel ; (A) ≠ 0,则转移

3. 比较不相等转移指令(3字节3操作数相对转移指令)

CJNE A, #data, rel

CJNE A, direct, rel

CJNE @R0, #data, rel

CJNE @R1, #data, rel

CJNE R n, #data, rel

第一操作数与第二操作数相比较(比较即相减后不回送结果),若不相等,则转移,同时会影响Cy标志。当第一操作数小于第二操作数时,Cy=1;反之,Cy=0。

利用此指令可实现程序三分支。

4. 减1不为零转移指令(相对转移)

DJNZ Rn, rel ; 2字节指令

DJNZ direct, rel ;3字节指令,direct可以是片内RAM任意字节地址。

5. 位测试指令

JB bit, rel ;(bit)= 1, 则转移

JNB bit, rel ;(bit)= 0, 则转移

JBC bit, rel ;(bit)= 1, 则转移,同时该位清零

表3-1 程序存储器空间32个2K地址范围

0000H~07FFH 0800H~0FFFH 1000H~17FFH 1800H~1FFFH 2000H~27FFH 2800H~2FFFH 3000H~37FFH 3800H~3FFFH 4000H~47FFH 4800H~4FFFH 5000H~57FFH 5800H~5FFFH 6000H~67FFH 6800H~6FFFH 7000H~77FFH 7800H~7FFFH 8000H~87FFH 8800H~8FFFH 9000H~97FFH 9800H~9FFFH A000H~A7FFH A800H~AFFFH B000H~B7FFH B800H~BFFFH C000H~C7FFH C800H~CFFFH D000H~D7FFH D800H~DFFFH E000H~E7FFH E800H~EFFFH F000H~F7FFH F800H~FFFFH

3.3.5 子程序调用及返回指令

1.调用子程序指令

LCALL addr16 ; PC←PC+3,SP←SP+1,(SP)←PC7~10

; SP←SP+1,(SP)←PC15~8,PC←addr16

ACA LL addr11 ; PC ←PC+2,SP←SP+1,(SP)←PC7~0

; SP ← SP+1,(SP)← PC15~8,PC10~0←addr11 2.返回指令

RET ;PC15~8←(SP),SP←SP-1

;PC7~0 ←(SP),SP←SP-1

RETI ;PC15~8 ←(SP),SP←SP-1

;PC7~0 ←(SP),SP←SP-1

3.3.6 位操作指令

1.位数据传送指令

MOV C,bit ;C←(bit)

MOV bit,C ;bit←C

2.位状态修改指令

CLR C ;C←0

CLR bit ;(bit)←0

CPL C ;C←

CPL bit ;(bit)←(bit)

SETB C;C←1

SETB b it ;(bit)←1

3.位逻辑运算指令

ANL C,bit ;C←C∧(bit)

ANL C,/bit ;C←C∧(bit)

ORL C,bit ;C←C∨(bit)

ORL C,/bit ;C←C∨(bit)

4.位转移指令

JC rel ;若C=1,则转移(PC←PC+2+rel)

;否则程序顺序执行

JNC rel ;若C=0,则转移(PC←PC+2+rel)

;否则程序顺序执

JB bit, rel ;若(bit)=1,则转移(PC←PC+3+rel)

;否则程序顺序执行

JNB bit,rel ;若(bit)=0,则转移PC←PC+3+rel)

;否则程序顺序执行

JBC bit,rel ;若(bit)=1,则转移PC←PC+3+rel

;(bit)←0,否则程序顺序执行

功能:分别检测指定位是1还是0,若条件符合,则CPU转向指定的目标地址去执行程序;否则,顺序执行下条指令。

3.3.7 空操作指令

NOP ;PC ← PC+1

这是一条单字节指令。执行时,不作任何操作(即空操作),仅将程序计数器PC的内容加1,使CPU 指向下一条指令继续执行程序。这条指令常用来产生一个机器周期的时间延迟。

MCS-51指令详解

;说明:为了使MCS-51单片机初学者快速入门,迅速掌握单片机指令含意、操作码、操作数及

;对应地址,汇编语言怎样编写等,现按指令操作码按顺序编写,可对照本公司编写的

;<>一书第145页指令手册查看,更详细资料请阅

; "第四章MCS-51指令系统" 及第124页指令系统摘要。并在仿真器上装入

;JJM.HEX文件,并对有关单元置数,用单步(F8)验证其正确性及其运行结果。

ORG 0000H

NOP ;空操作指令

AJMP L0003 ;绝对转移指令

L0003: LJMP L0006 ;长调用指令

L0006: RR A ;累加器A内容右移(先置A为88H)

INC A ; 累加器A 内容加1

INC 01H ;直接地址(字节01H)内容加1

INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1

;(设R0=02H,02H=03H,单步执行后02H=04H)

INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1

;(设R1=02H,02H=03H,单步执行后02H=04H)

INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少) INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用

S0019: LCALL S001C ;长调用

S001C: RRC A ;累加器A的内容带进位位右移(设A=11H,C=0

;单步执行后查A和C内容为多少)

DEC A ;A的内容减1

DEC 01H ;直接地址(01H)内容减1

DEC @R0 ;R0间址减1,即R0的内容为地址,该地址的内容减1

DEC @R1 ; R1间址减1

DEC R0 ; R0内容减1

DEC R1 ; R1内容减1

DEC R2 ; R2内容减1

DEC R3 ; R3内容减1

DEC R4 ; R4内容减1

DEC R5 ; R5内容减1

DEC R6 ; R6内容减1

DEC R7 ; R7内容减1

JB 20H,L002D;如果位(20H,即24H的0位)为1则转移

L002D: AJMP L0017 ;绝对转移

RET ;子程序返回指令

RL A ;A左移

ADD A,#01H ;A的内容与立即数(01H)相加

ADD A,01H ; A的内容与直接地址(01H内容)相加

ADD A,@R0 ; A的内容与寄存器R0的间址内容相加

ADD A,@R1 ; A的内容与寄存器R1的间址内容相加

ADD A,R0 ; A的内容与寄存器R0的内容相加

ADD A,R1 ; A的内容与寄存器R1的内容相加

ADD A,R2 ; A的内容与寄存器R2的内容相加

ADD A,R3 ; A的内容与寄存器R3的内容相加

ADD A,R4 ; A的内容与寄存器R4的内容相加

ADD A,R5 ; A的内容与寄存器R5的内容相加

ADD A,R6 ; A的内容与寄存器R6的内容相加

ADD A,R7 ; A的内容与寄存器R7的内容相加

JNB 30H,L0041 ;直接位(30H)为0相对转移

L0041: ACALL S0100 ;绝对调用

RETI ;中断返回指令

RLC A ;带进位位左移

ADDC A,#02H ;A带进位位与立即数(#02H)相加

ADDC A,02H ; A带进位位与直接地扯(02H内容)相加ADDC A,@R0 ; A带进位位与R0间扯内容相加

ADDC A,@R1 ; A带进位位与R1间扯内容相加

ADDC A,R0 ; A带进位位与R0内容相加

ADDC A,R1 ; A带进位位与R1内容相加

ADDC A,R2 ; A带进位位与R2内容相加

ADDC A,R3 ; A带进位位与R3内容相加

ADDC A,R4 ; A带进位位与R4内容相加

ADDC A,R5 ; A带进位位与R5内容相加

ADDC A,R6 ; A带进位位与R6内容相加

ADDC A,R7 ; A带进位位与R7内容相加

JC L0095 ;进位为1转移

NOP

AJMP L0017 ;绝对转移

ORL 02H,A ;直接地址内容与A或

ORL 02H,#02H ; 直接地址内容与立即数或

ORL A,#44H ;A与立即数或

ORL A,02H ; A与直接地址内容或

ORL A,@R0 ; A与R0间址内容或

ORL A,@R1 ; A与R1间址内容或

ORL A,R0 ; A与R0内容或

ORL A,R1 ; A与R1内容或

ORL A,R2 ; A与R2内容或

ORL A,R3 ; A与R3内容或

ORL A,R4 ; A与R4内容或

ORL A,R5 ; A与R5内容或

ORL A,R6 ; A与R6内容或

ORL A,R7 ; A与R7内容或

JNC L0017 ;进位为0转移

ACALL L0017 ;绝对调用

ANL 02H,A ; 直接地址与A与

ANL 02H,#02H ; 立即数与直接地址与

ANL A,#02H ; A与立即数与

ANL A,02H ;A与直接地址与

ANL A,@R0 ; A与R0间址与

ANL A,@R1 ; A与R1间址与

ANL A,R0 ; A与R0与

ANL A,R1 ; A与R1与

ANL A,R2 ; A与R2与

ANL A,R3 ; A与R3与

ANL A,R4 ; A与R4与

ANL A,R5 ; A与R5与

ANL A,R6 ; A与R6与

ANL A,R7 ; A与R7与

JZ L0084 ;A为零转移

L0084: AJMP L0017 ;绝对转移

XRL 01H,A ;直接地址与A异或

XRL 02H,#01H ; 直接地址与立即数异或XRL A,#01H ;A与立即数异或

XRL A,01H ; A与直接地址异或

XRL A,@R0 ; A与R0间址址异或

XRL A,@R1 ; A与R1间址址异或

XRL A,R0 ; A与R0异或

XRL A,R1 ; A与R1异或

XRL A,R2 ; A与R2异或

XRL A,R3 ; A与R3异或

XRL A,R4 ; A与R4异或

L0095: XRL A,R5 ; A与R5异或

XRL A,R6 ; A与R6异或

XRL A,R7 ; A与R7异或

JNZ L0084 ;A不为零转

L009A: ACALL L0084 ;绝对调用

ORL C,01H ;直接位或到进位

JMP @A+DPTR ;相对于DPTR间接转

MOV A,#01H ;立即数送A

MOV 01H,#02H ;立即数送直接地址

MOV @R0,#01H ;立即数送间址R0

MOV @R1,#02H ; 立即数送间址R1

MOV R0,#01H ; 立即数送R0

MOV R1,#01H ; 立即数送R1

MOV R2,#01H ; 立即数送R2

MOV R3,#01H ; 立即数送R3

MOV R4,#01H ; 立即数送R4

MOV R5,#01H ; 立即数送R5

MOV R6,#01H ; 立即数送R6

MOV R7,#01H ; 立即数送R7

SJMP L00BA ;短转移

L00BA: AJMP L0095 ;绝对转移

ANL C,02H ;直接地址与进位与

ORG 00C0H ;

MOV 02H,01H ;直接地址送直接地址

MOV 01H,@R0 ;间址R0送直接地址

MOV 01H,@R1 ; 间址R1送直接地址

MOV 01H,R0 ; R0送直接地址

MOV 01H,R1 ; R1送直接地址

MOV 01H,R2 ; R2送直接地址

MOV 01H,R3 ; R3送直接地址

MOV 01H,R4 ; R4送直接地址

MOV 01H,R5 ; R5送直接地址

MOV 01H,R6 ; R6送直接地址

MOV 01H,R7 ; R7送直接地址

NOP

MOV DPTR,#1234H ;建立数据指针地址为1234H

ACALL L00BA ;绝对调用

MOV 03H,C ;进位送03H位(即20H的03位)

MOVC A,@A+DPTR ;由A+DPTR寻扯的程序存贮器字节送A SUBB A,#01H ;A减去立即数和进位位

SUBB A,02H ; A减去直接地址内容和进位位

SUBB A,@R0 ; A减去R0间接RAM和进位位

SUBB A,@R1 ; A减去R1间接RAM和进位位

SUBB A,R0 ; A减去R0和进位位

SUBB A,R1 ; A减去R1和进位位

SUBB A,R2 ; A减去R2和进位位

SUBB A,R3 ; A减去R3和进位位

SUBB A,R4 ; A减去R4和进位位

SUBB A,R5 ; A减去R5和进位位

SUBB A,R6 ; A减去R6和进位位

SUBB A,R7 ; A减去R7和进位位

ORL C,/00H ;直接位的反或到进位

AJMP L0084 ;绝对转移

MOV C,03H ;直接位数送进位

INC DPTR ;数据指针加1

MUL AB ;A乘以B

NOP ;A5H为二字节空操作指令

NOP

MOV @R0,05H ;直接字芯送R0间接RAM

MOV @R1,05H ; 直接字芯送R1间接RAM

MOV R0,05H ; 直接字芯送R0

MOV R1,05H ; 直接字芯送R1

S0100: MOV R2,05H ; 直接字芯送R2

MOV R3,05H ; 直接字芯送R3

MOV R4,05H ; 直接字芯送R4

MOV R5,05H ; 直接字芯送R5

MOV R6,05H ; 直接字芯送R6

MOV R7,05H ; 直接字芯送R7

ANL C,/04H ; 直接位的反与到进位

ACALL S0100 ;绝对调用

CPL 04H ;直接位取反

CPL C ;进位取反

CJNE A,#01H,L0139 ;立即数与A比较,不相等则转移

CJNE A,01H,L0139 ; 直接字节与A比较,不相等则转移

CJNE @R0,#01H,L0139 ; 立即数与R0间接RAM比较,不相等则转移CJNE @R1,#01H,L0139 ; 立即数与R1间接RAM比较,不相等则转移CJNE R0,#01H,L0139 ; 立即数与R0比较,不相等则转移

CJNE R1,#01H,L0139 ; 立即数与R1比较,不相等则转移

CJNE R2,#01H,L0139 ; 立即数与R2比较,不相等则转移

CJNE R3,#01H,L0139 ; 立即数与R3比较,不相等则转移

CJNE R4,#01H,L0139 ; 立即数与R4比较,不相等则转移

CJNE R5,#01H,L0139 ; 立即数与R5比较,不相等则转移

CJNE R6,#01H,L0139 ; 立即数与R6比较,不相等则转移

CJNE R7,#01H,L0139 ; 立即数与R7比较,不相等则转移

PUSH 00H ;直接字节进栈,SP加1

L0139: AJMP L0084 ;绝对转移

CLR 04H ;直接位清零

CLR C ;清零进位

SWAP A ;A左环移四位(A的二个半字节交换)

XCH A,05H ;交换A和直接字节

XCH A,@R0 ; 交换A和R0间接RAM

XCH A,@R1 ; 交换A和R1间接RAM

XCH A,R0 ; 交换A和R0

XCH A,R1 ; 交换A和R1

XCH A,R2 ; 交换A和R2

XCH A,R3 ; 交换A和R3

XCH A,R4 ; 交换A和R4

XCH A,R5 ; 交换A和R5

XCH A,R6 ; 交换A和R6

XCH A,R7 ; 交换A和R7

POP 00H ;直接字节出栈,SP减1

ACALL L0139 ;绝对调用

SETB 03H ;置位直接位

SETB C ;置位进位

DA A ;A的十进制加法调熊

DJNZ 01H,L0139 ;直接字节减1,不为零则转移

XCHD A,@R0 ;交换A和R0间接RAM的低4位

XCHD A,@R1 ; 交换A和R1间接RAM的低4位

L0158: DJNZ R0,L0139 ; R0减1,不为零则转移

DJNZ R1,L0158 ; R1减1,不为零则转移

DJNZ R2,L0158 ; R2减1,不为零则转移

DJNZ R3,L0158 ; R3减1,不为零则转移

DJNZ R4,L0158 ; R4减1,不为零则转移

DJNZ R5,L0158 ; R5减1,不为零则转移

DJNZ R6,L0158 ; R6减1,不为零则转移

DJNZ R7,L0158 ; R7减1,不为零则转移

MOVX A,@DPTR ;外部数据(16位地址)送A

L0169: NOP

AJMP L0139 ;绝对转移

MOVX A,@R0 ;R0间址即外部数据(8位地址)送A MOVX A,@R1 ; R1间址即外部数据(8位地址)送A CLR A ;清零A

MOV A,05H ;直接字节送A

MOV A,@R0 ;R0间接RAM送A

MOV A,@R1 ; R1间接RAM送A

MOV A,R0 ; R0送A

MOV A,R1 ; R1送A

MOV A,R2 ; R2送A

MOV A,R3 ; R3送A

MOV A,R4 ; R4送A

MOV A,R5 ; R5送A

MOV A,R6 ; R6送A

MOV A,R7 ; R7送A

MOVX @DPTR,A ;A送外部数据(16位地址)

NOP

ACALL L0169 ;绝对调用

MOVX @R0,A ;A送R0间址即外部数据(8位地址)

MOVX @R1,A ; A送R1间址即外部数据(8位地址)

CPL A ;A取反

MOV 05H,A ;A送直接字节

MOV @R0,A ; A送R0间址即间接RAM

MOV @R1,A ; A送R1间址即间接RAM

MOV R0,A ; A送R0

MOV R1,A ; A送R1

MOV R2,A ; A送R2

MOV R3,A ; A送R3

MOV R4,A ; A送R4

MOV R5,A ; A送R5

MOV R6,A ; A送R6

MOV R7,A ; A送R7 END

51的汇编控制指令

8051 INSTRUCTION SET

1.Arithmetic operations:

Mnemonic Byte Cyc

ADD A,@Ri 1 1

ADD A,Rn 1 1

ADD A,direct 2 1

ADD A,#data 2 1

ADDC A,@Ri 1 1

ADDC A,Rn 1 1

ADDC A,direct 2 1

ADDC A,#data 2 1

SUBB A,Rn 1 1

SUBB A,direct 2 1

SUBB A,#data 2 1

INC A 1 1

INC @Ri 1 1

INC Rn 1 1

INC DPTR 1 1

INC direct 2 1

INC direct 2 1

DEC A 1 1

DEC @Ri 1 1

DEC Rn 1 1

DEC direct 2 1

MUL AB 1 4

DIV AB 1 4

DA A 1 1

8051的汇编控制指令,占用字节,执行周期列表3.Data transfer:

Mnemonic Byte Cyc

MOV A,@Ri 1 1

MOV DPTR,#data16 3 2

MOV A,Rn 1 1

MOVC A,@A+DPTR 1 2

MOV A,direct 2 1

MOVC A,@A+PC 1 2

MOV A,#data 2 1

MOVX A,@Ri 1 2

MOV @Ri,A 1 1

MOVX A,@DPTR 1 2

MOV @Ri,direct 2 2

MOVX @Ri,A 1 2

MOV @Ri,#data 2 1

MOVX @DPTR,A 1 2

MOV Rn,A 1 1

PUSH direct 2 2

MOV Rn,direct 2 2

POP direct 2 2

MOV Rn,#data 2 1

XCH A,@Ri 1 1

MOV direct,A 2 1

XCH A,Rn 1 1

MOV direct,@Ri 2 2

XCH A,direct 2 1

MOV direct,Rn 2 2

MOV direct,direct 3 2

MOV direct,#data 3 2

8051的汇编控制指令,占用字节,执行周期列表2.

Logical opreations:

ANL A,@Ri 1 1

XRL A,@Ri 1 1

ANL A,Rn 1 1

XRL A,Rn 1 1

ANL A,direct 2 1

XRL A,direct 2 1

ANL A,#data 2 1

XRL A,#data 2 1

ANL direct,A 2 1

XRL direct,A 2 1

ANL direct,#data 3 2

XRL direct,#data 3 2

ORL A,@Ri 1 1

CLR A 1 1

ORL A,Rn 1 1

CPL A 1 1

ORL A,direct 2 1

RL A 1 1

ORL A,#data 2 1

RLC A 1 1

ORL direct,A 2 1

RR A 1 1

ORL direct,#data 3 2

RRC A 1 1

SWAP A 1 1

8051的汇编控制指令,占用字节,执行周期列表4.Boolean variable manipulation: Mnemonic Byte Cyc

CLR C 1 1

ANL C,bit 2 2

SETB C 1 1

ANL C,/bit 2 2

CPL C 1 1

ORL C,bit 2 2

CLR bit 2 1

ORL C,/bit 2 2

SETB bit 2 1

MOV C,bit 2 1

CPL bit 2 1

MOV bit,C 2 2

8051的汇编控制指令,占用字节,执行周期列表

5.Program and machine control:

Mnemonic Byte Cyc

NOP 1 1

JZ rel 2 2

RET 1 2

JNZ rel 2 2

RETI 1 2

JC rel 2 2

ACALL addr11 2 2

JNC rel 2 2

AJMP addr11 2 2

JB bit,rel 3 2

LCALL addr16 3 2

JNB bit,rel 3 2

LJMP addr16 3 2

JBC bit,rel 3 2

SJMP rel 2 2

CJNE A,direct,rel 3 2

JMP @A+DPTR 1 2

CJNE A,#data,rel 3 2

DJNZ Rn,rel 2 2

CJNE @Ri,#data,rel 3 2

DJNZ direct,rel 3 2

CJNE Rn,#data,rel 3 2

MCS-51的指令

MCS-51数据传送指令

数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。

[1]. 以累加器A为目的操作数类指令(4条)

这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式:

MOV A,data ;(data)→(A)直接单元地址中的内容送到累加器A

MOV A,#data ;#data→(A)立即数送到累加器A中

MOV A,Rn ;(Rn)→(A)Rn中的内容送到累加器A中

MOV A,@Ri ;((Ri))→(A)Ri内容指向的地址单元中的内容送到累加器A

[2]. 以寄存器Rn为目的操作数的指令(3条)

这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式:

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 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)比较不相等则转移;

MCS-51指令表

MCS-51单片机指令汇总表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1 XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD A, @Ri 间接RAM 和累加器交换低4 位字节 1 1 (算术运算类指令) INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接地址加1 2 1 INC @Ri 间接RAM 加1 1 1 INC DPTR 数据指针加1 1 2 DEC A 累加器减1 1 1 DEC Rn 寄存器减1 1 1

51单片机常用汇编语言助记符英文全称

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) 逻辑与; 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)子程序绝对调用;

第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

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

51 单片机汇编指令集 一、数据传送类指令( 7 种助记符) MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q 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 (Decreme nt Jump if Not Zero) 减1后不为0则转移; JZ (Jump if Zero) 结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set) 有进位则转移; JNC (Jump if Not Carry) 无进位则转移; JB (Jump if the Bit is set) 位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; 带进位循环左移; 带进位循环右移;

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单片机指令表汇总

51单片机指令表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器内容传送到累加器 1 1 MOV A,direct 直接地址内容传送到累加器 2 1 MOV A,@Ri 间接RAM内容传送到累加器 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器内容传送到寄存器 1 1 MOV Rn,direct 直接地址内容传送到寄存器 2 2 MOV Rn,#data 立即数传送到寄存器 2 1 MOV direct,Rn 寄存器内容传送到直接地址 2 2 MOV direct,direct 直接地址传内容传送到直接地址 3 2 MOV direct,A 累加器内容传送到直接地址 2 1 MOV direct,@Ri 间接RAM内容传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 累加器内容传送到间接RAM 1 1 MOV @Ri,direct 直接地址内容传送到间接RAM 2 2 MOV @Ri,#data 立即数传送到间接RAM 2 1 MOV DPTR,#data16 16 位地址传送到数据指针 3 2 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8位地址)内容传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16位地址)内容传送到累加器 1 2 MOVX @Ri,A 累加器内容传送到外部RAM(8位地址) 1 2 MOVX @DPTR,A 累加器内容传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址内容压入堆栈 2 2 POP direct 堆栈内容弹出到直接地址 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

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则转移;

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 ...........................................................

51单片机指令集

51单片机指令集.txt我这辈子只有两件事不会:这也不会,那也不会。人家有的是背景,而我有的是背影。肉的理想,白菜的命。肉的理想,白菜的命。白马啊你死去哪了!是不是你把王子弄丢了不敢来见我了。MCS-51单片机的指令集 1、数据传送类指令 助记符功能说明字节数振荡周期 MOV A,Rn 寄存器内容送入累加器 1 12 MOV A,direct 直接地址单元中的数据送入累加器 2 12 MOV A,@Ri 间接RAM中的数据送入累加器 1 12 MOV A,#data8 8位立即数送入累加器 2 12 MOV Rn,A 累加器内容送入寄存器 1 12 MOV Rn,direct 直接地址单元中的数据送入寄存器 2 24 MOV Rn,#data8 8位立即数送入寄存器 2 12 MOV direct,A 累加器内容送入直接地址单元 2 12 MOV direct,Rn 寄存器内容送入直接地址单元 2 24 MOV direct,direct 直接地址单元中的数据送入直接地址单元 3 24 MOV direct,@Ri 间接RAM中的数据送入直接地址单元 2 24 MOV direct,#data8 8位立即数送入直接地址单元 3 24 MOV @Ri,A 累加器内容送入间接RAM单元 1 12 MOV @Ri,direct 直接地址单元中的数据送入间接RAM单元 2 24 MOV @Ri,#data8 8位立即数送入间接RAM单元 2 12 MOV DPTR,#data16 16位立即数地址送入地址寄存器 3 24 MOV A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1 24 MOV A,@A+PC 以PC为基地址变址寻址单元中的数据送入累加器 1 24 MOV A,@Ri 外部RAM(8位地址)送入累加器 1 24 MOV A,@DPTR 外部RAM(16位地址)送入累加器 1 24 MOV @Ri,A 累加器送入外部RAM(8位地址) 1 24 MOV @DPTR,A 累加器送入外部RAM(16位地址) 1 24 PUSH direct 直接地址单元中的数据压入堆栈 2 24 POP DIRECT 堆栈中的数据弹出到直接地址单元 2 24 XCH A,Rn 寄存器与累加器交换 1 12 XCH A,direct 直接地址单元与累加器交换 2 12 XCH A,@Ri 间接RAM与累加器交换 1 12 XCHD A,@Ri 间接RAM与累加器进行低半字节交换 1 12 2、算术操作类指令 助记符功能说明字节数振荡周期 ADD A,Rn 寄存器内容加到累加器 1 12 ADD A,direct 直接地址单元加到累加器 2 12 ADD A,@Ri 间接RAM内容加到累加器 1 12 ADD A,#data8 8位立即数加到累加器 2 12 ADDC A,Rn 寄存器内容带进位加到累加器 1 12

快速学习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单片机考试常见试题

汇编51单片机考试常见试题

一、填空题 1.单片机是把中央处理器、存储器、定时器/计数器以及I/O接口电路等主要计算机部件集成在一块集成电路芯片上的微型计算机。 2.除了单片机这一名称之外,单片机还可称为微控制器、嵌入式控制器。 3.计算机的系统总线有地址总线、控制总线和数据总线。 4.80C51单片机基本型内部RAM有 128 个字节单元,这些单元可以分为三个用途不同的区域,一是工作寄存器区、二是位寻址区、三是数据缓冲区。5.8051单片机有2 个16位定时/计数器。 6.单片机存储器的主要功能是存储程序和数据。80C51含4 KB掩膜ROM。7.80C51在物理上有4个独立的存储器空间。 8.通常、单片机上电复位时PC= 0000H,SP=07H;而工作寄存器则缺省采用第00 组,这组寄存器的地址范围是从00H~ 07H。 9.8051的堆栈是向地址的高端生成的。入栈时SP先加1,再压入数据。10.使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。11.MCS-51特殊功能寄存器只能采用直接寻址方式。 12.汇编语言中可以使用伪指令,它们不是真正的指令,只是用来对汇编过程进行某种控制。 13.半导体存储器的最重要的两个指标是存储容量和存储速度。 14.当PSW4=1,PSW3=0时,工作寄存器Rn,工作在第2组。 15.在8051单片机中,由 2 个振荡(晶振)周期组成1个状态(时钟)周期,由 6个状态周期组成1个机器周期。 16.假定累加器A的内容30H,执行指令:1000H:MOVC A,@A+PC后,把程序存储器1031H单元的内容送累加器A中。 17.MCS-51单片机访问外部存储器时,利用ALE信号锁存来自P0口的低8位地址信号。 18.内部RAM中,位地址为30H的位,该位所在字节的字节地址为26H。19.若A中的内容为63H,那么,P标志位的值为0。 20.在基址加变址寻址方式中,以累加器A作变址寄存器,以DPTR或PC作基址寄存器。 21.指令格式是由操作码和操作数所组成,也可能仅由操作码组成。 22.通过堆栈操作实现子程序调用,首先就要把PC的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到PC。 23.MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为64KB。 24.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的地址。 25.假定累加器A中的内容为30H,执行指令1000H:MOVC A,@A+PC 后,把程序存储器1031H单元的内容送入累加器A中。 26.12根地址线可寻址4 KB存储单元。 27.:假定A=55H,R3=0AAH,在执行指令ANL A,R3后,A=00H,R3=0AAH。28.MCS-51的P0口作为输出端口时,每位能驱动8个LSTTL负载。 29.MCS-51有4个并行I/O口,其中P1~P3是准双向口,所以由输出转输入时必须先写入“1”。 30.MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。

相关文档
最新文档