微机原理与接口技术课后习题答案郭兰英
1第一章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 解:21.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 区:128KB1.10 解:(1)、数用来直接表征量的大小,包括:定点数、浮点数。(2)、码用来指代某个事物或事物的某种状态属性,包括:二进制、八进制、十进制、十六进制。区别:使用场合不同,详见 P16.1.11 解:(1)31021674.6)(.0)8)AE(2) 2106.(3.475)100)8B(3) 16 210F8.)(.)A935.7)(1.12 解:原码 反码 补码+37 00100101/25H 00100101/25H 00100101/25H-37 10100101/A5H 11011010/DAH 11011011/DBH1.13 解:+37 -3716 位 32 位 16 位 32 位00 25H 00 00 00 25H FF 5BH FF FF FF 5BH1.14 解:无符号数:70D补码有符号数:70DBCD 码:46DASCII:F1.15 解:1)、相加后若出现和大于 9,则将和减去 10 后再向高位进 12)、若出现组间进位,则将低位加 61.16 解:详见课本 16 页。1.17 解:C3 40 20 001.18 解:50 50H十进制值 50 80二进制 十六进制 二进制 十六进制40011 0010B 32H 0101 0000B 50H1.19 解:D:44Hd:64HCR:0DHLF:0AH0:30HSP:20HNUL:00H1.20 解:国标码:36 50H机内码:B6 B0H第 3 章 3.2 解:(1)完整的汇编语言源程序由段组成(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内(5)通常,程序还需要一个堆栈段3.3 解:存储模式 特 点TINY COM 类型程序,只有一个小于 64KB 的逻辑段(MASM 6.x 支持)SMALL 小应用程序,只有一个代码段和一个数据段(含堆栈段),每段不大于 64KBCOMPACT 代码少、数据多的程序,只有一个代码段,但有多个数据段MEDIUM 代码多、数据少的程序,可有多个代码段,只有一个数据段LARGE 大应用程序,可有多个代码段和多个数据段(静态数据小于 64KB)5HUGE 更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制)FLAT 32 位应用程序,运行在 32 位 80x86CPU 和 Windows 9x 或 NT 环境3.4 解:开始位置:用标号指明返回 DOS:利用 DOS 功能调用的 4CH 子功能来实现汇编停止:执行到一条 END 伪指令时,停止汇编3.5 解:段定位、段组合和段类型。3.6 解:stack segment stackdb 1024(0)stack endsdata segment string db 'Hello,Assembly!',0dH,0aH,$data endscode segment 'code'assume cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start3.7 解:(1). EXE 程序程序可以有多个代码段和多个数据段,程序长度可以超过 64KB通常生成 EXE 结构的可执行程序(2). COM 程序只有一个逻辑段,程序长度不超过 64KB需要满足一定条件才能生成 COM 结构的可执行程序(MASM 6.x 需要采用 TINY 模式)3.8 解:符号定义伪指令有“等价 EQU”和“等号”:符号名 EQU 数值表达式符号名 EQU 符号名 数值表达式EQU 用于数值等价时不能重复定义符号名,但“”允许有重复赋值。例如:X= 7 ;等效于:X equ 7X= X+5 ;“X EQU X+5”是错误的63.9 解:(1) al=67h(2) ax=133h,dx=4h(3) ax=0230h(4) al=41h(4) ax=7654h3.10 解:(1)41h42h43h1010h45h 46h -1 ? 4 4 4 -1 ? 4 4 4 -1 ? 4 4 4(2)10h 00h 0fbh 0ffh ? ? ? ? ? ?3.11 解:.datamy1b db 'Personal Computer'my2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dup(?)my6c = 100my7c = 3.12 解:利用定位伪指令控制,如 org,even,align3.13 解:包括逻辑地址和类型两种属性。3.14 解:;数据段org 100hvarw dw 1234h , 5678hvarb db 3 , 4vard dd 12345678hbuff dd 10 dup(?)mess db 'Hello';代码段mov ax , offset varb + offset messmov ax , type buff + type mess + type vardmov ax , sizeof varw+ sizeof buff+ sizeof mess7mov ax , lengthof varw+ lengthof vard3.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 ax, bufXcmp ax, bufYjae donemov ax, bufYdone: mov bufZ, ax3.19 解:.model small.stack.databufX dw -7signX db ?.code.startupcmp bufX,0 ;test bufX,80hjl next ;jnz nextmov signX,0jmp donenext: mov signX,-1done: .exit 0end83.20 解:mov dl,2mov ax,bufXcmp ax,bufYje next1dec dlnext1: cmp ax,bufZje next2dec dlnext2: mov 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,'0'jmp dispfun1: mov dl,'1'jmp dispfun2: mov dl,'2'jmp dispfun3: mov dl,'3'jmp dispfun4: mov dl,'4'jmp dispfun5: mov dl,'5'jmp dispfun6: mov dl,'6'jmp dispfun7: mov dl,'7'jmp disp9;disp: 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_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据num equ 10 ;数据个数sum db ? ;预留结果单元.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, 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 010end start3.24 编写计算 100 个 16 位正整数之和的程序。如果和不超过 16 位字的范围(65535) ,则保存其和到 wordsum,如超过则显示overflow 。答:;数据段count equ 100parray dw count dup(?) ;假设有 100 个数据wordsum dw 0msg db 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 和 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, 0div bx ;除于 bx,商 ax,余数 dx mov dbcdsi, al;商10,存结果