微机原理与接口技术课后习题答案(郭兰英)

更新时间:2023-09-12 04:55: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

dispa

dispa

dldisp

dldisp1:

dldisp ⑵

wdata wordtemp

proc push cx push dx mov cl,4 mov dl,ah shr dl,cl call dldisp mov dl,ah and dl,0fh call dldisp mov dl,al shr dl,cl call dldisp mov dl,al and dl,0fh call dldisp pop dx pop cx ret endp ; proc push ax or dl,30h cmp dl,39h jbe dldisp1 add dl,7 mov ah,2 int 21h pop ax ret endp end

.model small .stack .data dw 34abh dw ? .code .startup mov ax,wdata mov wordtemp,ax call dispa

16

dispa

dispa

dldisp

dldisp1:

dldisp ⑶

wdata

.exit 0 ; proc push cx push dx mov cl,4

mov dl,byte ptr wordtemp+1 shr dl,cl call dldisp

mov dl,byte ptr wordtemp+1 and dl,0fh call dldisp

mov dl,byte ptr wordtemp shr dl,cl call dldisp

mov dl,byte ptr wordtemp and dl,0fh call dldisp pop dx pop cx ret endp ; proc push ax or dl,30h cmp dl,39h jbe dldisp1 add dl,7 mov ah,2 int 21h pop ax ret endp end

.model small .stack .data dw 34abh .code .startup push wdata call dispa

17

pop ax ;add sp,2 .exit 0 ; dispa proc push bp mov bp,sp push ax push cx push dx mov ax,[bp+4] mov cl,4 mov dl,ah shr dl,cl call dldisp mov dl,ah and dl,0fh call dldisp mov dl,al shr dl,cl call dldisp mov dl,al and dl,0fh call dldisp pop dx pop cx pop ax pop bp ret dispa endp ; dldisp proc push ax or dl,30h cmp dl,39h jbe dldisp1 add dl,7 dldisp1: mov ah,2 int 21h pop ax ret dldisp endp end 3.36 解:

如果利用共享变量传递函数,且变量定义和使用不在同一个源程序中,需要利用

18

PUBLIC、EXTERN声明。

3.37 解:

(1)宏定义由一对宏汇编伪指令MACRO和ENDM来完成,格式如下: 宏名 MACRO [形参表] …… ;宏定义体 ENDM 宏定义之后就可以使用它,即宏调用: 宏名 [实参表]

(2)宏调用的格式同一般指令一样:在使用宏指令的位置写下宏名,后跟实体参数;如果有多个参数,应按形参顺序填入实参,也用逗号分隔

(3)宏展开:在汇编时,宏指令被汇编程序用对应的代码序列替代,这就是宏展开 宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体完全替代源程序的宏指令,同时用位置匹配的实参对形参进行取代

3.38 解:

宏调用的参数通过形参、实参结合实现传递,简捷直观、灵活多变。宏汇编的一大特色是它的参数。宏定义时既可以无参数,也可以有一个或多个参数;宏调用时实参的形式也非常灵活,可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式;只要宏展开后符合汇编语言的语法规则即可。

3.39 解:

宏:仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变

通过形参、实参结合实现参数传递,简捷直观、灵活多变

子程序:还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢 需要利用寄存器、存储单元或堆栈等传递参数

选择:宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法。通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序

3.40 编写一个宏指令move doprnd,soprnd,它实现任意寻址方式的字量源操作数soprnd送到目的操作数doprnd,包括存储单元到存储单元的传送功能。 答: move macro doprnd,soprnd mov ax,soprnd mov doprnd,ax endm

3.41 定义一个宏logical,用它代表4条逻辑运算指令:and/or/xor/test。注意需要利用3个形式参数,并给出一个宏调用以及对应宏展开的例子。 答: logical macro lcode,dopd,sopd

19

lcode dopd,sopd endm

例如,如果使用“and ax,[bx]”指令,可以利用该宏定义,写出宏指令如下: logical and,ax,[bx]

3.42 解: utol macro local next cmp al,’A’ ;小于“A”不转换 jb next cmp al,’Z’ ;大于“A”不转换 ja next add al,20h ;是大写字母则转换为小写字母 next: endm

3.43 定义一个宏movestr strn,dstr,sstr,它将strn个字符从一个字符区sstr传送到另一个字符区dstr 解:(假设它们都在数据段) movestr macro strn,dstr,sstr mov cx,ds mov es,cx mov cx,strn mov di,offset dstr mov si,offset sstr cld rep movsb ;;重复传送ES:[DI]←DS:[SI] endm

第五章

5.1 解:

主存的作用:保存正在使用的、处于活动状态的程序和数据。

辅存的作用:长期保存程序文件和数据文件,在需要时将这些文件调入RAM内存并激活使用。

