第4章AT89S51汇编语言程序的设计与调试
参考答案
1.答:伪指令是程序员发给汇编程序的命令,只有在汇编前的源程序中才有伪指令,即在汇编过程中的用来控制汇编过程的命令。所谓“伪”是体现在汇编后,伪指令没有相应的机器代码产生。常用伪指令及其功能如下:
ORG(ORiGin)汇编起始地址命令;END(ENDofassembly)汇编终止命令;EQU(EQUate)标号赋值命令;DB(DefineByte)定义数据字节命令;DW(DefineWord)定义数据字命令;DS(DefineStorage)定义存储区命令;BIT位定义命令
2.?答:
手工汇编:通过查指令的机器代码表(表3-2),逐个把助记符指令“翻译”成机器代码,再进行调试和运行。这种人工查表“翻译”指令的方法称为“手工汇编”。
机器汇编:借助于微型计算机上的软件(汇编程序)来代替手工汇编。通过在微机上运行汇编程序,把汇编语言源程序翻译成机器代码。
反汇编:将二进制的机器码程序翻译成汇编语言源程序的过程称为“反汇编”。
3.答:从1000H开始的各有关存储单元的内容(16进制)如下:
4D41494E12343000
0070787FE4F6D8FD
75810702
4.在编写子程序时应注意以下问题:
(1)子程序的第一条指令前必须有标号。
(2)主程序调用子程序,有如下两条子程序调用指令:
①绝对调用指令ACALLaddr11。被调用的子程序的首地址与绝对调用指令的下一条指令的高5位地址相同,即只能在同一个2KB区内。
②长调用指令LCALLaddr16。addr16为直接调用的目的地址,被调用的子程序可放置在64KB程序存储器区的任意位置。
(3)子程序结构中必须用到堆栈,用来保护断点和现场保护。
(4)子程序返回时,必须以RET指令结束。
(5)子程序可以嵌套,但要注意堆栈的冲突。
5.答:参考程序如下:
MOV A,45H
ANL A,#0FH
ORL A,#0FH
MOV 45H,A
6.答:A=80H,SP=40H,(41H)=50H,(42H)=80H,PC=8050H
7.答:参考程序如下:
START: MOV R0,#30H
MOV R2,#20H
LOOP: MOV A,@R0
CJNE A,#0AAH,NEXT
MOV 51H,#01H
LJMP EXIT
NEXT: INC R0
DJNZ R2,LOOP
MOV 51H,#00H
EXIT: RET
8.答:参考程序如下:
START: MOV 41H,#0
MOV R0,#20H
MOV R2,#20H
LOOP: MOV A,@R0
JNZ NEXT
INC 41H
NEXT: INC R0
DJNZ R2,LOOP
RET
9.答:参考程序如下:
ORG 0100H
MOV R2,#20H 要比较的数据字节数
MOV A,#21H
MOV R1,A
DEC R2
MOV A,@R1
LOOP: MOV R3,A
DEC R1
CLR C
SUBB A,@R1
JNC LOOP1
MOV A,@R1
SJMP LOOP2
LOOP1: MOV A,R3
LOOP2: DJNZ R2,LOOP
MOV @R0,A
RET
10.答:
(1)SP=SP+1=61H (61H)=PC的低字节=03H
SP=SP+1=62H (62H)=PC的高字节=20H
(2)PC=3456H
(3)可以
(4)2KB=2048Byte
11.答:可对程序做如下修改:
ORG 0100H
DEL: MOV R7,#200
DEL1: MOV R6,#123 ;将原来的立即数125改为123
DEL2: DJNZ R6,DEL2
NOP ;增加的指令
DJNZ R7,DEL1
RET
程序修改后的延时时间为:1+(1+1232+1+2)200+2=50003us=50.003ms
·2·
·1·
|
|