单片机原理及应用 - 基于 Proteus 单片机系统设计及应用
》
习题解答
本答案由 Elvis 提供,请到 413宿舍表达感谢
第2章 80C51 单片机的指令系统
1.简述下 列基本 概念。
答 指令: CPU根据人 的 意图来执 行某种 操作的 命令。
指令 系统: 一台计 算机所能 执行的 全部指 令集合。
机器 语言: 用二进 制编码表 示,计 算机能 直接识别 和执行 的语言 。 汇编 语言: 用助记 符、符号 和数字 来表示 指令的程 序语言 。
高级 语言:独立于 机器的,在 编程时 不需 要对机器 结构及 其指令 系统有深 入
了解的通 用性语 言。
2.什么是 计算机 的指令 和指令系 统 ? 答 见1题。
3.简述80C51 汇编 指 令格 式。 答
操作 码[ 目的 操纵 数 ][ ,源 操作数 ]
4.简述80C51 的寻 址 方式 和所 能涉 及的寻 址空间 。 答 立 即数寻 址:程 序 存储器 ROM。
直接 寻址: 片内 RAM低128B 和 特殊功 能寄存 器。 寄存 器寻址 : R0~R7,A,B, C, DPTR。
寄存 器间接 寻址: 片内 RAM低128B ,片外 RAM。 变址 寻址: 程序存 储器 64KB。 相对 寻址: 程序存 储器 256B 范围。
位寻 址:片 内 RAM的20H~2FH字节地 址,部 分特殊功 能寄存 器。 5.要访问 特殊功 能寄存 器和片外 数据存 储器, 应 采用哪 些寻址 方 式 ? 答 SFR :直接 寻址, 位 寻址;片 外RAM:寄存 器间接寻 址。
6. 在80C51 片内RAM中, 已 知(30H)=38H , (38H)=40H , (40H)=48H ,(48H)=90H 请分析下面 各是什 么指令 ,说明源 操作数 的寻址方 式及按 顺序执 行后的 结 果。
答
MOV A ,40H 直接 寻址 MOV R0,A 寄存器 寻址 MOV P1,#0F0H 立即数 寻址 MOV @R0,30H 直接寻 址 MOV DPTR,#3848H 立即数 寻址 MOV 40H ,38H
直接 寻址 MOV R0,30H 直接寻 址 MOV
P0,R0
寄存器 寻址
。 MOV MOV MOV
18H,#30H A,@R0 P2,P1
立即数 寻址 寄存器 间接寻 址 直接寻 址
均为 数据传 送指令 ,结果 ( 参见下 图) 为
RAM
30H 38H
38H 40H
40H 48H
48H 90H
, (48H)=90H
(18H)=30H ,(30H)=38H ,(38H)=40H (40H)=40H
R0=38H ,A=40H, P0=38H,P1=FOH,P2=FOH,DPTR=3848H 7.对80C51 片 内RAM高128B 的地址空 间寻址 要注 意什么? 答 用 直接寻 址,寄 存 器寻址, 位寻址 。 8.指出下 列指令 的本质 区别。 答
MOV MOV
A ,data A,#data
直接 寻址 立即数 寻址 直接寻 址 立即数 寻址
MOV data1 , data2 MOV 74H ,#78H
9.设R0的 内容为 32H,A的内容 为48H,片 内RAM的32H内容 为80H,40H的 内容为 08H。 请指出 在 执行 下列 程序段后 各单元 内容的 变化。
MOV MOV MOV MOV
解 (R0)=35H
(32H) =08H 答 答 答
A,@R0 @R0,40H 40H,A R0,#35H
;((R0))=80H
→ A
;(40H)=08H →(R0) ;(A)=80H →40H ; 35H →R0
(A) =80H (40H)=80H
10.如 何访问 SFR,可使 用哪些寻 址方式 ?
访问 SFR:直 接寻 址,位寻 址,寄 存器寻 址。 只能 采用寄 存器间 接寻址 ( 用 MOVX指令 ) 。
低128B:直 接寻址 ,位寻址 ,寄存 器间接 寻址,寄 存器寻 址(R0 ~R7) 。 高128B :直 接寻址 ,位寻址 ,寄存 器寻址 。11.如 何访问 片外RAM单元,可使 用哪些 寻址方 式 ? 12.如 何访问 片内RAM单元,可使 用哪些 寻址方 式 ?
13.如 何访问片 内外 程序 存储器, 采 用哪 些 寻址 方 式 ? 答
采用 变址寻 址 ( 用 MOVC指令 ) 。 14.说明 十进 制 调整的原 因 和 方法 。
答压缩BCD码在 进行 加法运算 时本应逢十进 一,而计算机只 将其当 作十六进 制 数处理, 此时得 到的结 果不正确 。用 DAA指令 调整( 加 06H, 60H, 66H) 。
15.说明 80C51 的 布尔处 理 机 功能 。
答
用来 进行位 操 作。
16.已 知 (A)=83H ,(R0)=17H ,(17H)=34H ,请指出在执行下 列 程序 段 后 A的 内 容。 解
ANL ORL XRL CPL
所以 解 (1)
(2)
A , #17H 17H, A A, @R0 A
; 83H∧ 17H=03H→ A ; 34H∨ 03H=37H→ 17H ; 03H异 或 37H=34H ; 34H求 反等于 CBH
(A)=CBH 使 ACC.0 置 1 SETB
ACC.0
或
SETB
EOH
清 除累加 器高 4位 CLR ACC.7 CLR ACC.6 CLR ACC.5 CLR ACC.4
17.使 用 位操 作 指令实现下 列逻辑操 作。 要 求不 得 改 变未涉 及位 的 内 容 。
(3) 清除 ACC.3 , ACC.4 , ACC.5 , ACC.6
CLR ACC.6 CLR ACC.5 CLR ACC.4 CLR ACC.3
18.编写 程序 , 将片 内 RAM R0~ R7的 内 容传送到 20H~ 27H单元。 解
MOV MOV MOV MOV
2EH, 2DH中 。
解
MOV MOV MOV
2FH , 20H 2EH, 21H 2DH, 22H 27H , R7 26H, R6 25H, R5 24H, R4
MOV 23H , R3 MOV 22H , R2 MOV 21H , R1 MOV 20H , R0
19.编写 程 序 , 将 片 内 RAM的 20H, 21H, 22H三 个连续单元 的 内 容 依 次 存 入 2FH,
20.编写程 序,进 行两个 16位 数 的减 法: 6F5DH一 13B4H,结果 存 入片内 RAM的 30H 和 31H单元, 30H存 差 的低 8位 。
解
CLR MOV
C
A, #5DH
;被 减数低 8位→ A
MOV MOV MOV MOV MOV
R2, #B4H 30H, A A, #6FH R2, #13H 31H, A
;减 数低 8位 → R2
;被 减数减 去减数 , 差→ A ;低 8位结果 → 30H ;被 减数高 8位→ A ;减 数高 8位 → R2
;被 减数减 去减数 , 差→ A ;高 8位结果 → 31H
SUBB A , R2
SUBB A , R2
21.编写 程 序 , 若 累 加 器 A的 内 容 分别 下 列 条 件时足满,则程 序转至 LABEL存 储 。设元单A中 有的 是 无符 号 数 。
解 (1) A
≥ 10
; (A) 与 10比较 ,不等转L1 ;相等转LABEL
; (A) 大 于 10,转LABEL
或 : CLR
JZ
C LABEL JNC LABEL
(2)A>10
CJNE A , #10 , L1 SJMP L3 L1: JNC L2: JMP
L2 LABEL
SJMP L4
; (A) 与 10比较 ,不等转L1 ;相等转L3
; (A) 大 于 10,转L2 ; (A) 小 于 10,转L4 ;无条件转LABEL
或 : CLR C
SUBB A , #0AH JNC LABEL SUBB A , #0AH
CJNE A , #10 , L1 L2: LJMP LABEL L1: JNC
L2
(3)A ≤ 10 CJNE
A , #10 , L1
; (A) 与 10比 较,不 等转L1 ;相 等转LABEL
; (A) 小 于 10,转LABEL
或 : CLR C
SUBB A , #0AH JC
LABEL JZ
LABEL
L2: LJMP LABEL L1: JC, L2
22.已 知 SP=25H, PC=2345H, (24H)=12H , (25H)=34H , (26H)=56H 。问此时执行 “ RET” 指令 后 , SP=?
解
PC=?
SP = 23H, PC=3412H
23. 已 知 SP=25H, PC=2345H ,标号 LABEL所 在 的 地 址为3456H 。问执 行长 指 用调令 “ LCALL
解
LABEL”后, 堆栈指针和 堆栈内 容发生 什 么变化 ?PC的 值等 于 什 么 ?
SP = 27H, (26H)=48H , (27H) = 23H, PC= 3456H
24.上题中 LCALL 能 否直 接换成 ACALL指 令,为什 么 ? 如 果使 用 ACALL指 令,则可
调用的地址 范围是 多少?
解
不能 。ACALL是短 转指令, 可调用 的地址 范围是 2 KB 。
25.阅 读下列 程序, 要求 : (1) 说明程序 功能;
(2) 试修改程 序,使 片内 RAM的内容 成 为如 图所 示的结果 。
MOV R2, #0AH MOV R0, #50H CLR A
LOOP:
MOV @R0,A INC R0
DJNZ R2 ,LOOP
DONE:
50H 51H 52H 53H 54H 55H 56H 57H 58H 59H
00H 01H 02H 03H 04H 05H 06H 07H 08H 09H
解
(1) 功能是 将片内 RAM中50H~59H单 元清零 。 (2)7A(OA) (7850) DA(FC)
(3) 在INC R0 后 添一句 INC A 。
26.设 (R0)=7EH ,(DPTR)=10FEH ,片 内RAM中7EH单 元的内 容为 0FFH,7F单元的 内容为38H,试 为下 列程 序注释其 运行结 果。
解
INC INC
@R0 R0
(7EH) =00H (R0) = 7FH (7FH)
=39H
(DPTR) =10FFH (DPTR) =1100H (DPTR) =1101H
INC @R0 INC DPTR INC DPTR INC DPTR
27.下 列程序 段经汇 编后 ,从 1000H 开始 的各有 关 存储单 元的内 容将是 什 么 ?
ORG 1000H
TAB1 TAB2
EQU EQU DB DW
解 (1000H)=53H
(1003H)=52H (1006H)=34H
1234H 3000H “ START”
TAB1 ,TAB2,70H (1001H)=54H (1004H)=54H (1007H)=30H
(1002H)=41H (1005H)=12H (1008H)=00H
(1009H) =70H
28.阅 读下列 程序, 并要 求: (1) 说明程序 功能;
(2) 写出涉及 的寄存 器及 片内RAM单元( 如 图所示 ) 的最后 结果。
40 H
AFH
MOV MOV INC ADD INC R0 MOV CLR INC R0 MOV
解
@R0,A
;进位 位存入 43H
功能 :将 40H,41H单元中的 内容相 加结果 放在 42H单元, 进位放 在43H单 元,
@R0,A A
;结果 存入 42H单元 ;清 A
;进位 位存入 A
R0,#40H A,@R0 R0 A,@R0
;40H→R0 ;98H→ A ;41H→ R0 ;98+(A)=47H → A
98H
ADDC A ,#0
(R0)=43H , (A) =1,(40H)=98H ,(41H) =AFH,(42H) =47H,(43H)=01H 。
29.同 上题要 求,程 序如 下:
61 H
CCH
MOV MOV MUL ADD MOV CLR MOV
解
A,61H B,#02H AB A,62H 63H,A A 64H,A
;F2H→ A ;02H→ B
;F2H×02H=E4H→ A ;积 的低 8位加上 CCH→ A ;结 果送 63H ;清 A
;积 的高 8位 加进位 位→ A ;结 果送 64H
F2H
ADDC A ,B
功能 :将 61H单元 的内容乘 2,低 8位再加 上62H单 元的内 容放人 63H,将结 果
(61H) =F2H (62H) =CCH (63H) =BOH (64H) =02H
; 待判断 的数→ A
的高 8位放在 64H单元。 (A) =02H (B) =01H 解
MOV
30.编 写程序 ,采用 “与 ”运 算, 判断8位二进 制 数是奇 数个1还是偶 数个1。
A ,#XXH
ANL A, #0FFH ;与 0FFH相 与 JB
P , REL ;是 奇数转REL ┇ ;是 偶数程 序顺序执行
REL :
┅ ┇
┇
31.编写 程序 , 采用 “或 ” 运 算, 使 任意 8位二进制 数的 符 号位 必为1。
解 MOV A , XXH
;取数据 → A ORL A, #80H ;使该数 符号位为1 MOV
XXH, A
;保存该 数据
32.请思 考 : 采 用 “ 异 或 ” 运 算 怎 样 可 使 一带符 号 数 的 符 号 位 改 变 ,变 ?怎 样可 使 该数 必 然为零 ?
解 (1) 符号位 改变 ,数据位 不变:
MOV A , XXH ;取 数据→ A XRL A, #80H ;异或 80H→ A
(2) 使 该数为零 :
MOV A, XXH ;该数→ A MOV R0, A ; 该数→ R0 XRL
A, R0
; 该数自身相异或 数 据 位 不
因篇幅问题不能全部显示,请点此查看更多更全内容