cache的作用:提高对存储器的访问速度。

虚拟存储:由容量较小的主存和容量较大的辅存构成,其目标是扩大程序员眼中的主存容量。

区别:通过存储器访问指令用户可对主存进行随机访问;用户利用操作系统提供的用户命令和功能调用对辅存进行访问。

5.2 在半导体存储器中,RAM指的是 随机存取存储器 ,他可读可写,但断电后信息一般会 丢失 ;而ROM指的是 只读存储器 ,正常工作时只能从中 读取 信息,但断电后信息 不会丢失 。以EPROM芯片2764为例,其存储容量为8K×8位,共有 8 条数据线

20

mov dx,204h out dx,al mov al,ah out dx,al

(3) mov al,0b4h mov dx,207h out dx,al mov al,02f0h mov dx,206h out dx,al mov al,ah out dx,al

9.5 解:

mov al,33h

out 0fbh,al ;写入计数器0地址:0fbh mov al,80h ;

out 0f8h,al ;写入低字节计数初值 mov al,50h

out 0f8h,al ;写入高字节计数初值 作用:计数器0的计数初值为5080h

9.6解

计数器0——每隔55ms产生一个IRQ0中断请求 计数器1——每隔15μs产生一个DRAM刷新请求 计数器2——控制扬声器音调

9.7解

101个下降沿,还可以采用方式4

GATE0接外部启动计数器的控制信号,可以选用方式1或方式5 mov dx,203h

mov al,12h ;方式5为1ah out dx,al mov dx,200h mov al,64h out dx,al

9.8 解:

计数器0的计数值:5M/1K=5000=1388H

方式控制字:00100101=25H、2DH、35H、3DH (十进制计数)

00100100=24H、2CH、34H、3CH (二进制计数)

26

计数器1的计数值:1000

方式控制字:01101001=69H、79H

(十进制计数) 01101000=68H、78H

(二进制计数) MOV DX,0FFF3H

MOV AL,25H ;通道0,只写高字节,方式2,十进制 OUT DX,AL

MOV DX, 0FFF0H

MOV AL,50H ;计数初值5000 OUT DX,AL MOV DX,0FFF3H

MOV AL,69H ;通道1,方式4 OUT DX,AL

MOV DX, 0FFF1H

MOV AL,10H ;计数初值1000 OUT DX,AL

9.9 解:

stack segment stack

dw 1024 dup(?) stack ends data segment

freq dw 8,2277.1,2029.2,1807.9,1709.4,1521.9,1355.9,1207.7,1138.5 data ends

code segment 'code'

assume cs:code, ds:data,ss:stack start: mov ax,data mov ds,ax again:mov ah,01h in 21h cmp al,1BH jz next cmp al,31H jb next1 cmp al,38H ja next1 and al,0fh mov ah,00h mov si,ax

mov bx,offset freq mov ax,[BX+SI]

call speaker call speakon

27

jmp again

next1: call speakoff jmp again next: mov ax,4c00h int 21h speaker proc

push ax mov al,0b6h out 43h,al pop ax

out 42h,al mov al,ah

out 42h,al ret speaker endp speakon proc

push ax in al,61h or al,03h out 61h,al pop ax ret speakon endp speakoff proc push ax in al,61h and al,0fch out 61h,al pop ax ret

speakoff endp code ends end starts

9.10 解: 16

1f 1

2f

28

和 13 条地址线。用它组成64KB的ROM存储区共需 8 片2764芯片。

5.3 解:

双译码方式使得地址译码器的输出线的数目大为减少,使得芯片设计得时候复杂度就低了。

地址线A9~A0

4根数据线I/O4~I/O1 片选CS* 读写WE*

5.4 解:

假想的RAM有12根地址线、4根数据线

片选端CS*或CE*:有效时,可以对该芯片进行读写操作,通过对系统高位地址线的译码来选中各个存储芯片

输出OE*:控制读操作。有效时,芯片内数据输出,该控制端对应系统的读控制线MEMR*(MRDC*)

写WE*:控制写操作。有效时,数据进入芯片中,该控制端对应系统的写控制线MEMW*(MWTC*)

5.5 解:

位片结构:每个存储单元具有一个唯一的地址,可存储1位。(4116) 字片结构:每个存储单元具有一个唯一的地址,可存储多位。(2114)

5.6 解: SRAM DRAM NVRAM

组成单元 触发器 极间电容 带微型电池

速度 快 慢 慢

集成度 低 高 低

应用 小容量系统 大容量系统 小容量非易失

掩膜ROM:信息制作在芯片中,不可更改 PROM:允许一次编程,此后不可更改

EPROM:用紫外光擦除,擦除后可编程;并允许用户多次擦除和编程

