MOVX @DPTR,A
7. 设内部RAM (30H)=60H, (60H)=10H, (10H)=20H, (R1)=22H,(P1)=0AH, 分析以下程序执行后(30H)=?, (60H)= ?, (10H)= ?,(A)= ?,(B)= ?,(P2)= ?每条指令的机器码为多少?
MOV R0, #30H MOV A, @R0 MOV R1, A MOV B, @R1 MOV @R1, P1 MOV P2, P1 MOV 10H, #90H
答: MOV R0, #30H ; (R0)= 30H , 78 30 MOV A, @R0 ; (A) =60H , E6 MOV R1, A ; (R1) =60H , F9 MOV B, @R1 ; (B) = 10H , 87 F0 MOV @R1, P1 ; (60H) =0AH , A7 90
MOV P2, P1 ; (P2) =0AH , 85 90 A0 MOV 10H, #90H ; (10H) =90H , 75 10 90
(30H)= 60H, (60H)= 0A H, (10H)= 90H,(A)= 60H,(B)= 10H,(P2)= 0AH
8. 设外部RAM (2030H)=0FH, 分析以下指令执行后(DPTR)=?, (30H)=?, (2030H)=?(A)=?每条指令的机器码为多少?
MOV DPTR, #2030H MOVX A, @DPTR MOV 30H, A MOV A, #3FH MOVX@DPTR, A 答:
MOV DPTR, #2030H ; (DPTR) = 2030H , 90 20 30
MOVX A, @DPTR ; (A) =0FH , E0
MOV 30H, A ; (30H) =0FH , F5 30 MOV A, #3FH ; (A) =3FH , 74 3F MOVX@DPTR, A ; (2030H)=3FH , F0
执行结果为: (DPTR)=2030H, (30H)=0FH, (2030H)=3FH ,(A)=3FH。
9、编写指令实现下列位操作。 (1)使累加器的最高2位清零; (2)屏蔽(清零)20H的高4位;
(3)将E0H的低4位取反,高4位不变; (4)将P0的低2位置1。
第 页 共 46 页
11
(5)将10H的内容取补后存放到20H 答:(1)CLR ACC.7 CLR ACC.6
(2) ANL 20H,#0FH (3) XRL E0H,#0FH (4)ORL P0,#03H (5) XRL 10H,#0FFH INC 10H MOV 20H,10H
10. 在外部程序存储器中, 从1020H单元开始依次存放0~9的平方值: 0、 1、 4、 9、 ?、81, 要求依据累加器A中的值(0~9)来查找所对应的平方值, 试设计程序实现。 答:MOV DPTR, #1020H MOVC A, @A+DPTR
11. 设(R0)=20H, (20H)=40H, (A)=58H, 则: 执行 XCH A, @R0 后 (A)=?, (20H)=? 若执行 XCHD A, @R0 后 (A) =?, (20H) =? 答:执行 XCH A, @R0 后 (A)=40H, (20H)=58H 若执行 XCHD A, @R0 后 (A) =50H, (20H) =48H 12、试编写程序序列,完成两个16位数的减法:(30H)(31H)-(10H)(11H) →(30H)(31H)。 答:CLR C
MOV A,31H SUBB A,11H MOV 31H,A MOV A,30H SUBB A,10H MOV 30H,A
13、试编写程序,将R0中的低4位数与R1中的高4位数合并成一个8位数,并将其存放在R0中。
答:MOV A,R0
ANL A,#0FH MOV B,A MOV A,R1 ANL A,#0F0H ORL A,B MOV R0,A
14. 设计双字节无符号数加法程序实现(R0 R1)+(R2 R3) → (R4 R5), R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节,假设其和不超过16位。
答:MOV A, R1
第 页 共 46 页
12
ADD A, R3 MOV R5, A MOV A, R0 ADDC A, R2 MOV R4, A
15. 设计双字节无符号数相减程序实现(R0 R1)-(R2 R3) → (R4 R5)。R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节, 答:
MOV A, R1
CLR C SUBB A, R3 MOV R5, A MOV A, R0 SUBB A, R2 MOV R4, A
17. 设2个BCD码数存在外部RAM的2000H和内部RAM的20H。设计程序实现2个BCD码相加,其结果的十位和个位送到外部 RAM的2000H单元, 结果的百位值送F0位。 答: MOV DPTR,#2000H MOVX A,@DPTR ADD A, 20H DA A MOVX @DPTR, A MOV F0H,CY
18. 设变量X存放在片内10H单元中, 函数Y存放在片内20H单元。 编写程序实现如下函数功能。
80H X>0 Y= 50 X=0 FFH X<0
答: MOV A, 10H ; 取出X送A
JZ COM ; 若X=0 则转移到COM JNB ACC.7, POSI ; 若X>0则转移到POSI MOV A, #0FFH ; 若X<0 则A=FFH SJMP COMP ; 转分支结构出口
COM: MOV A,# 50 ; X=0时的赋值
SJMP COMP ; ; 转分支结构出口 POSI: MOV A, #80H ; X>0 时A=80H
COMP: MOV 20H, A ; 存函数Y值
SJMP $ ; 结束
19. 利用位逻辑指令, 模拟下图硬件逻辑电路功能。试编写程序实现。
第 页 共 46 页
13
答:MOV CY,P1.0
ANL CY,P1.1 CPL CY MOV F0,CY MOV CY,P1.1 ORL CY,P1.2 ANL CY,F0 CPL CY MOV F0,CY
20.若(CY)=0,(P1)=10110111B,试指出执行下列程序段后,CY、P1口内容的变化情况。 MOV P1.2,C MOV C, P1.4 JBC P1.7 ,SS ORL C, P1.6
SS:CPL P1.3 ANL C, /P1.3 MOV P1.0,C 答:(CY)=0,(P1)=0011 1010B
第5章 思考题及习题参考答案
1、80C51单片机汇编语言有何特点?
答:优点;源程序结构紧凑、灵活,汇编成的目标程序效率高,具有占存储空间少、运行速度快、实时性强等优点。
缺点:由于它的是面向机器的语言,所以它缺乏通用性,编程复杂繁琐,但应用相当广泛。
2、利用80C51单片机汇编语言进行程序设计的步骤如何? 答:(1).需要对单片机应用系统预先完成的任务进入深入的分析,明确系统的设计任务、功能要求、技术指标。
(2).要对系统的硬件资源和人工作环境进行分析和熟悉.
(3).利用数学方法或数学模型来对其进行描述,从而把一个实际问题转化成由计算机进行处理的问题。
(4).对各种算法进行分析比较,并进行合理的优化。
第 页 共 46 页
14
3、常用的程序结构有哪几种?特点如何? 答:常用的程序结构有以下几种:
(1)顺序程序结构:顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序进行,直到某一条指令为止;比如数据传送与交换、查表程序和查表程序的设计等;在顺序结构中没有分支,也没有子程序,但它是组成复杂程序的基础和主干;
(2)分支程序结构:它的主要特点是程序执行流程中必然包含有条件判断指令,符合条件要求的和不符条件合要求的有不同的处理程序;
(3)循环程序结构 :它在本质上只是分支程序中的一个特殊形式,它由循环初始化、循环体、循环控制和结束部分构成;在循环次数已知情况下,采用计数循环程序,其特点是必须在初始部分设定计数的初始值,循环控制部分依据计数器的值决定循环次数;根据控制循环结束的条件,决定是否继续循环程序的执行。
(4)子程序:它的主要特点是,在执行过程中需要由其它的程序来调用,执行完后又需要把执行流程返回到调用该子程序的主程序。
4、子程序调用时,参数的传递方法有哪几种?
答:在80C51单片机中,子程序调用时,参数的传递方法由三种: (1)、利用累加器A或寄存器; (2)、利用存储器; (3)、利用堆栈。
5、什么是伪指令?常用的伪指令功能如何?
答:伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。常用的伪指令有: (1)起始地址设定伪指令ORG,该指令的功能是向汇编程序说明下面紧接的程序段或数据段存放的起始地址;
(2)汇编结束伪指令END,该指令的功能是汇编程序遇到END伪指令后立即结束汇编; (3)字节数据定义伪指令DB,该指令的功能是从标号指定的地址单元开始,在程序存储器中定义字节数据;
(4)字数据定义伪指令DW,该指令的功能是从标号指定的地址单元开始,在程序存储器中定义字数据;
(5)空间定义伪指令DS,该指令的功能是从标号指定的地址单元开始,在程序存储器中保留由表达式所指定的个数存储单元作为备用空间,并都填以零值;
(6)赋值伪指令EQU,该指令的功能是将表达式的值或特定的某个汇编符号定义为一个指定的符号名;
(7)位地址符号定义伪指令BIT,该指令的功能是将位地址赋给指定的符号名。
6:把外部RAM的2000-20FFH RAM空间置零 程序如下:
ORG 000H MOV R0,#00H
MOV DPTR,#2000H ;空间首地址送DPTR LOOP: MOV A,#00H
MOVX @DPTR,A ;清零 INC DPTR ;DPTR加1
第 页 共 46 页
15