单片机原理及应用答案(张毅刚) 下载本文

(2)直接寻址方式 指令中操作数直接以单元地址的形式给出,该单元地址中的内容就

是操作数。

(3)寄存器间接寻址方式 寄存器中存放的是操作数的地址,即先从寄存器中找到操作

数的地址,再按该地址找到操作数。

(4)立即寻址方式 操作数在指令中直接给出,但需在操作数前面加前缀标志“#”。 (5)基址寄存器加变址寄存器间接寻址方式 以 DPTR 或 PC 作基址寄存器,以累加器

A 作为变址寄存器,并以两者内容相加形成的 16 位地址作为操作数的地址,以达到访问数

据表格的目的。

(6)位寻址方式 位寻址指令中可以直接使用位地址。

(7)相对寻址方式 在相对寻址的转移指令中,给出了地址偏移量,以“rel”表示,即

把 PC 的当前值加上偏移量就构成了程序转移的目的地址。 3.5 MCS-51指令按功能可以分为哪几类?

答:MCS-51 指令系统按功能分为:数据传送类(28 条) ;算术操作类(24 条) ;逻辑运算

类(25 条) ;控制转移类(17 条) ;位操作类(17条)。 3.6 访问 SFR,可使用哪些寻址方式?

答:一般采用直接寻址,对于 SFR 中字节地址能被 8 整除的 SFR 可以使用位寻址,对于 SFR

中的 A、B、DPTR 寄存器可以采用寄存器寻址。

3.7 指令格式是由(操作码)和(操作数)所组成,也可能仅由(操作码)组成。 3.8 假定累加器 A中的内容为 30H,执行指令: 1000H:MOVC A,@A+PC

后,把程序存储器(1031H)单元的内容送入累加器中

3.9 在 MCS----51 中,PC和 DPTR 都用于提供地址,但 PC 是为访问(程序)存储器提供地

址,而 DPTR 是为访问(数据)存储器提供地址。

3.10 在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是 操作数的(地址)。

3.11 该程序段的功能是什么? PUSH A PUSH B POP A POP B

答:功能是 A、B 内容互换

3.12 已知程序执行前有 A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下列程序执行后:

POP DPH POP DPL

MOV DPTR,#4000H RL A

MOV B,A

MOVC A,@A+DPTR PUSH A MOV A,B INC A

MOVC A,@A+DPTR PUSH A RET

ORG 4000H

DB 10H,80H,30H,50H,30H,50H

A=50H SP=50H (51H)=30H (52H)=50H PC=5030H 3.13 写出完成如下要求的指令,但是不能改变未涉及位的内容。 (A)把 Acc.3,Acc.4,Acc.5 和 Acc.6清 0。 解:ANL A,#87H

(B)把累加器 A的中间 4 位清0。 解:ANL A,#C3H

(C)使 Acc.2 和 Acc.3置 1。 解:ORL A,#0CH 3.14 假定 A=83H,(R0)=17H,(17H)=34H,执行以下指令: ANL A,#17H ORL 17H,A XRL A,@R0 CPL A

后,A的内容为(0CBH) 3.15 假设 A=55H,R3=0AAH,在执行指令后 ANL A,R3 后, A=(00H), R3=(0AAH) 3.16 如果 DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下

列指令后:

POP DPH POP DPL POP SP

则:DPH=(3CH) DPL=(5FH) SP=(4FH) 3.17 假定 SP=60H,A=30H,B=70H,执行下列指令: PUSH A PUSH B

后,SP的内容为(62H),61H单元的内容为(30H),62H单元的内容为(70H)。

3.18 借助本书中的指令表:表 3-3~表 3-7 对如下的指令代码(16 进制)进行手工反汇编。 FF C0 E0 E5 F0 F0 解:查表可知

FF MOV R7,A C0 E0 PUSH 0E0H E5 F0 MOV A,0F0H F0 MOVX @DPTR, A

第四章 MCS-51汇编语言程序设计

4.1 用于程序设计的语言分为哪几种?它们各有什么特点?

答:用于程序设计的语言基本上分为三种:机器语言、汇编语言和高级语言。

(1)机器语言:在单片机中,用二进制代码表示的指令、数字和符号简称为机器语言,直 接用机器语言编写的程序称为机器语言程序。用机器语言编写的程序,不易看懂,不便于记 忆,且容易出错。(2)汇编语言具有如下特点:A、汇编语言是面向机器的语言,程序设计 人员必须对 MCS----51 单片机的硬件有相当深入的了解。B、助记符指令和机器指令一一对

