请写出逻辑运算对应的C51语言指令,第3章 MCS-51单片机指令系统

(1)MCS-51单片机的指令系统有何特点?

解:MCS-51的指令系统由111条指令组成。如果按字节数分类,有49条单字节指令,46条双字节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64条单周期指令、45条双周期指令和2条四周期指令,以单周期指令为主。

MCS-51的指令系统具有以下特点:

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

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

③在算术运算指令中设有乘法和除法指令。

④指令系统中一些对I/O口进行操作的指令具有“读—修改—写”的功能。这一功能指在执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2读入内部进行修改,然后重新写到锁存器中去。这种类型指令包含所有的逻辑操作和位操作指令。

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

(2)MCS-51单片机指令系统按功能可分为几类?具有几种寻址方式?它们的寻址范围如何?

解:MCS-51单片机指令系统按功能可分为以下5类。

①数据传送指令。

②算术运算指令。

③逻辑运算和移位指令。

④控制转移指令。

⑤位操作指令。

MCS-51单片机的指令系统提供了7种寻址方式,其对应的寻址范围如下表:

寻址方式

使用的变量

寻址范围

立即寻址

程序存储器

直接寻址

内部RAM低128B

特殊功能寄存器SFR

寄存器寻址

R0~R7、A、B、DPTR、C

寄存器间接寻址

@R0、@R1、SP

@R0、@R1、@DPTR

内部RAM、堆栈指针SP

外部RAM

变址寻址

@A+PC、@A+DPTR

程序存储器

相对寻址

PC+偏移量

程序存储器

位寻址

内部RAM低128B位寻址区

可位寻址的特殊功能寄存器位

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

解:访问特殊功能寄存器应采用直接寻址、位寻址方式。

访问外部数据存储器,应采用寄存器间接寻址方式。

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

MOVXA,@R0或MOVXA,@R1

MOVX@R0,A或MOVX@R1,A

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

MOVXA,@DPTR

MOVX@DPTR,A

(4)“DAA”指令的作用是什么?怎样使用?

解:这条指令是在进行BCD码加法运算时,跟在“ADD”和“ADDC”指令之后,用来对BCD码的加法运算结果自动进行修正的,使其仍为BCD码表达形式。

在计算机中,遇到十进制调整指令时,中间结果的修正是由ALU硬件中的十进制修正电路自动进行的。用户不必考虑何时该加“6”,使用时只需在上述加法指令后面紧跟一条“DAA”指令即可。

(5)片内RAM 20H~2FH单元中的128个位地址与直接地址00H~7FH形式完全相同,如何在指令中区分出位寻址操作和直接寻址操作?

解:虽然内部RAM位寻址区的位地址范围00H~7FH与低128个单元的单元地址范围00H~7FH完全相同,但是在应用中可以通过指令的类型区分单元地址和位地址。

位寻址的操作只适用于下列位指令,而直接寻址操作对这些指令是无效的。

MOV C,bit

MOV bit,C

CLR bit

SETB bit

CPL bit

ANL C,bit

ANLC,/bit

JB bit,rel

JNB bit,rel

(6)MCS-51单片机指令系统中有长跳转LJMP指令、长调用LCALL指令,为何还设绝对跳转AJMP指令、绝对调用ACALL指令?在实际使用时应怎样考虑?

解:在实际应用中,可从寻址范围和指令长度两个方面来选择长跳转指令LJMP和短跳转指令AJMP、长调用指令LCALL和短调用指令ACALL。

长跳转LJMP在64KB范围内转移,而短跳转AJMP只能在2KB空间转移;长调用LCALL调用位于64KB程序空间的子程序,而短调用ACALL调用位于2KB程序空间范围的子程序。AJMP、ACALL指令代码长度为两个字节;LJMP、LCALL指令代码长度为3个字节。

(7)SJMP、AJMP和LJMP指令在功能上有何不同?

解:指令的转移范围不同。

