微机原理与接口技术课后习题答案(郭兰英)
更新时间:2024-06-27 17:09:01 阅读量: 综合文库 文档下载
第一章
1.1 解:
五代,详细见书
1.2 解:
微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件——控制器和运算器的微处理器为核心,所构造出的计算机系统 。
PC机:PC(Personal Computer)机就是面向个人单独使用的一类微机 。
单片机:用于控制的微处理器芯片,内部除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 解:
1
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)
2
(174.66)10?(10101110.10101)2(174.66)10?(AE.A8)16
(2)
(100011101011.01011)2?(2283.34375)10(100011101011.01011)2?(8EB.58)16
(3)
(F18A6.6)16?(11110001100010100110.0110)2(F18A6.6)16?(989350.375)10
1.12 解:
原码 反码 补码 +37 00100101/25H 00100101/25H 00100101/25H -37 10100101/A5H 11011010/DAH 11011011/DBH
1.13 解: +37 -37 16位 00 25H 32位 00 00 00 25H 16位 FF 5BH 32位 FF FF FF 5BH
1.14 解:
无符号数:70D 补码有符号数:70D BCD码:46D ASCII:F
1.15 解:
1)、相加后若出现和大于9,则将和减去10后再向高位进1 2)、若出现组间进位,则将低位加6
1.16 解:
详见课本16页。
1.17 解:
C3 40 20 00
1.18 解: 50 50H 十进制值 50 二进制 十六进制 80 二进制 十六进制 3
1.19 解:
1.20 解:
0011 0010B 32H 0101 0000B 50H D:44H d:64H CR:0DH LF:0AH 0:30H SP:20H NUL:00H
国标码:36 50H 机内码:B6 B0H
第3章
3.2 解:
(1)完整的汇编语言源程序由段组成
(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列
(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点
(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内
(5)通常,程序还需要一个堆栈段 3.3 解: 存储模式 TINY SMALL COMPACT MEDIUM LARGE 特 点 COM类型程序,只有一个小于64KB的逻辑段(MASM 6.x支持) 小应用程序,只有一个代码段和一个数据段(含堆栈段),每段不大于64KB 代码少、数据多的程序,只有一个代码段,但有多个数据段 代码多、数据少的程序,可有多个代码段,只有一个数据段 大应用程序,可有多个代码段和多个数据段(静态数据小于64KB) 4
HUGE FLAT 更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制) 32位应用程序,运行在32位80x86CPU和Windows 9x或NT环境 3.4 解:
开始位置:用标号指明
返回DOS:利用DOS功能调用的4CH子功能来实现 汇编停止:执行到一条END伪指令时,停止汇编
3.5 解:
段定位、段组合和段类型。
3.6 解:
stack segment stack db 1024(0) stack ends
data segment
string db 'Hello,Assembly!',0dH,0aH,‘$’ data ends
code segment 'code'
assume cs:code,ds:data,ss:stack start: mov dx,offset string mov ah,9 int 21h code ends
end start
3.7 解:
(1). EXE程序
程序可以有多个代码段和多个数据段,程序长度可以超过64KB 通常生成EXE结构的可执行程序 (2). COM程序
只有一个逻辑段,程序长度不超过64KB
需要满足一定条件才能生成COM结构的可执行程序(MASM 6.x需要采用TINY模式)
3.8 解:
符号定义伪指令有“等价EQU”和“等号=”: 符号名 EQU 数值表达式 符号名 EQU <字符串> 符号名 = 数值表达式
EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。例如: X= 7 ;等效于:X equ 7 X= X+5 ;“X EQU X+5”是错误的
5
41h
3.9 解:
(1) al=67h
(2) ax=133h,dx=4h (3) ax=0230h (4) al=41h (4) ax=7654h
3.10 解: (1) 441145h 46h -1 ? 4 4 4 -1 ? 4 4 4 -1 230 0h h h (2) 10h 00h 0fbh 0ffh ? ? ? ? ? 3.11 解:.data
my1b db 'Personal Computer' my2b db 20 my3b db 14h
my4b db 00010100b my5w dw 20 dup(?) my6c = 100
my7c = <'Personal Computer'>
3.12 解:
利用定位伪指令控制,如org,even,align
3.13 解:
包括逻辑地址和类型两种属性。
3.14 解: ;数据段
org 100h
varw dw 1234h , 5678h varb db 3 , 4 vard dd 12345678h buff dd 10 dup(?) mess db 'Hello' ;代码段
mov ax , offset varb + offset mess
mov ax , type buff + type mess + type vard mov ax , sizeof varw+ sizeof buff+ sizeof mess
? 4 4 4 ? 6
mov ax , lengthof varw+ lengthof vard
3.15 解:
(1) 1000超过一个字节所能表达的最大整数 (2)SI应为偶数
(3)两个内存单元不能直接运算 (4)应改为[al+1]
(5)条件转移指令后面应接标号,而不是变量
3.16 解:
3.17 解:
3.18 解: done:
3.19 解: bufX signX next: done:
mov ah,1 ;只允许输入小写字母int 21h sub al,20h ;转换为大写字母 mov dl,al mov ah,2 int 21h ;显示 mov bx,offset LEDtable mov al,lednum xlat mov ax, bufX cmp ax, bufY jae done mov ax, bufY mov bufZ, ax .model small .stack .data dw -7 db ? .code .startup cmp bufX,0 ;test bufX,80h jl next ;jnz next mov signX,0 jmp done mov signX,-1 .exit 0 end
7
3.20 解:
next1:
next2:
3.21 解:
restart:
again:
next:
fun0:
fun1:
fun2:
fun3:
fun4:
fun5:
fun6:
fun7:
mov dl,’2’ mov ax,bufX cmp ax,bufY je next1 dec dl
cmp ax,bufZ je next2 dec dl mov ah,2 int 21h
;代码段
mov al,number mov bx,0 ;BX←记录为1的位数 cmp al,0 ;AL=0结束 jz done shr al,1 ;最低位右移进入CF jc next ;为1,转移 inc bx ;不为1,继续 jmp again push ax push bx shl bx,1 ;位数乘以2(偏移地址要用2个字节单元)jmp addrs[bx] ;间接转移:IP←[table+BX] ;以下是各个处理程序段 mov dl,'0' jmp disp mov dl,'1' jmp disp mov dl,'2' jmp disp mov dl,'3' jmp disp mov dl,'4' jmp disp mov dl,'5' jmp disp mov dl,'6' jmp disp mov dl,'7' jmp disp
8
; disp: mov ah,2 ;显示一个字符 int 21h pop bx pop ax jmp restart done: ?
3.22 编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。 ;wjxt322.asm .model small .stack .data b_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据 num equ 10 ;数据个数 sum db ? ;预留结果单元 .code .startup xor si, si ;位移量清零 xor al, al ;取第一个数 mov cx, num ;累加次数 again: add al, b_data[si] ;累加 inc si ;指向下一个数 loop again ;如未完,继续累加 mov sum, al ;完了,存结果 .exit 0 end
3.23 求主存0040h:0开始的一个64KB物理段中共有多少个空格? ; wjxt323.asm .model small .code start: mov ax,0040h ;送段地址 mov ds, ax mov si, 0 ;偏移地址 mov cx, si ;计数(循环次数) xor ax, ax ;空格计数器清零 again: cmp byte ptr [si], 20h ;与空格的ASCII码比较 jne next ;不是空格,转 inc ax ;是空格,空格数加1 next: inc si ;修改地址指针 loop again ;cx=cx-1,如cx=0 退出循环 .exit 0
9
end start
3.24 编写计算100个16位正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘overflow’。 答: ;数据段 count equ 100 parray dw count dup(?) ;假设有100个数据 wordsum dw 0 msg db ‘overflow’,’$’ ;代码段 mov cx,count mov ax,0 mov bx,offset parray again: add ax,[bx] jnc next mov dx,offset msg mov ah,9 int 21h ;显示溢出信息 jmp done ;然后,跳出循环体 next: add bx,2 loop again mov wordsum,ax done: ?
3.25 编程把—个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以l00、10和l,得到“百位”、“十位”和“个位”。 ;wjxt325.asm .model small .stack 256 .data array dw ? ;源字数据 dbcd db 5 dup(?) ;五位bcd结果,高对高低对低 .code .startup mov dx, array ;取源数据(余数) mov bx, 10000 ;除数 mov cx, 10 ;除数系数 mov si, 4 ;目的数据高位位移量 again: mov ax, dx ;dx.ax中存放被除数 mov dx, 0 div bx ;除于bx,商ax,余数dx mov dbcd[si], al ;商<10,存结果
10
push dx ;暂存余数 mov ax, bx ;除数除于10 mov dx,0 div cx ;dx.ax除于cx,商ax、余数0存在dx mov bx, ax ;bx是除数 pop dx dec si ;目的数据位移量减1 jnz again mov dbcd, dl ;存个位数( < 10 ) .exit 0 end
3.26 解:
(1)汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下: 过程名 PROC [NEAR|FAR]
?? ;过程体 过程名 ENDP
(2)保护用到的寄存器内容,以便子程序返回时进行相应的恢复。 (3)改错: crazy proc
pish bx push cx xor ax,ax xor dx,dx again:add a,[bx] adc dx,0 inc bx inc bx
loop again pop cx pop bx
3.27 解(不需调用HTOASC子程序): again: mov ah,1 int 21h cmp al,1bh ;ESC的ASCII码是1bh je done mov dl,al mov ah,2 int 21h ;是大写字母则转换为小写字母 jmp again done: ?
3.28 解答:
11
asctob proc push cx
asctob
3.29 解:DIPASC
DIPASC HTOASC
and dh,0fh shl dh,1 mov ch,dh shl dh,1 shl dh,1 add dh,ch and dl,0fh add dh,dl mov al,dh pop cx ret endp
proc push cx push dx push ax mov cl,4 shr al,cl call HTOASC mov dl,al mov ah,2 int 21h pop ax
call HTOASC mov dl,al mov ah,2 int 21h
mov dl,’H’mov ah,2 int 21h pop dx pop cx ret endp proc
and al,0fh cmp al,9 jbe htoasc1 add al,37h ret
;先转换十位数
;十位数乘以10(采用移位指令)
;转换个位数 ;十位数加个位数 ;设置出口参数
;入口参数:AL=要显示的一个16进制数
;转换高位
;显示
;转换低位 ;显示
;显示一个字母“H”
;将AL低4位表达的一位16进制数转换为ASCII码;是0AH~0FH,加37H转换为ASCII码 ;子程序返回
12
htoasc1: add al,30h ;是0~9,加30H转换为ASCII码 ret ;子程序返回 HTOASC endp
3.30 解: lucase proc push bx mov bx,offset string cmp al,0 case0: next0: case1: next1: case2: next20:
je case0 cmp al,1 jz case1 cmp al,2 jz case2 jmp done cmp byte ptr [bx],0 je done cmp byte ptr [bx],’A’ jb next0 cmp byte ptr [bx],’Z’ ja next0 add byte ptr [bx],20h inc bx jmp case0 cmp byte ptr [bx],0 je done cmp byte ptr [bx],’a’ jb next1 cmp byte ptr [bx],’z’ ja next1 sub byte ptr [bx],20h inc bx jmp case1 cmp byte ptr [bx],0 je done cmp byte ptr [bx],’A’ jb next2 cmp byte ptr [bx],’Z’ ja next20 add byte ptr [bx],20h jmp next2
cmp byte ptr [bx],’a’ jb next2 cmp byte ptr [bx],’z’
13
ja next2 sub byte ptr [bx],20h next2: inc bx jmp case2 done: pop bx ret lucase endp
3.31 解:
(1)用寄存器传递参数:
最简单和常用的参数传递方法是通过寄存器,只要把参数存于约定的寄存器中就可以了
由于通用寄存器个数有限,这种方法对少量数据可以直接传递数值,而对大量数据只能传递地址
采用寄存器传递参数,注意带有出口参数的寄存器不能保护和恢复,带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致 (2)用共享变量传递参数
子程序和主程序使用同一个变量名存取数据就是利用共享变量(全局变量)进行参数传递
如果变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTREN声明 如果主程序还要利用原来的变量值,则需要保护和恢复
利用共享变量传递参数,子程序的通用性较差,但特别适合在多个程序段间、尤其在不同的程序模块间传递数据 (3)用堆栈传递参数
参数传递还可以通过堆栈这个临时存储区。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们
采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法
3.32 解:
方法:主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们 注意:压栈与弹栈必须要一一对应。
3.33 解: 方法1: neg32 proc ;入口参数:DX.AX=32位有符号数 neg ax ;实现0-DX.AX功能 neg dx sbb dx,0 ;这条指令也可以用dec dx代替 ret neg32 endp ;出口参数:DX.AX=32位有符号数的补码 方法2: neg32 proc ;入口参数:DX.AX=32位有符号数
14
not ax ;实现DX.AX求反加1 not dx add ax,1 adc dx,0 ret neg32 endp ;出口参数:DX.AX=32位有符号数的补码
3.34 解: array count result checksum sum: checksum
3.35 解:⑴ wdata
;数据段 db 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h ;数组 equ $-array ;数组元素个数 db ? ;校验和 ;代码段 mov bx,offset array ;BX←数组的偏移地址 mov cx,count ;CX←数组的元素个数 call checksum ;调用求和过程 mov result,al ;处理出口参数 mov ax,4c00h int 21h ;计算字节校验和的通用过程 ;入口参数:DS:BX=数组的段地址:偏移地址,CX=元素个数 ;出口参数:AL=校验和 ;说明:除AX/BX/CX外,不影响其他寄存器 proc xor al,al ;累加器清0 add al,[bx] ;求和 inc bx ;指向下一个字节 loop sum ret endp end .model small .stack .data dw 34abh .code .startup mov ax,wdata call dispa .exit 0 ;
15
正在阅读:
微机原理与接口技术课后习题答案(郭兰英)06-27
云南小学教师教育学心理学资料05-12
吉利收购沃尔沃案例分析完美版 - 图文10-15
爸爸请您放下手机吧作文500字06-16
邻里中心及物管试验检验方案 - 图文03-09
一把钥匙开一把锁作文800字07-15
我喜欢的一张照片作文600字07-14
大一VB语言程序期末考试题及答案04-19
高中地理知识大全顺口溜05-20
花城版六年级音乐下册课程目录与教学计划表04-13
- 天大砼方案 - 图文
- 农业科技网络书屋能力提升_玉米错题选
- DNS习题
- 浅议检察官对罪犯谈话的技巧与效果
- 高考语文文言文翻译专题训练
- AB类学科竞赛目录(2015)
- 建筑面积计算新规定(2015最新)
- Revit2012初级工程师题集一
- 十三五项目米线可行性报告
- 2013体育学院党组织建设工作总结
- 2014Revit工程师题库
- 高中数学如何实施研究性学习
- 茶艺表演 中英互译
- 小学音乐湘文艺版 四年级下册 第十一课《(歌表演)脚印》优质课公
- 山西省农村合作经济承包合同管理条例
- 2015年镇江市中考化学一模试题参考答案及评分标准(定稿)
- 统计 题集
- 批评意见清单
- 8潞安集团蒲县黑龙关煤矿矿业公司2
- 鄂教版四年级语文上册复习精要(光谷四小)
- 郭兰英
- 技术课
- 微机
- 习题
- 接口
- 原理
- 答案