应,所以用汇编语言编写的程序效率高,占用的存储空间小,运行速度快,因此用汇编语言 能编写出最优化的程序。C、汇编语言程序能直接管理和控制硬件设备(功能部件),它能 处理中断,也能直接访问存储器及 I/O接口电路。(3)高级语言:高级语言不受具体机器的

限制,都是参照一些数学语言而设计的,使用了许多数学公式和数学计算上的习惯用语,非 常擅长于科学计算。计算机不能直接识别和执行高级语言,需要将其“翻译”成机器语言才 能识别和执行。 4.3 解释下列术语:“手工汇编”、“机器汇编”、“交叉汇编”以及“反汇编”。 答、手工汇编:通常把人工查表翻译指令的方法称为“手工汇编”。机器汇编:机器汇编实 际上是通过执行汇编程序来对源程序进行汇编的。交叉汇编:由于使用微型计算机完成了汇编,而汇编后得到的机器代码却是在另一台计算机(这里是单片机)上运行,称这种机器汇 编为“交叉汇编”。反汇编:有时,在分析现成产品的ROM/EPROM 中的程序时,要将二进

制数的机器代码语言程序翻译成汇编语言源程序,该过程称为反汇编。

4.4 下列程序段经汇编后,从 1000H开始的各有关存储单元的内容将是什么? ORG 1000H

TAB1 EQU 1234H TAB2 EQU 3000H DB “MAIN”

DW TAB1,TAB2,70H 答:(1000H)=‘M’(1001H)=‘A’(1002H)=‘I’(1003H)=‘N’(1004H)=34H (1005H)=12H (1006H)=00H (1007H)=30H (1008H)=70H (1009H)=00H 4.5 设计子程序时注意哪些问题? 答:在编写子程序时应注意以下问题:

(1)子程序的第一条指令的地址称为子程序的入口地址。该指令前必须有标号。 (2)主程序调用子程序,是通过主程序或调用程序中的调用指令来实现的。

(3)注意设置堆栈指针和现场保护,因调用子程序时,要把断点压入堆栈,子程序返回执 行 RET 指令时再把断点弹出堆栈送入 PC 指针,因此子程序结构中必须用堆栈。

(4) 子程序返回主程序时,最后一条指令必须是 RET 指令,它的功能是在执行调用指令时,

把自动压入堆栈中的断点地址弹出送入 PC 指针中,从而实现子程序返回主程序断点处继续

执行主程序。

(5)子程序可以嵌套,即主程序可以调用子程序,子程序又可以调用另外的子程序,通常 情况下可允许嵌套 8 层。

(6)在子程序调用时,还要注意参数传递的问题。

4.6 试编写1个程序,将内部 RAM中 45H单元的高 4 位清0,低 4 位置1。 解: MOV A,45H ANL A,#0FH ORL A,#0FH

4.7 已知程序执行前有 A=02H,SP=42H,(41H)=FFH,(42H)=FFH。下述程序执行后, POP DPH POP DPL

MOV DPTR,#3000H RL A MOV B,A

MOVC A,@A+DPTR PUSH A MOV A,B INC A

MOVC A,@A+DPTR PUSH A

ORG 3000H

DB 10H,80H,30H,80H,50H,80H

A=80H SP=40H (41H)=50H (42H)=80H PC=8050H。

4.8 计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为 12MHZ)。 7B0F MOV R3,#15 ;1 个机器周期 7CFF DL1: MOV R4,#255 ;1个机器周期 8B90 DL2: MOV P1,R3 ;2个机器周期 DC DJNZ R4,DL2 ;2 个机器周期 DB DJNZ R3,DL ;2个机器周期 22 RET ;2 个机器周期 解:程序执行的时间为 15.346μs。 4.9 假定 A=83H,(R0)=17H,(17H)=34H,执行以下指令: ANL A,#17H ORL 17H,A XRL A,@R0 CPL A

后,A的内容为(0CBH)

4.10 试编写程序,查找在内部 RAM的 30H~50H单元中是否有 0AAH这一数据。若有,则

将 51H单元置为“01H”;若未找到,则将 51H单元置为“00H”。 ORG 0000H MOV R0,#30H MOV R2,#21H