《微机原理与接口技术课后习题答案(郭兰英)25页word文档.doc》由会员分享,可在线阅读,更多相关《微机原理与接口技术课后习题答案(郭兰英)25页word文档.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流微机原理与接口技术课后习题答案(郭兰英)【精品文档】第 25 页第一章1.1 解:五代,详细见书1.2 解: 微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件控制器和运算器的微处理器为核心,所构造出的计算机系统 。PC机:PC(Personal Computer)机就是面向个人单独使用的一类微机 。单片机:用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要部件,如:ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换电路等。 数字信号处理器DSP:主要面向大流量数字信号的实时处理,在宿主系
2、统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用1.3 解:微机主要有存储器、I/O设备和I/O接口、CPU、系统总线、操作系统和应用软件组成,各部分功能如下:CPU:统一协调和控制系统中的各个部件系统总线:传送信息存储器:存放程序和数据I/O设备:实现微机的输入输出功能I/O接口:I/O设备与CPU的桥梁操作系统:管理系统所有的软硬件资源1.4 解:系统总线:传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交换 。好处:组态灵活、扩展方便 三组信号线:数据总线、地址总线和控制总线 。其使用特点是:在某一时刻,只能由一个总线主控设备来控制系统总线,只能有
3、一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。1.5解:(1)用于数值计算、数据处理及信息管理方向。采用通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友好的操作界面和简便快捷的维护、扩充手段。(2)用于过程控制及嵌人应用方向。采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电。1.6 解:1.7 解: I/O通道:位于CPU和设备控制器之间,其目的是承担一些原来由CPU处理的I/O任务,从而把CPU从繁杂的I/O任务中解脱出来。由10根信号线
4、组成(A9-A0)。1.8解: BIOS:基本输入输出系统。主要功能:用来驱动和管理诸如键盘、显示器、打印机、磁盘、时钟、串行通信接口等基本的输入输出设备1.9 解:基本RAM区:640KB保留RAM区:128KB扩展ROM区:128KB基本ROM区:128KB1.10 解:(1)、数用来直接表征量的大小,包括:定点数、浮点数。(2)、码用来指代某个事物或事物的某种状态属性,包括:二进制、八进制、十进制、十六进制。区别:使用场合不同,详见P16.1.11 解:(1)(2)(3)1.12 解:原码 反码 补码+37 00100101/25H 00100101/25H 00100101/25H-3
5、7 10100101/A5H 11011010/DAH 11011011/DBH1.13 解: +37 -3716位 32位16位 32位00 25H00 00 00 25HFF 5BHFF FF FF 5BH1.14 解:无符号数:70D补码有符号数:70DBCD码:46DASCII:F1.15 解:1)、相加后若出现和大于9,则将和减去10后再向高位进12)、若出现组间进位,则将低位加61.16 解:详见课本16页。1.17 解:C3 40 20 001.18 解:5050H十进制值5080二进制十六进制二进制十六进制0011 0010B32H0101 0000B50H1.19 解:D:4
6、4Hd:64HCR:0DHLF:0AH0:30HSP:20HNUL:00H1.20 解:国标码:36 50H机内码:B6 B0H第3章 3.2 解:(1)完整的汇编语言源程序由段组成(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内(5)通常,程序还需要一个堆栈段3.3 解:存储模式特 点TINYCOM类型程序,只有一个小于64KB的逻辑段(MASM 6.x支持)SMALL小应用程序
7、,只有一个代码段和一个数据段(含堆栈段),每段不大于64KBCOMPACT代码少、数据多的程序,只有一个代码段,但有多个数据段MEDIUM代码多、数据少的程序,可有多个代码段,只有一个数据段LARGE大应用程序,可有多个代码段和多个数据段(静态数据小于64KB)HUGE更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制)FLAT32位应用程序,运行在32位80x86CPU和Windows 9x或NT环境3.4 解:开始位置:用标号指明返回DOS:利用DOS功能调用的4CH子功能来实现汇编停止:执行到一条END伪指令时,停止汇编3.5 解:段定位、段组合和段类型。3.6 解:stack
8、 segment stackdb 1024(0)stack endsdata segment string db Hello,Assembly!,0dH,0aH,$data ends code segment codeassume cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start3.7 解:(1). EXE程序程序可以有多个代码段和多个数据段,程序长度可以超过64KB通常生成EXE结构的可执行程序(2). COM程序只有一个逻辑段,程序长度不超过64KB需要满足一定条件才能生
9、成COM结构的可执行程序(MASM 6.x需要采用TINY模式)3.8 解:符号定义伪指令有“等价EQU”和“等号”:符号名 EQU 数值表达式符号名 EQU 符号名 数值表达式EQU用于数值等价时不能重复定义符号名,但“”允许有重复赋值。例如:X= 7;等效于:X equ 7X= X+5;“X EQU X+5”是错误的3.9 解:(1) al=67h(2) ax=133h,dx=4h(3) ax=0230h(4) al=41h(4) ax=7654h3.10 解:(1)41h42h43h1010h45h46h-1?444-1?444-1?444(2)10h00h0fbh0ffh?3.11 解
10、:.data my1b db Personal Computermy2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dup(?)my6c = 100my7c = 3.12 解:利用定位伪指令控制,如org,even,align3.13 解:包括逻辑地址和类型两种属性。3.14 解:;数据段org 100hvarwdw1234h,5678hvarbdb3,4varddd12345678hbuffdd10dup(?)messdbHello;代码段movax,offsetvarb+ offsetmessmovax,typebuff+ typemess+t
11、ypevardmovax,sizeofvarw+ sizeofbuff+ sizeof messmovax,lengthofvarw+ lengthofvard3.15 解:(1) 1000超过一个字节所能表达的最大整数(2)SI应为偶数(3)两个内存单元不能直接运算(4)应改为al+1(5)条件转移指令后面应接标号,而不是变量3.16 解:mov ah,1;只允许输入小写字母int 21hsub al,20h;转换为大写字母mov dl,almov ah,2int 21h;显示3.17 解:mov bx,offset LEDtablemov al,lednumxlat3.18 解:mov a
12、x, bufXcmp ax, bufYjae donemov ax, bufYdone:mov bufZ, ax3.19 解:.model small.stack.databufXdw -7signXdb ?.code.startupcmp bufX,0;test bufX,80hjl next;jnz nextmov signX,0jmp donenext:mov signX,-1done:.exit 0end3.20 解:mov dl,2mov ax,bufXcmp ax,bufYje next1dec dlnext1:cmp ax,bufZje next2dec dlnext2:mov
13、ah,2int 21h3.21 解:;代码段mov al,numbermov bx,0;BX记录为1的位数restart:cmp al,0;AL0结束jz doneagain:shr al,1;最低位右移进入CFjc next;为1,转移inc bx;不为1,继续jmp againnext:push axpush bxshl bx,1;位数乘以2(偏移地址要用2个字节单元)jmp addrsbx;间接转移:IPtableBX;以下是各个处理程序段fun0:mov dl,0jmp dispfun1:mov dl,1jmp dispfun2:mov dl,2jmp dispfun3:mov dl,
14、3jmp dispfun4:mov dl,4jmp dispfun5:mov dl,5jmp dispfun6:mov dl,6jmp dispfun7:mov dl,7jmp dispdisp:mov ah,2;显示一个字符int 21hpop bxpop axjmp restartdone: 3.22 编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。;wjxt322.asm.model small.stack.datab_datadb 12h,45h,0f3h,6ah,2
15、0h,0feh,90h,0c8h,57h,34h;原始数据numequ 10;数据个数sumdb ?;预留结果单元.code.startupxor si, si;位移量清零xor al, al;取第一个数mov cx, num;累加次数again:add al, b_datasi;累加inc si;指向下一个数loop again;如未完,继续累加mov sum, al;完了,存结果.exit 0end3.23 求主存0040h:0开始的一个64KB物理段中共有多少个空格?; wjxt323.asm.model small.codestart:mov ax,0040h;送段地址mov ds,
16、axmov si, 0;偏移地址mov cx, si;计数(循环次数)xor ax, ax;空格计数器清零again:cmp byte ptr si, 20h;与空格的ASCII码比较jne next;不是空格,转inc ax;是空格,空格数加1next:inc si;修改地址指针loop again;cxcx1,如cx0 退出循环.exit 0end start3.24 编写计算100个16位正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示overflow。答:;数据段countequ 100parraydw count dup(?);假设
17、有100个数据wordsumdw 0msgdb overflow,$;代码段mov cx,countmov ax,0mov bx,offset parrayagain:add ax,bxjnc nextmov dx,offset msgmov ah,9int 21h;显示溢出信息jmp done;然后,跳出循环体next:add bx,2loop againmov wordsum,axdone:3.25 编程把个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以l00、10
18、和l,得到“百位”、“十位”和“个位”。;wjxt325.asm .model small .stack 256 .data arraydw ?;源字数据 dbcddb 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, 0div bx;除于bx,商ax,余数dx mov dbcdsi, al;商10,存结果 push dx;暂存余数mov ax
19、, bx;除数除于10 mov dx,0div cx;dx.ax除于cx,商ax、余数0存在dx mov bx, ax;bx是除数 pop dxdec si;目的数据位移量减1jnz againmov dbcd, dl;存个位数( 10 ) .exit 0end3.26 解:(1)汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下:过程名PROC NEAR|FAR;过程体过程名ENDP(2)保护用到的寄存器内容,以便子程序返回时进行相应的恢复。(3)改错:crazyprocpishbxpushcxxorax,axxordx,dxagain:adda,bxadcdx,0incb
20、xincbxloopagainpopcxpopbx3.27 解(不需调用HTOASC子程序):again:mov ah,1int 21hcmp al,1bh;ESC的ASCII码是1bhje donemov dl,almov ah,2int 21h;是大写字母则转换为小写字母jmp againdone:3.28 解答:asctobprocpush cxand dh,0fh;先转换十位数shl dh,1;十位数乘以10(采用移位指令)mov ch,dhshl dh,1shl dh,1add dh,chand dl,0fh;转换个位数add dh,dl;十位数加个位数mov al,dh;设置出口参
21、数pop cxretasctobendp3.29 解:DIPASCproc;入口参数:AL要显示的一个16进制数push cxpush dxpush axmov cl,4;转换高位shr al,clcall HTOASCmov dl,al;显示mov ah,2int 21hpop ax;转换低位call HTOASCmov dl,al;显示mov ah,2int 21hmov dl,H;显示一个字母“H”mov ah,2int 21hpop dxpop cxretDIPASCendpHTOASCproc;将AL低4位表达的一位16进制数转换为ASCII码and al,0fhcmp al,9jb
22、e htoasc1add al,37h;是0AH0FH,加37H转换为ASCII码ret;子程序返回htoasc1:add al,30h;是09,加30H转换为ASCII码ret;子程序返回HTOASCendp3.30 解:lucaseprocpush bxmov bx,offset stringcmp al,0je case0cmp al,1jz case1cmp al,2jz case2jmp donecase0:cmp byte ptr bx,0je donecmp byte ptr bx,Ajb next0cmp byte ptr bx,Zja next0add byte ptr bx
23、,20hnext0:inc bxjmp case0case1:cmp byte ptr bx,0je donecmp byte ptr bx,ajb next1cmp byte ptr bx,zja next1sub byte ptr bx,20hnext1:inc bxjmp case1case2:cmp byte ptr bx,0je donecmp byte ptr bx,Ajb next2cmp byte ptr bx,Zja next20add byte ptr bx,20hjmp next2next20:cmp byte ptr bx,ajb next2cmp byte ptr b
24、x,zja next2sub byte ptr bx,20hnext2:inc bxjmp case2done:pop bxretlucaseendp3.31 解:(1)用寄存器传递参数:最简单和常用的参数传递方法是通过寄存器,只要把参数存于约定的寄存器中就可以了由于通用寄存器个数有限,这种方法对少量数据可以直接传递数值,而对大量数据只能传递地址采用寄存器传递参数,注意带有出口参数的寄存器不能保护和恢复,带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致(2)用共享变量传递参数子程序和主程序使用同一个变量名存取数据就是利用共享变量(全局变量)进行参数传递如果变量定义和使用不在同一个
25、源程序中,需要利用PUBLIC、EXTREN声明如果主程序还要利用原来的变量值,则需要保护和恢复利用共享变量传递参数,子程序的通用性较差,但特别适合在多个程序段间、尤其在不同的程序模块间传递数据(3)用堆栈传递参数参数传递还可以通过堆栈这个临时存储区。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法3.32 解:方法:主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们注意:压栈与弹栈必须要一一对应。3.
26、33 解:方法1:neg32proc;入口参数:DX.AX32位有符号数neg ax;实现0DX.AX功能neg dx sbb dx,0;这条指令也可以用dec dx代替retneg32endp;出口参数:DX.AX32位有符号数的补码方法2:neg32proc;入口参数:DX.AX32位有符号数not ax;实现DX.AX求反加1not dx add ax,1adc dx,0retneg32endp;出口参数:DX.AX32位有符号数的补码3.34 解:;数据段arraydb 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h;数组countequ $-arr
27、ay;数组元素个数resultdb ?;校验和;代码段mov bx,offset array;BX数组的偏移地址mov cx,count;CX数组的元素个数call checksum;调用求和过程mov result,al;处理出口参数mov ax,4c00hint 21h;计算字节校验和的通用过程;入口参数:DS:BX数组的段地址:偏移地址,CX元素个数;出口参数:AL校验和;说明:除AX/BX/CX外,不影响其他寄存器checksumprocxor al,al;累加器清0sum:add al,bx;求和inc bx;指向下一个字节loop sumretchecksumendpend3.35
28、 解:.model small.stack.datawdatadw 34abh.code.startupmov ax,wdatacall dispa.exit 0dispaprocpush cxpush dxmov cl,4mov dl,ahshr dl,clcall dldispmov dl,ahand dl,0fhcall dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpop cxretdispaendpdldispprocpush axor dl,30hcmp dl,39hjbe dldisp
29、1add dl,7dldisp1:mov ah,2int 21hpop axretdldispendpend.model small.stack.datawdatadw 34abhwordtempdw ?.code.startupmov ax,wdatamov wordtemp,axcall dispa.exit 0dispaprocpush cxpush dxmov cl,4mov dl,byte ptr wordtemp+1shr dl,clcall dldispmov dl,byte ptr wordtemp+1and dl,0fhcall dldispmov dl,byte ptr w
30、ordtempshr dl,clcall dldispmov dl,byte ptr wordtempand dl,0fhcall dldisppop dxpop cxretdispaendpdldispprocpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1:mov ah,2int 21hpop axretdldispendpend.model small.stack.datawdatadw 34abh.code.startuppush wdatacall dispapop ax;add sp,2.exit 0dispaprocpush
31、 bpmov bp,sppush axpush cxpush dxmov ax,bp+4mov cl,4mov dl,ahshr dl,clcall dldispmov dl,ahand dl,0fhcall dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpop cxpop axpop bpretdispaendpdldispprocpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1:mov ah,2int 21hpop axretdldispe
32、ndpend3.36 解: 如果利用共享变量传递函数,且变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTERN声明。3.37 解: (1)宏定义由一对宏汇编伪指令MACRO和ENDM来完成,格式如下:宏名MACRO 形参表;宏定义体ENDM宏定义之后就可以使用它,即宏调用:宏名 实参表 (2)宏调用的格式同一般指令一样:在使用宏指令的位置写下宏名,后跟实体参数;如果有多个参数,应按形参顺序填入实参,也用逗号分隔 (3)宏展开:在汇编时,宏指令被汇编程序用对应的代码序列替代,这就是宏展开 宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体完全替代源程
33、序的宏指令,同时用位置匹配的实参对形参进行取代3.38 解: 宏调用的参数通过形参、实参结合实现传递,简捷直观、灵活多变。宏汇编的一大特色是它的参数。宏定义时既可以无参数,也可以有一个或多个参数;宏调用时实参的形式也非常灵活,可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式;只要宏展开后符合汇编语言的语法规则即可。3.39 解: 宏:仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变通过形参、实参结合实现参数传递,简捷直观、灵活多变 子程序:还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的
34、目标代码较短,执行速度减慢需要利用寄存器、存储单元或堆栈等传递参数 选择:宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法。通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序3.40 编写一个宏指令move doprnd,soprnd,它实现任意寻址方式的字量源操作数soprnd送到目的操作数doprnd,包括存储单元到存储单元的传送功能。答:movemacro doprnd,soprndmov ax,soprndmov doprnd,axendm3.41 定义一个宏logical,用它代表4条逻辑运算指令:and/or/xor/test
35、。注意需要利用3个形式参数,并给出一个宏调用以及对应宏展开的例子。答:logicalmacro lcode,dopd,sopdlcode dopd,sopdendm例如,如果使用“and ax,bx”指令,可以利用该宏定义,写出宏指令如下:logical and,ax,bx3.42 解:utolmacrolocal nextcmp al,A;小于“A”不转换jb nextcmp al,Z;大于“A”不转换ja nextadd al,20h;是大写字母则转换为小写字母next:endm3.43 定义一个宏movestr strn,dstr,sstr,它将strn个字符从一个字符区sstr传送到另
36、一个字符区dstr解:(假设它们都在数据段)movestrmacro strn,dstr,sstrmov cx,dsmov es,cxmov cx,strnmov di,offset dstrmov si,offset sstrcldrep movsb;重复传送ES:DIDS:SIendm第五章5.1 解:主存的作用:保存正在使用的、处于活动状态的程序和数据。辅存的作用:长期保存程序文件和数据文件,在需要时将这些文件调入RAM内存并激活使用。cache的作用:提高对存储器的访问速度。虚拟存储:由容量较小的主存和容量较大的辅存构成,其目标是扩大程序员眼中的主存容量。区别:通过存储器访问指令用户可
37、对主存进行随机访问;用户利用操作系统提供的用户命令和功能调用对辅存进行访问。5.2 在半导体存储器中,RAM指的是 随机存取存储器 ,他可读可写,但断电后信息一般会 丢失 ;而ROM指的是 只读存储器 ,正常工作时只能从中 读取 信息,但断电后信息 不会丢失 。以EPROM芯片2764为例,其存储容量为8K8位,共有 8 条数据线和 13 条地址线。用它组成64KB的ROM存储区共需 8 片2764芯片。5.3 解:双译码方式使得地址译码器的输出线的数目大为减少,使得芯片设计得时候复杂度就低了。地址线A9A04根数据线I/O4I/O1片选CS*读写WE*5.4 解:假想的RAM有12根地址线、
38、4根数据线片选端CS*或CE*:有效时,可以对该芯片进行读写操作,通过对系统高位地址线的译码来选中各个存储芯片 输出OE*:控制读操作。有效时,芯片内数据输出,该控制端对应系统的读控制线MEMR*(MRDC*) 写WE*:控制写操作。有效时,数据进入芯片中,该控制端对应系统的写控制线MEMW*(MWTC*) 5.5 解:位片结构:每个存储单元具有一个唯一的地址,可存储1位。(4116)字片结构:每个存储单元具有一个唯一的地址,可存储多位。(2114)5.6 解:组成单元速度集成度应用SRAM触发器快低小容量系统DRAM极间电容慢高大容量系统NVRAM带微型电池慢低小容量非易失掩膜ROM:信息制
39、作在芯片中,不可更改PROM:允许一次编程,此后不可更改EPROM:用紫外光擦除,擦除后可编程;并允许用户多次擦除和编程EEPROM(E2PROM):采用加电方法在线进行擦除和编程,也可多次擦写Flash Memory(闪存):能够快速擦写的EEPROM,但只能按块(Block)擦除5.7解:位扩充存储器芯片数据位数小于主机数据线数时,利用多个存储器芯片在数据“位”方向的扩充;地址扩充(字扩充)当一个存储器芯片不能满足系统存储容量时,利用多个存储器芯片在“地址”方向的扩充 组成32KB存储空间,用SRAM 2114(1K4)需要64个芯片; 组成32KB存储空间,用DRAM 4116(16K1
40、)需要16个芯片; 它们都需要进行位扩充和地址扩充5.8解: 片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间 存储器片选信号通常与CPU地址总线的高位地址线相关联,可以采用“全译码”、“部分译码”、“线选译码”方式 采用全译码方式可以避免地址重复 采用部分或线选译码可以节省译码硬件5.9解: 24165.10 解:5.11解:5.12 解:5.13解:5.14 解:动态随机存取存储器 (DRAM) 的存储单元电路 动态存储单元是由 MOS 管的栅极电容 C 和门控管组成的。数据以电荷的形式存储在栅极电容上,电容 上的电压高表示存储数据 1 ;电容没有储存电荷,电压为 0 ,表明存储数据 0 。因存在漏电,使电容 存储的信息不能长久保持,为防止信息丢失,就必须定时地给电容补充电荷,这