当前位置:首页 > 单片机C51编程 - 习题答案 - - - Copy
3.9 习题
一、填空题
1.字节保存伪指令 DB 用于在单片机内存中保存数据表,只能对 程序存储器 进行操作。
2.在对特殊功能寄存器的位寻址中,可以直接采用 名称 来表示,也可以采用 寄存器符号加位序号 表示。
3.单片机的指令按照其对应的机器码的长度,可以分为 单字节指令 、 双字节指令 、和 三字节指令 。
4.多分支结构一般采用 JMP 来实现。 5.子程序执行完毕后,通过 RET 返回。 6.在51系列单片机的指令系统中,提供了如下两条循环转移指令 DJNZ Rn,LOOP 、和 DJNZ Direct,LOOP 。
二、选择题
1.下列指令哪个不可以用作分支结构( C )。
A.JB B.JC C.ADD D.JZ
2.寄存器寻址方式可以寻址那些(多选)( ABCD )。
A.通用寄存器R0~R7 B.累加器A C.寄存器AB D.数据指针DPTR
3.在下面程序运行后,RAM存储单元20H~24H中数值分别变为( A )。
01 02 03
ORG JMP ORG
0000H START 1000H A,#04H
;累加器A赋值 ;RAM的20H单元赋值 ;直接寻址整字节交换指令 ;寄存器R2赋值
;寄存器寻址整字节交换指令 ;保存数据05H到RAM的21H单元 ;RAM单元赋值 ;寄存器R0赋值
;寄存器间接寻址整字节交换指令 ;保存数据06H到RAM的22H单元 ;累加器A赋值 ;RAM单元赋值 ;寄存器R1赋值 ;半字节交换指令
;保存数据到RAM的23H单元,数据应该为0FH
04 START: MOV 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22
MOV 20H,#20H XCH A,20H
MOV R2,#05H XCH MOV MOV MOV XCH MOV MOV MOV MOV
A,R2 21H,A
10H,#06H R0,#10H A,@R0 22H,A
A,#00H 11H,#0FH R1,#11H
XCHD A,@R1 MOV MOV SWAP A MOV RET
23H,A
A,#0FH
;累加器A赋值
;累加器高低字节交换指令
;保存数据到RAM的23H单元,数据应该为F0H
24H,A
23 END
A.0x04H、0x05H、0x06H、0x0FH和0xF0H B.0x01H、0x05H、0x01H、0x0FH和0xF0H C.0x04H、0x05H、0x02H、0x0FH和0xF0H D.0x04H、0x05H、0x06H、0x0FH和0xFFH
4.在下面程序运行后,RAM存储单元20H中数值分别变为( A )。
01 02 03
ORG JMP ORG
0000H START 1000H A,#04H
;查表的元素编号,这里查找第5个数据 ;表的首地址
;(A)+DPTR确定地址,送入A,指令占用1个字节 ;存放结果,该指令占用2个字节 ; 该指令占用1个字节
04 START: MOV 05 06 07 08 09
MOV DPTR,#2000H MOVC
A,@A+DPTR
MOV 20H,A RET ORG DB DB DB END
2000H
11H,12H,13H,14H ;数据表 21H,22H,23H,24H 31H,32H,33H,34H
10 BIAO: 11 12 13
A.0x21
C.0x23 三、简答题
B.0x22 D.0x24
1.简述单片机各个寻址方式的区别。
答:立即寻址相当于直接给出操作数,此时的操作数称为立即数。立即数的前面采用标识符“#”来表示,是寻址指令中直接出现的数据。
直接寻址方式相当于将操作数存放的地址告诉指令,此时为了和立即寻址相区别,地址前没有标识符“#”。
寄存器寻址相当于告诉指令操作数所存放的寄存器,此时,寄存器中的内容作为操作数。 寄存器间接寻址相当于绕了更大的弯,此时数据存放在RAM中,而该RAM的地址放在寄存器中。这样,通过访问寄存器来获得RAM中操作数的寻址方式便是寄存器间接寻址。
变址寻址提供了16位地址的寻址能力,其采用基址寄存器加变址寄存器方式来寻址。其中,基址寄存器为DPTR或PC,变址寄存器为累加器A,用于存放地址偏移量。
相对寻址是根据指定地址的偏移量,然后从当前PC值跳转到偏移量所指向的地址的方式。这里地址偏移量为带符号的8位二进制数,其取值范围为-128~+127。因此,相对寻址可以寻址当前PC的-128~127之间的某段程序存储器。
位寻址是特别为位操作区域提供的寻址方式,在指令中直接给出位地址即可。
2.简述循环结构程序的构成。
答:一个典型的循环程序由4部分组成,即循环初始化部分、循环处理部分、循环控制部分和循环结束部分。下面分别进行介绍。
? 初始化部分:主要用于设置循环的次数、有关的工作单元清零、变量设置和地址指
针设置等循环初始参数。
? 循环处理部分:也称为循环体,这是循环结构的主要代码段,在程序运行时将重复
执行。
? 循环次数控制部分:主要用于控制循环的次数,防止出现死循环。循环次数控制部
分一般由两个单元组成,修改控制变量和判断循环结束。循环控制变量可以采用循环递减计数法,即每循环一次,控制变量减1,并判断是否为0,若不为0,则继续执行循环体程序,否则结束循环体的执行;也可以采用条件控制,即判断结束条件是否成立,如果不成立,则继续执行循环体,否则,结束循环。
? 结束部分:当循环处理部分执行完毕后,需要对计算结果进行处理和保存,已供后
面的程序使用。
3.简述Keil μVision3集成开发环境中使用单片机汇编语言的步骤。
答:主要包括创建项目、编辑源文件、编译项目和仿真调试几步,具体可以参阅书中例子。
四、编程题
1.假定一个十六进制数存放在20H单元,其值在00H~0FH之间,利用汇编语言,将其转换成ASCII码,并送入到21H单元中。
答:
ORG EQU EQU MOV ANL ADD MOVC MOV RET DB DB DB DB END
1000H
20H 21H A,HEX1
A,#00001111B A,#03H A,@A+PC HEX2,A
;赋值伪指令
HEX1: HEX2: HTOAS:
;变址调整
DATA:
30H,31H,32H,33H ;ASCII码表格
34H,35H,36H,37H 38H,39H,40H,41H 42H,43H,44H,45H
2.编写8位带符号整数除法的汇编子程序。
答:
FUDIV:
MOV ANL MOV JZ MOV CPL INC MOV MOV ANL MOV JZ MOV CPL INC
A,R1 A,#80H R4,A FUN2 A,R1 A A R1,A A,R2 A,#80H R5,A FDIV A,R2 A A
;存除数符号 ;正数则转向FDIV ;除数求补
;开始求除数符号
;存被除数的符号 ;正数则转向FUN2 ;被除数求补
;开始求被除数的符号
FUN1:
FUN2:
MOV MOV XRL MOV MOV MOV DIV MOV MOV MOV JZ MOV CPL INC MOV MOV JZ MOV CPL INC MOV RET
R2,A A,R4 A,R5 R5,A A,R1 B,R2 AB R1,A R2,B A,R5 FUN4 A,R1 A A R1,A A,R4 FRET A,R2 A A R2,A
;取被除数符号
;为正则转向FRET,即返回 ;为负,则余数求补
;存商 ;存余数 ;取商的符号 ;商为正则转向FUN4 ;商为负则求补
;存符号 ;求商
;求商的符号
FDIV:
FUN3:
FUN4:
FRET:
4.11 习题
一、填空题
1.在C51语言的程序中,注释一般采用 “//”符号 和 “/**/”符号 来实现。
2.字符char型变量的取值范围为 -128~127 。 3.“?”运算符是 三 目运算符。
4.在C51语言中,单目运算符为 左结合性 结合性,双目运算符为 左结合性 结合性,三目运算符为 右结合性 结合性。
二、选择题
1.以下哪个不是C51的关键字( D )。
A.if B.case C.return D.ch
2.以下哪个标识符不正确( B )。
A.coungt1 B.1ch C._tt D.f1_t1
3.以下哪个运算符的优先级最高( A )。
A.() B.+ C.&& D.%
4.下面这段程序的运行结果为( A )。
共分享92篇相关文档