第三章-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 ②对特殊功能寄存器可有两种寻址方式: ●直接寻址;

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

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指令系统中没有不带借位的减法,如果需要的话,应在\指令前,用

“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