SJMP是256B范围内的相对转移指令,AJMP是2KB范围内的无条件短跳转指令,LJMP是64KB范围内的无条件长跳转指令。

(8)MOVCA,@DPTR与MOVXA,@DPTR指令有何不同?

解:指令的转移范围不同。

SJMP是256B范围内的相对转移指令,AJMP是2KB范围内的无条件短跳转指令,LJMP是64KB范围内的无条件长跳转指令。

(9)在“MOVCA,@A+DPTR”和“MOVCA,@A+PC”中,分别使用了DPTR和PC作基址,请问这两个基址代表什么地址?使用中有何不同?

解:使用@A+DPTR基址变址寻址时,DPTR为常数且是表格的首地址,A为从表格首址到被访问字节地址的偏移量。

使用@A+PC基址变址寻址时,PC是下条指令首地址,而A是从下条指令首地址到常数表格中的被访问字节的偏移量。

(10)设片内RAM中的(40H)=50H,写出执行下列程序段后寄存器A和R0,以及片内RAM中50H和51H单元的内容为何值?

MOVA,40H

MOVR0,A

MOVA,#00

MOV@R0,A

MOVA,#30H

MOV51H,A

MOV52H,#70H

解:结果为,A=30H,R0=50H,50H=00H,51H=30H。

(11)设堆栈指针SP=60H,片内RAM中的30H=24H,31H=10H。执行下列程序段后,61H、62H、30H、31H、DPTR及SP中的内容将有何变化?

解:结果为,(61H)=24H,(62H)=10H,(30H)=00H,(31H)=0FFH,DPTR=2410H,SP=60H。

(12)在MCS-51的片内RAM中,已知(20H)=30H,(30H)=40H,(40H)=50H,(50H)=55H。分析下面各条指令,说明源操作数的寻址方式,分析按顺序执行各条指令后的结果。

MOVA,40H

MOVR0,A

MOVP1,#80H

MOV@R0,20H

MOV50H,R0

MOVA,@R0

MOVP2,P1

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

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

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

MOV P1,#80H立即寻址(P1)=80H

MOV @R0,20H直接寻址(50H)=30H

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

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

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

MOV 0D0H,R0寄存器寻址(0D0H)=40H

MOV 10H,#10H立即寻址(10H)=10H

MOV A,@R0寄存器间接寻址(A)=50H

MOV P2,P1寄存器寻址(P2)=80H

(13)完成以下的数据传送过程。

①R1的内容传送到R0。

②片外RAM 20H单元的内容送R0。

③片外RAM 20H单元的内容送片内RAM 20H。

④片外RAM 1000H单元的内容送片内RAM 20H。

⑤ROM 2000H单元的内容送R0。

⑥ROM 2000H单元的内容送片内RAM 20H。

⑦ROM 2000H单元的内容送片外RAM 20H。

解:①R1的内容传送到R0。

MOVA,R1

MOVR0,A

②片外RAM 20H单元内容送R0。

MOVDPTR,#0020H

MOVXA,@DPTR

MOV R0,A

③片外RAM 20H单元的内容送片内RAM 20H单元。

MOVDPTR,#0020H

MOVXA,@DPTR

MOV20H,A

④片外RAM 1000H单元的内容送片内RAM 20H单元。

MOVDPTR,#1000H

MOVXA,@DPTR

MOV 20H,A

⑤ROM 2000H单元的内容送R0单元。

MOVA,#00H

MOVDPTR,#2000H

MOVCA,@A+DPTR

MOV R0,A

⑥ROM 2000H单元的内容送片内RAM 20H单元。

MOVA,#00H

MOVDPTR,#2000H

MOVCA,@A+DPTR

MOV 20H,A

⑦ROM 2000H单元的内容送片外RAM 20H单元。

MOVA,#00H

MOVDPTR,#2000H

MOVCA,@A+DPTR

MOVDPTR,#0020H

MOVX@DPTR,A

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值