EEPROM(E2PROM):采用加电方法在 线进行擦除和编程,也可多次擦写 Flash Memory(闪存):能够快速擦写的EEPROM,但只能按块(Block)擦除

5.7解:

位扩充——存储器芯片数据位数小于主机数据线数时,利用多个存储器芯片在数据“位”方向的扩充;

21

地址扩充(字扩充)——当一个存储器芯片不能满足系统存储容量时,利用多个存储器芯片在“地址”方向的扩充

组成32KB存储空间,用SRAM 2114(1K×4)需要64个芯片; 组成32KB存储空间,用DRAM 4116(16K×1)需要16个芯片; 它们都需要进行位扩充和地址扩充

5.8解:

片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间

存储器片选信号通常与CPU地址总线的高位地址线相关联,可以采用“全译码”、“部分译码”、“线选译码”方式 采用全译码方式可以避免地址重复 采用部分或线选译码可以节省译码硬件

5.9解: 24=16

5.10 解:

5.11解:

22

5.12 解:

5.13解:

5.14 解:

动态随机存取存储器 (DRAM) 的存储单元电路 动态存储单元是由 MOS 管的栅极电容 C 和门控管组成的。数据以电荷的形式存储在栅极电容上,电容 上的电压高表示存储数据 1 ;电容没有储存电荷,电压为 0 ,表明存储数据 0 。因存在漏电,使电容 存储的信息不能长久保持,为防止信息丢失,就必须定时地给电容补充电荷,这种操作称为 “ 刷新 ” 由于要不断地刷新,所以称为动态存储。 方法:采用“仅行地址有效”方法刷新; 刷新周期:15μs 刷新次数:128

23

5.15 解:

4 256KB A19-A16 4

5.16 解:

访问的局部性原理:在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就自然地具有时间上集中分布的倾向。数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。 cache的作用:提高对存储器的访问速度。

虚拟存储:其目标是扩大程序员眼中的主存容量。

第七章

7.1 解:

总线:指可以由多个信息处理单元所共享的信息通道。 使用特点:

⑴ 在某一时刻,只能由一个主设备控制总线,其他主设备此时可作为从设备出现 ⑵ 在某一时刻,只能有一个设备向总线上发送数据,但可以有多个设备从总线上接收数据

7.2在各种微机总线中,根据总线连接对象的不同可将它们分为以下几类,它们是: 片内总线、 芯片总线、 板级总线、 设备总线和互连总线_。例如,ISA总线属于板级总线,USB总线属于设备总线,I2C总线属于芯片总线。总线中除电源和地线外的信号线,也可按传输信息的不同分为以下3类,即:数据总线 、 地址总线 、 控制总线 。

7.3 解:

分时复用就是一个引脚在不同的时刻具有两个甚至多个作用 总线复用的目的是为了减少对外引脚个数

在访问存储器或外设的总线操作周期中,这些引脚在第一个时钟周期输出存储器或I/O端口的低8位地址A7 ~ A0,其他时间用于传送8位数据D7 ~ D0

7.4 解:

并行总线:多维数据通过多根信号线同时进行传递。 并行同步传输、并行异步传输见P174。

7.5 解: 见P174.

7.6 解:

24

总线的性能指标包括:总线宽度、标准传输、时钟同步/异步、总线复用、信号线数、总线控制方式

总线宽度:它是指数据总线的根数, 用bit(位)表示,如8位、16位、32位、64位。

7.9解:

D0~D7:8位双向数据总线 A0~A19:20位输出地址总线

ALE:地址锁存允许,每个CPU 总线周期有效 IOR*:I/O读,输出 IOW*:I/O写,输出

IO CH RDY:I/O通道准备好,输入

第九章

9.1 解:

软件延时、不可编程的硬件定时、可编程的硬件定时

9.2解:

CLK时钟输入信号——在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1

GATE门控输入信号——控制计数器工作,可分成电平控制和上升沿控制两种类型 OUT计数器输出信号——当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号

9.3解:

8253每个通道有 6 种工作方式可供选择。若设定某通道为方式0后,其输出引脚为 低 电平;当 写入计数初值(并进入减1计数器) 后通道开始计数, CLK 信号端每来一个脉冲 减1计数器 就减1;当 计数器减为0 ,则输出引脚输出 高 电平,表示计数结束。8253的CLK0接1.5MHz的时钟,欲使OUT0产生频率为300KHz的方波信号,则8253的计数值应为 5(=1.5MHz÷300KHz) ,应选用的工作方式是 3

9.4解:

(1) mov al,50h mov dx,207h out dx,al

mov al,128 ;80h mov dx,205h out dx,al

(2) mov al,33h mov dx,207h out dx,al

mov ax,3000h ;不是3000

25

本文来源:https://www.bwwdw.com/article/r1mh.html

Top