微机原理和接口技术第四版课后习题复习资料解析Word文档格式.docx
《微机原理和接口技术第四版课后习题复习资料解析Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理和接口技术第四版课后习题复习资料解析Word文档格式.docx(52页珍藏版)》请在冰点文库上搜索。
人们采用便于记忆、并能描述指令功能的符号来表示机器指令操作码,该符号称为指令助记符。
汇编语言:
用助记符表示的指令以及使用它们编写程序的规则就形成汇编语言。
汇编语言程序:
用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序。
汇编程序:
汇编语言源程序要翻译成机器语言程序才可以由处理器执行。
这个翻译的过程称为“汇编”,完成汇编工作的程序就是汇编程序()。
〔习题1.8〕区别如下概念:
路径、绝对路径、相对路径、当前目录。
系统磁盘上存在某个可执行文件,但在环境输入其文件名却提示没有这个文件,是什么原因?
路径:
操作系统以目录形式管理磁盘上的文件,文件所在的分区和目录就是该文件的路径。
绝对路径:
从根目录到文件所在目录的完整路径称为“绝对路径”。
是保证文件唯一性的标示方法。
相对路径:
从系统当前目录到文件所在目录的路径称为相对路径。
当前目录:
用户当前所在的目录就是当前目录。
指明的路径不正确,或者执行了另外一个同名的文件。
〔习题1.10〕冯·
诺依曼计算机的基本设计思想是什么?
采用二进制形式表示数据和指令。
指令由操作码和地址码组成。
将程序和数据存放在存储器中,计算机在工作时从存储器取出指令加以执行,自动完成计算任务。
这就是“存储程序”和“程序控制”(简称存储程序控制)的概念。
指令的执行是顺序的,即一般按照指令在存储器中存放的顺序执行,程序分支由转移指令实现。
计算机由存储器、运算器、控制器、输入设备和输出设备五大基本部件组成,并规定了5部分的基本功能。
〔习题1.11〕计算机系统通常划分为哪几个层次?
普通计算机用户和软件开发人员对计算机系统的认识一样吗?
最上层是用户层。
第5层是高级语言层。
第4层是汇编语言层。
第3层是操作系统层。
第2层是机器语言层。
第1层是控制层。
第0层是数字电路层。
普通计算机用户和软件人员对计算机系统的认识并不一样。
普通计算机用户看到的计算机,也就是我们最熟悉的计算机,属于用户层,而软件人员看到的属于高级语言层或是汇编语言层。
第2章处理器结构
〔习题2.1〕简答题
①是算术逻辑运算单元,负责处理器所能进行的各种运算,主要是算术运算和逻辑运算。
②取指是指从主存取出指令代码通过总线传输到处理器内部指令寄存器的过程。
8086分成总线接口单元和指令执行单元,可以独立操作。
在执行单元执行一条指令的同时,总线接口单元可以读取下一条指令,等到执行时不需要进行取指了,所以称为预取。
③采用分离的结构,一个用做指令,一个用做数据。
④堆栈的存取原则是先进后出(也称为后进先出)操作方式存取数据。
⑤标志寄存器主要保存反映指令执行结果和控制指令执行形式的有关状态。
⑥执行了一条加法指令后,发现=1,表明运算结果为0。
⑦没有。
⑧汇编语言的标识符大小写不敏感,即表示字母大小写不同、但表示同一个符号。
⑨不会。
⑩指令的操作数需要通过存储器地址或地址,才能查找到数据本身,故称数据寻址方式。
〔习题2.3〕填空题
①32,,
②16
③段地址,偏移地址,,
④00100110,0
⑤73C00H,73800H
⑥,,,,,
⑦实地址,64
⑧,目标模块,
⑨立即数寻址、寄存器寻址和存储器寻址
⑩,
〔习题2.4〕处理器内部具有哪3个基本部分?
8086分为哪两大功能部件?
其各自的主要功能是什么?
处理器内部有、寄存器和指令处理三个基本单元。
8086有两大功能部件:
总线接口单元和执行单元。
总线接口单元:
管理着8086与系统总线的接口,负责处理器对存储器和外设进行访问。
8086所有对外操作必须通过和这些总线进行。
执行单元:
负责指令译码、数据运算和指令执行。
〔习题2.6〕
什么是标志?
什么是32处理器的状态标志、控制标志和系统标志?
说明状态标志在标志寄存器的位置和含义。
标志:
用于反映指令执行结果或控制指令执行形式的一个或多个二进制数位。
例如,有些指令执行后会影响有关标志位;
有些指令的执行要利用相关标志。
状态标志:
用来记录程序运行结果的状态信息。
控制标志:
标志,控制字符串操作的地址方向。
系统标志:
用于控制处理器执行指令的方式。
状态标志在标志寄存器中的位置和含义如下:
31
11
10
9
8
7
6
5
4
3
2
1
……
〔习题2.8〕什么是8086中的逻辑地址和物理地址?
逻辑地址如何转换成物理地址?
请将如下逻辑地址用物理地址表达(均为十六进制形式):
①∶0②40∶17③2000∶4500④B821∶4567
物理地址:
在处理器地址总线上输出的地址称为物理地址。
每个存储单元有一个唯一的物理地址。
逻辑地址:
在处理器内部、程序员编程时采用逻辑地址,采用“段地址:
偏移地址“形式。
某个存储单元可以有多个逻辑地址,即处于不同起点的逻辑段中,但其物理地址是唯一的。
逻辑地址转换成物理地址:
逻辑地址由处理器在输出之前转换为物理地址。
将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址。
①:
0=0H
②40H:
17H=00417H
③2000H:
4500H=24500H
④B821H:
4567H=777H
〔习题2.9〕32处理器有哪三类基本段,各是什么用途?
32处理器有代码段、数据段、堆栈段三类基本段。
代码段:
存放程序的指令代码。
程序的指令代码必须安排在代码段,否则将无法正常执行。
数据段:
存放当前运行程序所用的数据。
程序中的数据默认是存放在数据段,也可以存放在其他逻辑段中。
堆栈段:
主存中堆栈所在的区域。
程序使用的堆栈一定在堆栈段。
〔习题2.11〕什么是实地址方式、保护方式和虚拟8086方式?
它们分别使用什么存储模型?
实地址方式:
与8086具有相同的基本结构,只能寻址1物理存储器空间,逻辑段最大不超过64;
但可以使用32位寄存器、32位操作数和32位寻址方式;
相当于可以进行32位处理的快速8086。
实地址工作方式只能支持实地址存储模型。
保护方式:
具有强大的段页式存储管理和特权与保护能力,使用全部32条地址总线,可寻址4物理存储器。
保护方式通过描述符实现分段存储管理,每个逻辑段可达4。
处理器工作在保护方式时,可以使用平展或段式存储模型。
虚拟8086方式:
在保护方式下运行的类似实方式的运行环境,只能在1存储空间下使用“16位段”。
处理器工作在虚拟8086方式时,只能使用实地址存储模型。
〔习题2.12〕汇编语句有哪两种,每个语句由哪4个部分组成?
汇编语句有两种:
执行性语句(处理器指令)、说明性语句(伪指令)。
每个语句有:
标号、指令助记符、操作数或参数、注释4个部分组成。
〔习题2.16〕说明下列指令中源操作数的寻址方式?
假设是一个双字变量。
(1),1234h
(2)
(3)
(4),[]
(5),[1234h]
(6)[]
(7),[]
(8),[1234h]
(9)[]
(10),[*4]
①立即数
②直接
③寄存器
④寄存器间接
⑤寄存器相对
⑥寄存器相对
⑦基址变址
⑧相对基址变址
⑨相对基址变址
⑩带比例寻址
第3章数据处理
〔习题3.1〕简答题
(1)使用二进制8位表达无符号整数,257有对应的编码吗?
(2)字符“'
F'
”和数值46H作为指令的源操作数有区别吗?
(3)为什么可以把指令“,(34+67H)*3”中的数值表达式看成是常量?
(4)数值500,能够作为字节变量的初值吗?
(5)为什么说“”是一条错误的指令?
(6)都是获取偏移地址,为什么指令“,[]”正确,而指令“,[]”就错误?
(7),,和都是单操作数指令,这个操作数应该是源操作数还是目的操作数?
(8)大小写字母转换使用了什么规律?
(9)乘除法运算针对无符号数和有符号数,有两种不同的指令。
只有一种指令的加减法如何区别无符号数和有符号数运算?
(10)逻辑与运算为什么也称为逻辑乘?
①没有。
使用二进制8位表达无符号整数,257没有对应的编码。
②字符“'
”的码就是数值46H,所以没有区别。
③汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。
④不能。
数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。
⑤源、目标寄存器位数不同,不能用该指令进行数据交换。
⑥前者在指令执行时获得偏移地址,是正确的;
但后者的只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。
⑦,,和指令的操作数既是源操作数也是目的操作数。
⑧大小写字母转换利用它们的码相差20H。
⑨加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的和标志,可利用和进行区别。
⑩逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。
〔习题3.3〕填空题
(1)定义字节变量的伪指令助记符是,获取变量名所具有的偏移地址的操作符是。
(2)计算机中有一个“01100001”编码。
如果把它认为是无符号数,它是10进制数;
如果认为它是码,则表示真值;
又如果它是某个码,则代表字符。
(3)C语言用“\n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:
一个是回车,其码是,它将光标移动到当前所在行的首位;
另一个是换行,其码是,它将光标移到下一行。
(4)数据段有语句“H884399008843H”,代码段指令“,H8843”执行后,=。
(5)用定义的一个变量,它的类型是,用“”会得到数值为。
如果将其以字量使用,应该用说明。
(6)数据段有语句“1,2,3”,代码段指令“,2”执行后,=。
(7)例题3-9的定义如果是“1234567890”,则显示结果是。
(8)指令“,”和“,”执行后,=,==。
而指令“,0”执行后,=,和没有变化。
(9)例题3-15程序执行结束,变量内容是;
内容是。
(10)欲将内的无符号数除以16,使用指令“,”,其中后一个操作数是一个立即数。
①,
②97,61,小写字母a
③0(13),0(10)
④8843H
⑤,4,
⑥3
⑦78894111
⑧0,0,0
⑨65432H,83H
⑩4
〔习题3.4〕
下列十六进制数表示无符号整数,请转换为十进制形式的真值:
①②0H③5④
①255
②0
③94
④239
〔习题3.7〕
将下列十进制数用8位二进制补码表示:
①0②127③-127④-57
①00000000
②01111111
③10000001
④11000111
〔习题3.8〕
进行十六进制数据的加减运算,并说明是否有进位或借位:
①1234H+7802H
②F034H+50H
③C051H-1234H
④9876H-
①1234H+7802H=8A36H,无进位
②F034H+50H=44H,有进位
③C051H-1234H=1,无借位
④9876H-=9H,有借位
〔习题3.9〕
数码0~9、大写字母A~Z、小写字母a~z对应的码分别是多少?
码0和0分别对应什么字符?
数码0~9对应的码依次是30H~39H。
大写字母A~Z对应的码依次是:
41H~5。
小写字母a~z对应的码依次是:
61~7。
码0和0分别对应的是回车和换行字符。
〔习题3.10〕
设置一个数据段,按照如下要求定义变量或符号常量:
①1b为字符串变量:
②2b为用十进制数表示的字节变量:
20
③3b为用十六进制数表示的字节变量:
④4b为用二进制数表示的字节变量:
⑤5w为20个未赋值的字变量
⑥6c为100的常量
⑦7c表示字符串:
1b'
'
2b20
3b14h
4b00010100b
5w20(?
)
6c=100
7c<
>
〔习题3.16〕
使用若干指令实现交互指令“,[]”功能。
;
可以没有
[]
[]
〔习题3.17〕
假设当前=00120H,说明下面每条指令后,等于多少?
0f79h
=0012
=00126H
=00120H
〔习题3.19〕请分别用一条汇编语言指令完成如下功能:
(1)把寄存器和寄存器的内容相加,结果存入寄存器。
(2)用寄存器和的基址变址寻址方式把存储器的一个字节与寄存器的内容相加,并把结果送到中。
(3)用和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和寄存器的内容相加,并把结果送回存储器中。
(4)将32位变量与数3412H相加,并把结果送回该存储单元中。
(5)把数0A0H与寄存器的内容相加,并把结果送回中。
①
②,[]
③[0b2h]
④,3412h
⑤,0a0h
〔习题3.21〕
给出下列各条指令执行后值,以及、、、和的状态:
89h
9
0
89h;
=89H
;
=12H10011
9;
=000101
0;
=010101
=00H01001
〔习题3.28〕编程将一个压缩码变量(例如92H)转换为对应的码,然后调用子程序(在输入输出子程序库中)显示。
;
数据段
92h
代码段
4
30h
第4章汇编语言程序设计
〔习题4.1〕简答题
(1)是什么特点决定了目标地址的相对寻址方式应用最多?
(2)什么是奇偶校验?
(3)为什么判断无符号数大小和有符号大小的条件转移指令不同?
(4)双分支结构中两个分支体之间的指令有什么作用?
(5)为什么特别强调为子程序加上必要的注释?
(6)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题?
(7)参数传递的“传值”和“传址”有什么区别?
(8)语句和有什么区别?
(9)混合编程有什么优势?
(10)运行程序,有时为什么会提示某个文件不存在?
①当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址采用相对寻址可方便操作系统的灵活调度。
②数据通信时,数据的某一位用做传输数据的奇偶校验位,数据中包括校验位在内的“1”的个数恒为奇数,就是奇校验;
恒为偶数,就是偶校验。
③无符号数和有符号数的操作影响两组不同的标志状态位,故判断两个无符号数和有符号数的大小关系要利用不同的标志位组合,所以有对应的两组指令。
④双分支结构中两个分支体之间的指令,用于实现结束前一个分支回到共同的出口作用。
⑤完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。
⑥子程序保持堆栈平衡,才能保证执行指令时当前栈顶的内容是正确的返回地址。
主程序也要保持堆栈平衡,这样才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能就致使堆栈溢出。
⑦“传值”是传递参数的一个拷贝,被调用程序改变这个参数不影响调用程序;
“传址”时,被调用程序可能修改通过地址引用的变量内容。
⑧语句包含的是文本文件、是源程序文件的一部分;
语句包含的是子程序库文件。
⑨取长补短。
⑩程序在运行时需要加载其配套的动态链接库文件,当其没有被搜索到时就会提示不存在。
〔习题4.3〕填空题
(1)指令根据目标地址的转移范围和寻址方式,可以分成四种类型:
段内转移、,段内转移、和段间转移、,段间转移、。
(2)假设在平展存储模型下,=1256H,双字变量的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“”后=,执行指令“[]”后=。
(3)“,3721H”指令之后是指令,发生转移的条件是=,此时=。
(4)小写字母“e”是英文当中出现频率最高的字母。
如果某个英文文档利用例题4-11的异或方法进行简单加密,统计发现密文中字节数据“8”最多,你判断该程序采用的字节密码可能是。
(5)循环结构程序一般有三个部分组成,它们是,循环体和部分。
(6)例题4-14程序中的指令,如果用指令和指令替换,此时内容是。
(7)过程定义开始是“”语句,则过程定义结束的语句是。
宏定义开始是“”语句,则宏定义结束的语句是。
(8)利用堆栈传递子程序参数的方法是固定的,例如寻址堆栈段数据的寄存器是。
(9)汇编语言中,声明一个共用的变量应使用伪指令;
而使用外部变量要使用伪指令声明。
(10)调用函数时,用户在键盘上按下数字8,然后回车,则键盘缓冲区的内容依次是。
①相对寻址,间接寻址,直接寻址,间接寻址
②1256H,3280H
③3721H,1
④
⑤循环初始,循环控制
⑥1标号的地址
⑦,
⑧
⑩38H00
〔习题4.6〕
执行如下程序片断后,指令分别使得5个状态标志、、、和为0还是为1?
它会使得哪些条件转移指令指令的条件成立、发生转移?
20h
80h
=1=0=1=0=1
可以使得条件成立、发生转移的指令有:
〔习题4.9〕
指令将符号扩展到,即:
最高为0,则=0;
最高为1,则=。
请编程实现该指令功能。
〔解答1〕
8000h;
测试最高位
1;
最高位为0(=1),转移到标号1
0;
最高位为1,顺序执行:
设置=
无条件转移,跳过另一个分支
1:
最高位为0转移到此执行:
设置=0
:
〔解答2〕
使用移位指令更好。
1
31
〔习题4.11〕编写一个程序,先提示输入数字“:
0~9”,然后在下一行显示输入的数字,结束;
如果不是键入了0~9数字,就提示错误“!
”,继续等待输入数字。
(0~9):
0
0,0,'
!
:
提示输入数字
等待按键
'
0'
数字<
0?
9'
数字>
9?
〔习题4.12〕有一个首地址为的20个双字的数组,说明下列程序段的功能。
20
[]
求这20个双字的和,保存在变量,不关进心进位和溢出。
〔习题4.22〕编写一个子程序,它以二进制形式显示中32位数据,并设计一个主程序验证。
代码段,主程序
8F9800H
调用子程序
代码段,子程序
32位二进制数的输出
32;
要输出的字符个数
1;
循环左移一位
01h;
取最低位
30h;
转化成相应的码值
以二进制的形式显示
〔习题4.26〕
编制3个子程序把一个32位二进制数用8位十六进制形式在屏幕上显示出来,分别运用如下3种参数传递方法,并配合3个主程序验证它。
(1)采用寄存器传递这个32位二进制数
(2)采用变量传递这个32位二进制数
(3)采用堆栈方法传递这个32位二进制数
(1)
307281
'
H'
8;
8位
转换为码
2
7
2:
1
(2)
?
显示