-
D2: DJNZ R6,D2
DJNZ R7,D1
RET
;指令执行 1 次为 2μs,总计 125 ×2=250μs
;指令执行时间 2μs,本循环体执行 200 次 ;指令执行时间 2μs
可对程序做如下修
改:
D50ms: D1: D2:
ORG MOV MOV
0100H
125 改为 ;将原来的立即数 123
;增加的指令
R7, #200 R6, #123
DJNZ R6, D2 NOP DJNZ R7, D1 RET
程序修改后的延时时间为: 1+(1+123*2+1+2)*200+2=50003μs=50.003ms
9. 借助表 3-2 ,对如下指令代码(十六进制)进行手工反汇编。
FFH,C0H,E0H, E5H,F0H,F0H
答:
MOV
R7, A
PUSH Acc MOV
A, B
MOVX @DPTR,A
五、简答
1. 说明伪指令的作用。“伪”的含义是什么?常用伪指令有哪些?其功能如何 ?
答:伪指令是程序员发给汇编程序的命令,只有在汇编前的源程序中才有伪指令,即在汇编过程中的用来控制汇编过程的命令。所谓“伪”是体现在汇编后,伪指令没有相应的机器代码产生。常用伪指令及功能如下:
--
-
ORG(ORiGin)汇编起始地址命令; END(ENDof assembly) 汇编终止命令; EQU(EQUate)标号赋值命令; DB(Define Byte )定义数据字节命令; DW( Define
Word)定义数据字命令;DS(Define Storage )定义存储区命令; BIT 位定义命令 2. 解释下列术语:
手工汇编、机器汇编、反汇编
答:
手工汇编:通过查指令的机器代码表 (表 3-2 ),逐个把助记符指令 “翻译”成
机器代码,再进行调试和运行。这种人工查表“翻译”指令的方法称为“手工汇编”。
机器汇编:借助于微型计算机上的软件 ( 汇编程序 ) 来代替手工汇编。通过在
微机上运行汇编程序,把汇编语言源程序翻译成机器代码。
反汇编:将二进制的机器码程序翻译成汇编语言源程序的过程称为“反汇编”。 3. 设计子程序时应注意哪些问题?
答:编写子程序时应注意以下问题:
子程序的第一条指令前必须有标号。
主程序调用子程序,有如下两条子程序调用指令:
① 绝对调用指令 ACALL addr11。被调用的子程序的首地址与绝对调用指令的下
一条指令的高 5 位地址相同,即只能在同一个 2KB区内。
② 长调用指令 LCALL addr16。addr16 为直接调用的目的地址,被调用的子程序
可放置在 64KB程序存储器区的任意位置。
子程序结构中必须用到堆栈,用来保护断点和现场保护。
子程序返回时,必须RET指令结束。
以
子程序可以嵌套,但要注意堆栈的冲突。
MOV A,@R0)中, 4. 为什么对基8051 子系列单片机,其寄存器间接寻址方式
本型的 (例如 R0 R1的内容 规R0 R1 的内容不能超7FH?而对增强型8052 子系列单片机,
或 的 定 或 过
就不受限? 制
--
-
答:基本型的 8051 子系列单片机,由于其片内 RAM的地址范围为 00H~7FH,而 80H~ FFH 为特殊功能寄存器区, 而对特殊功能寄存器寻址, 只能使用直接寻址方式。 对片内 RAM寻址,当使用寄存器间接寻址是采用 R0或 R1 作为间接寻址的,因此 R0或 R1的内
容不能超过 7FH。
增强型的 8052 子系列单片机,片内 RAM的地址范围为 00H~ FFH,因此作为间接
寻址寄存器的 R0或 R1的内容就不受限制。
第 4 章 思考题及习题 4 参考答案
一、填空
1.外部中断 1 的中断入口地址为
答: 0013H;001BH
2.若( IP )=00010100B,则优先级最高者为
答:外部中断 1,定时器 T1
3. AT89S52 单片机响应中断后,产生长调用指令 LCALL,执行该指令的过程包括:首先
把
的内容压入堆栈,以进行断点保护,然后把长调用指令的 址送入 ,使程 序执行转向
中的中断地址区。
16 位地
,最低者为
。
。定时器 T1 的中断入口地址为
。
答: PC、PC、程序存储器
4. AT89S52单片机复位后,中断优先级最高的中断源是
答:外部中断 0
5.当 AT89S52单片机响应中断后,必须用软件清除的中断请求标志是
答:串行中断、定时器 / 计数器 T2中断
。
。
--
-
二、单选
--