编,而汇编后得到的机器代码却是在另一台计算机(这里是单片机)上运行,称这种机器汇编为“交叉汇编”。反汇编:有时,在分析现成产品的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 LOOP: MOV A,@R0
CJNE A,#0AAH,NOT MOV 51H,#01H SJMP DEND NOT: INC R0
DJNZ R2,LOOP MOV 51H,#00H DEND: SJMP DEND
4.11 试编写程序,查找在内部RAM的20H~40H单元中出现“00H”这一数据的次数。并将查找到的结果存入41H单元。
ORG 0000H
MOV R0,#20H MOV R2,#21H
MOV 41H,#00H LOOP: MOV A,@R0
CJNE A,#00H,NOTE INC 41H NOTE: INC R0
DJNZ R2,LOOP END
4.12 若SP=60H,标号LABEL所在的地址为3456H。LCALL指令的地址为2000H,执行如下指令: 2000H LCALL LABEL后,堆栈指针SP和堆栈内容发生了什么变化?PC的值等于什么?如果将指令LCALL直接换成ACLAA是否可以?如果换成ACALL指令,可调用的地址范围是什么?
答:堆栈指针SP的内容为62H,堆栈内容(61H)=03H,(62H)=20H;PC值为3456H,不能将LCALL换为ACALL,因为LCALL可调用64KB范围内的子程序,而ACALL所调用的子程序地址必须与ACALL指令下一条指令的第一个字节在同一个2KB区内(即16位地址中的高5位地址相同。如果换为ACALL,可调用的地址范围为2002H-27FFH。
第五章 MCS-51的中断系统
5.1 什么是中断系统?
答:能够实现中断处理功能的部件称为中断系统。
5.3 什么是中断源?MCS-51有哪些中断源?各有什么特点?
答:产生中断的请求源称为中断源。MCS----51中断系统共有5个中断请求源:(1)外部中断请求0,中断请求标志为IE0。(2)外部中断请求1,中断请求标志为IE1。(3)定时器/计数器T0溢出中断请求,中断请求标志为TF0。(4)定时器/计数器T1溢出中断请求,中断请求标志为TF1。(5)串行口中断请求,中断请求标志为TI或RI。特点:2个外部中断源,3个内部中断源。
5.4外部中断1所对应的中断入口地址为(0013H)。 5.5下列说法错误的是:(A,B,C)
(A)各中断源发出的中断请求信号,都会标记在MCS-51系统的IE寄存器中。 (B)各中断源发出的中断请求信号,都会标记在MCS-51系统的TMOD寄存器中。 (C)各中断源发出的中断请求信号,都会标记在MCS-51系统的IP寄存器中。
(D)各中断源发出的中断请求信号,都会标记在MCS-51系统的TCON和SCON寄存器中。
5.6 MCS-51单片机响应外部中断的典型时间是多少?在哪些情况下,CPU将推迟对外部中断请求的响应?
答:典型时间是3-8个机器周期。在下列三种情况下,CPU将推迟对外部中断请求的响应: (1)CPU正在处理同级的或更高级优先级的中断
(2)所查询的机器周期不是当前所正在执行指令的最后一个机器周期 (3)正在执行的指令是RETI或是访问IE或IP的指令。
5.7 中断查询确认后,在下列各种8031单片机运行情况中,能立即进行响应的是(D) (A)当前正在进行高优先级中断处理 (B)当前正在执行RETI指令
(C)当前指令是DIV指令,且正处于取指令的机器周期 (D)当前指令是MOV A,R3
5.8 8031单片机响应中断后,产生长调用指令LCALL,执行指令的过程包括:首先把(PC)的内容压入堆栈,以进行断点保护,然后把长调用指令的16位地址送(PC),使程序执行转向(响应中断请求的中断入口的地址)中的中断地址区。 5.9 编写出外部中断1为跳沿触发的中断初始化程序。
ORG 0000H
AJMP MAIN ORG 0013H AJMP PINT1 ORG 0100H MAIN: SETB IT1 SETB EX1 SETB EA HERE: AJMP HERE PINT1: RETI END
5.10 在MCS-51中,需要外加电路实现中断撤除的是(D) (A)定时中断
(B)脉冲方式的外部中断 (C)外部串行中断 (D)电平方式的外部中断
5.11 MCS-51有哪几种扩展外部中断源的方法?
答:扩展外部中断源的方法有:定时器/计数器作为外部中断源的使用方法;中断和查询结