16 32位微机原理汇编语言及接口技术课后习题答案.docx
- 文档编号:24630038
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:71
- 大小:38.49KB
16 32位微机原理汇编语言及接口技术课后习题答案.docx
《16 32位微机原理汇编语言及接口技术课后习题答案.docx》由会员分享,可在线阅读,更多相关《16 32位微机原理汇编语言及接口技术课后习题答案.docx(71页珍藏版)》请在冰豆网上搜索。
1632位微机原理汇编语言及接口技术课后习题答案
1
第一章
1.1解:
五代,详细见书
1.2解:
微型计算机:
以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件
——控制器和运算器的微处理器为核心,所构造出的计算机系统。
PC机:
PC(PersonalComputer)机就是面向个人单独使用的一类微机。
单片机:
用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要
部件,如:
ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换
电路等。
数字信号处理器DSP:
主要面向大流量数字信号的实时处理,在宿主系统中充当数据
处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用
1.3解:
微机主要有存储器、I/O设备和I/O接口、CPU、系统总线、操作系统和应用软件组
成,各部分功能如下:
CPU:
统一协调和控制系统中的各个部件
系统总线:
传送信息
存储器:
存放程序和数据
I/O设备:
实现微机的输入输出功能
I/O接口:
I/O设备与CPU的桥梁
操作系统:
管理系统所有的软硬件资源
1.4解:
系统总线:
传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交
换。
好处:
组态灵活、扩展方便
三组信号线:
数据总线、地址总线和控制总线。
其使用特点是:
在某一时刻,只能由一个总线主控设备来控制系统总线,只能有一
个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。
1.5解:
(1)用于数值计算、数据处理及信息管理方向。
采用通用微机,要求有较快的工作
速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友
好的操作界面和简便快捷的维护、扩充手段。
(2)用于过程控制及嵌人应用方向。
采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,
要求其实时性要好、强调其体积要小、便携式应用强调其省电。
1.6解:
2
1.7解:
I/O通道:
位于CPU和设备控制器之间,其目的是承担一些原来由CPU处理的I/O任
务,从而把CPU从繁杂的I/O任务中解脱出来。
由10根信号线组成(A9-A0)。
1.8解:
BIOS:
基本输入输出系统。
主要功能:
用来驱动和管理诸如键盘、显示器、打印机、磁盘、时钟、串行通信接
口等基本的输入输出设备
1.9解:
基本RAM区:
640KB
保留RAM区:
128KB
扩展ROM区:
128KB
基本ROM区:
128KB
1.10解:
(1)、数—用来直接表征量的大小,包括:
定点数、浮点数。
(2)、码—用来指代某个事物或事物的某种状态属性,包括:
二进制、八进制、十
进制、十六进制。
区别:
使用场合不同,详见P16.
1.11解:
(1)
3
102
1016
174.66)(10101110.10101)
174.66)(AE.A8)
=
=
(
(
(2)
210
216
100011101011.01011)(2283.34375)
100011101011.01011)(8EB.58)
=
=
(
(
(3)
162
1610
F18A6.6)(11110001100010100110.0110)
F18A6.6)(989350.375)
=
=
(
(
1.12解:
原码反码补码
+3700100101/25H00100101/25H00100101/25H
-3710100101/A5H11011010/DAH11011011/DBH
1.13解:
+37-37
16位32位16位32位
0025H00000025HFF5BHFFFFFF5BH
1.14解:
无符号数:
70D
补码有符号数:
70D
BCD码:
46D
ASCII:
F
1.15解:
1)、相加后若出现和大于9,则将和减去10后再向高位进1
2)、若出现组间进位,则将低位加6
1.16解:
详见课本16页。
1.17解:
C3402000
1.18解:
5050H
十进制值5080
二进制十六进制二进制十六进制
4
00110010B32H01010000B50H
1.19解:
D:
44H
d:
64H
CR:
0DH
LF:
0AH
0:
30H
SP:
20H
NUL:
00H
1.20解:
国标码:
3650H
机内码:
B6B0H
第二章
2.1
算术逻辑单元ALU、寄存器组和控制器;
总线接口单元BIU:
管理8088与系统总线的接口负责cpu对接口和外设进行访问
执行单元EU:
负责指令译码、执行和数据运算;
8位cpu在指令译码前必须等待取指令操作的完成,8088中需要译码的指令已经取到了指
令队列,不需要等待取指令。
而取指令是cpu最为频繁的操作,因此8088的结构和操作
方式节省了大量等待时间,比8位cpu节省了时间,提高了性能。
2.2
8个8位寄存器:
AH、AL、BH、BL、CH、CL、DH、DL;
8个16位寄存器:
累加器AX、基址寄存器BX、计数器CX、数据寄存器DX、源地址寄存
器SI、目的地址寄存器DI、基址指针BP、堆栈指针SP。
2.3
标志用于反映指令执行结果或者控制指令执行形式。
状态标志用于记录程序运行结果的状态信息;控制标志用于控制指令执行的形式。
2.4
例:
有运算:
3AH+7CH=B6H
作为无符号数运算,没有进位,CF=0;
作为有符号数运算,结果超出范围,OF=1.
2.5
8088中每个存储单元有唯一的20位地址,称为物理地址。
处理器通过总线存取存储器数
据时,采用这个物理地址。
在用户编程过程中采用的“段地址:
偏移地址”的形式称为逻辑地址。
将逻辑地址中的段地址左移4位,加上偏移地址就得到物理地址。
1MB最多能分成65536个逻辑段。
5
2.6
代码段:
存放程序的指令序列;
堆栈段:
确定堆栈所在的主存储区;
数据段:
存放当前运行程序的数据;
附加段:
附加数据段,用于数据保存。
另外串操作指令将其作为目的操作数的存放区。
2.7
8088的存储空间分段管理,程序设计时采用逻辑地址。
由于段地址在默认的或指定的段
寄存器中,所以只需要偏移地址,称为有效地址EA.
操作数在主存中有以下几种寻址方式:
直接寻址、寄存器间接寻址、寄存器相对寻址、基
址变址寻址、相对基址变址寻址。
2.8
(1)立即数寻址ax:
1200H
(2)寄存器寻址ax:
0100H
(3)存储器直接寻址ax:
4C2AH
(4)寄存器间接寻址ax:
3412H
(5)寄存器间接寻址ax:
4C2AH
(6)基址变址寻址ax:
7856H
(7)相对基址变址寻址ax:
65B7H
2.9
(1)cx为字寄存器,dl为字节寄存器,类型不匹配。
(2)mov指令的目的操作数只能是寄存器或者主存单元,ip是指针。
(3)不允许立即数到段寄存器的传送。
(4)不允许段寄存器之间的直接传送。
(5)数据溢出。
(6)sp不能用于寄存器间接寻址。
(7)格式不对。
应为:
movax,[bx+di]
(8)mov指令的操作数不能是立即数。
2.10
(1)bx得到table的偏移地址,bx=200H.
(2)将立即数8送到al。
(3)换码,al=12H.
2.11
(1)al=89H
(2)al=12H,cf=1,zf=0,sf=0,of=1,pf=1
(3)al=0AFH,cf=0,zf=0,sf=1,of=0,pf=1
(4)al=0AFH,cf=1,zf=0,sf=1,of=1,pf=1
(5)al=0,cf=0,zf=1,sf=0,of=0,pf=1
(6)al=0FFH,cf=0,zf=0,sf=1,of=0,pf=1
6
(7)al=0,cf=0,zf=1,sf=0,of=0,pf=1
2.12
(1)adddx,bx
(2)addal,[bx+si]
(3)addwordptr[bx+0B2H],cx
(4)addwordptr[0520H],3412H
(5)addal,0A0H
2.13
运算公式:
(V−Z−X*Y+540)/X。
商存储在ax,余数存储在dx。
2.14
(1)ax=1470H
(2)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0
(3)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0
(4)ax=0,cf=0,of=0,sf=0,zf=1,pf=1
(5)ax=0FFFFH,cf=0,of=0,sf=0,zf=1,pf=1
(6)ax=0FFFFH,cf=0,of=0,sf=1,zf=0,pf=1
2.15
相对寻址方式、直接寻址方式、间接寻址方式。
2.16
(1)1256H
(2)3280H
2.17
(1)ax=1E1EH
(2)al的D0、D7位不全为0
(3)cx<64H
2.18
执行65536次。
2.19
功能:
将数组中每个字元素相加,结果存储于total。
2.20
(1)leasi,string
Movdh,[si]
Movdl,[si+5]
(2)movaxwordptrbuffer1
Subaxwordptrbuffer2
Movdxwordptrbuffer1+2
Sbbdxwordptrbuffer2+2
7
(3)testdx,0F000H
jzeven
even:
movax,0
(4)movcx,4
again:
sardx,1
rcrax,1
loopagain
(5)movcx,100
movsi,0
again:
moval,0FFH
addal,array[si]
movarray[si],al
incsi
loopagain
2.21
Htoascproc
Movbl,al
Moval,ah
Movbh,10
Mulbh
Andax,00FFH
Addal,bl
Htoend:
ret
Htoascendp
2.22
计算机系统利用中断为用户提供硬件设备驱动程序。
在IBM-PC系列微机中,基本输入输
出系统ROM-BIOS和DOS都提供了丰富的中断服务程序,称为系统功能调用。
调用步骤
(1)AH中设置系统功能调用号
(2)在指定寄存器中设置入口参数
(3)使用中断调用指令执行功能调用
(4)根据出口参数分析调用情况
2.23
Htoascproc
Andal,0FH
Addal,90H
Daa
Adcal,40H
Daa
8
Movah,02H
Movdl,al
Int21H
Ret
Htoascendp
2.24
Numoutproc
Xorah,ah
Aam
Addax,3030H
Movdl,ah
Movah,02H
Int21H
Movdl,al
Movah,02H
Int31H
Ret
Numoutendp
2.25
Msgkeydb”inputnumber0-9”,”$”
Msgwrgdb”error”,”$”
Movah,09H
Movdx,offsetmsgkey
Int21H
Again:
movah,01H
Int21H
Cmpal,30H
Jbdisp
Cmpal,39H
Jadisp
Movdl,al
Movah,02H
Int21H
Jmpdone
Disp:
movdx,offsetmsgwrg
Movah,09H
Int21H
Jmpagain
9
Done:
movah,02H
Movdl,al
Int21H
第3章
3.1解:
汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指
令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易
创建代码序列短小、运行快速的可执行程序
3.2解:
(1)完整的汇编语言源程序由段组成
(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与
段之间的顺序可随意排列
(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序
只有一个起始点
(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任
一段内
(5)通常,程序还需要一个堆栈段
3.3解:
存储模式特点
TINYCOM类型程序,只有一个小于64KB的逻辑段(MASM6.x支持)
SMALL小应用程序,只有一个代码段和一个数据段(含堆栈段),每段不大于64KB
COMPACT代码少、数据多的程序,只有一个代码段,但有多个数据段
MEDIUM代码多、数据少的程序,可有多个代码段,只有一个数据段
LARGE大应用程序,可有多个代码段和多个数据段(静态数据小于64KB)
HUGE更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制)
FLAT32位应用程序,运行在32位80x86CPU和Windows9x或NT环境
3.4解:
10
开始位置:
用标号指明
返回DOS:
利用DOS功能调用的4CH子功能来实现
汇编停止:
执行到一条END伪指令时,停止汇编
3.5解:
段定位、段组合和段类型。
3.6解:
stacksegmentstack
db1024(0)
stackends
datasegment
stringdb'Hello,Assembly!
',0dH,0aH,‘$’
dataends
codesegment'code'
assumecs:
code,ds:
data,ss:
stack
start:
movdx,offsetstring
movah,9
int21h
codeends
endstart
3.7解:
(1).EXE程序
程序可以有多个代码段和多个数据段,程序长度可以超过64KB
通常生成EXE结构的可执行程序
(2).COM程序
只有一个逻辑段,程序长度不超过64KB
需要满足一定条件才能生成COM结构的可执行程序(MASM6.x需要采用TINY模式)
3.8解:
符号定义伪指令有“等价EQU”和“等号=”:
符号名EQU数值表达式
符号名EQU<字符串>
符号名=数值表达式
EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。
例如:
X=7;等效于:
Xequ7
X=X+5;“XEQUX+5”是错误的
3.9解:
(1)al=67h
(2)ax=133h,dx=4h
(3)ax=0230h
(4)al=41h
11
(4)ax=7654h
3.10解:
(1)
41
h
4
2
h
4
3
h
1
0
1
0
h
45h46h-1?
444-1?
444-1?
444
(2)
10h00h0fbh0ffh?
?
?
?
?
?
3.11解:
.data
my1bdb'PersonalComputer'
my2bdb20
my3bdb14h
my4bdb00010100b
my5wdw20dup(?
)
my6c=100
my7c=<'PersonalComputer'>
3.12解:
利用定位伪指令控制,如org,even,align
3.13解:
包括逻辑地址和类型两种属性。
3.14解:
;数据段
org100h
varwdw1234h,5678h
varbdb3,4
varddd12345678h
buffdd10dup(?
)
messdb'Hello'
;代码段
movax,offsetvarb+offsetmess
movax,typebuff+typemess+typevard
movax,sizeofvarw+sizeofbuff+sizeofmess
movax,lengthofvarw+lengthofvard
3.15解:
(1)1000超过一个字节所能表达的最大整数
(2)SI应为偶数
(3)两个内存单元不能直接运算
12
(4)应改为[al+1]
(5)条件转移指令后面应接标号,而不是变量
3.16解:
movah,1;只允许输入小写字母
int21h
subal,20h;转换为大写字母
movdl,al
movah,2
int21h;显示
3.17解:
movbx,offsetLEDtable
moval,lednum
xlat
3.18解:
movax,bufX
cmpax,bufY
jaedone
movax,bufY
done:
movbufZ,ax
3.19解:
.modelsmall
.stack
.data
bufXdw-7
signXdb?
.code
.startup
cmpbufX,0;testbufX,80h
jlnext;jnznext
movsignX,0
jmpdone
next:
movsignX,-1
done:
.exit0
end
3.20解:
movdl,’2’
movax,bufX
cmpax,bufY
jenext1
13
decdl
next1:
cmpax,bufZ
jenext2
decdl
next2:
movah,2
int21h
3.21解:
;代码段
moval,number
movbx,0;BX←记录为1的位数
restart:
cmpal,0;AL=0结束
jzdone
again:
shral,1;最低位右移进入CF
jcnext;为1,转移
incbx;不为1,继续
jmpagain
next:
pushax
pushbx
shlbx,1;位数乘以2(偏移地址要用2个字节单元)
jmpaddrs[bx];间接转移:
IP←[table+BX]
;以下是各个处理程序段
fun0:
movdl,'0'
jmpdisp
fun1:
movdl,'1'
jmpdisp
fun2:
movdl,'2'
jmpdisp
fun3:
movdl,'3'
jmpdisp
fun4:
movdl,'4'
jmpdisp
fun5:
movdl,'5'
jmpdisp
fun6:
movdl,'6'
jmpdisp
fun7:
movdl,'7'
jmpdisp
;
disp:
movah,2;显示一个字符
int21h
popbx
popax
jmprestart
14
done:
…
3.22编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10
个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。
;wjxt322.asm
.modelsmall
.stack
.data
b_datadb12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;原始数据
numequ10;数据个数
sumdb?
;预留结果单元
.code
.startup
xorsi,si;位移量清零
xoral,al;取第一个数
movcx,num;累加次数
again:
addal,b_data[si];累加
incsi;指向下一个数
loopagain;如未完,继续累加
movsum,al;完了,存结果
.exit0
end
3.23求主存0040h:
0开始的一个64KB物理段中共有多少个空格?
;wjxt323.asm
.modelsmall
.code
start:
movax,0040h;送段地址
movds,ax
movsi,0;偏移地址
movcx,si;计数(循环次数)
xorax,ax;空格计数器清零
again:
cmpbyteptr[si],20h;与空格的ASCII码比较
jnenext;不是空格,转
incax;是空格,空格数加1
next:
incsi;修改地址指针
loopagain;cx=cx-1,如cx=0退出循环
.exit0
endstart
3.24编写计算100个16位正整数之和的程序。
如果和不超过16位字的范围(65535),
则保存其和到wordsum,如超过则显示‘overflow’。
答:
;数据段
15
countequ100
parraydwcountdup(?
);假设有100个数据
wordsumdw0
msgdb‘overflow’,’$’
;代码段
movcx,count
movax,0
movbx,offsetparray
again:
addax,[bx]
jncnext
movdx,offsetmsg
movah,9
int21h;显示溢出信息
jmpdone;然后,跳出循环体
next:
addbx,2
loopagain
movwordsum,ax
done:
…
3.25编程把—个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。
转
换算法可以是:
用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;
依次用余数除以l00、10和l,得到“百位”、“十位”和“个位”。
;wjxt325.asm
.modelsmall
.stack256
.data
arraydw?
;源字数据
dbcddb5dup(?
);五位bcd结果,高对高低对低
.code
.startup
movdx,array;取源数据(余数)
movbx,10000;除数
movcx,10;除数系数
movsi,4;目的数据高位位移量
again:
movax,dx;dx.ax中存放被除数
movdx,0
divbx;除于bx,商ax,余数dx
movdbcd[si],al;商<10,存结果
pushdx;暂存余数
movax,bx;除数除于10
movdx,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 16 32位微机原理汇编语言及接口技术课后习题答案 32 微机 原理 汇编语言 接口 技术 课后 习题 答案