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

上传人:b****4 文档编号:6620245 上传时间:2023-05-10 格式:DOCX 页数:45 大小:423.96KB
下载 相关 举报
微机原理与接口技术课后习题答案郭兰英.docx_第1页
第1页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第2页
第2页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第3页
第3页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第4页
第4页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第5页
第5页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第6页
第6页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第7页
第7页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第8页
第8页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第9页
第9页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第10页
第10页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第11页
第11页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第12页
第12页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第13页
第13页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第14页
第14页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第15页
第15页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第16页
第16页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第17页
第17页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第18页
第18页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第19页
第19页 / 共45页
微机原理与接口技术课后习题答案郭兰英.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《微机原理与接口技术课后习题答案郭兰英.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课后习题答案郭兰英.docx(45页珍藏版)》请在冰点文库上搜索。

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

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

 

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

第一章

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解:

 

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)

(3)

1.12解:

原码反码补码

+3700100101/25H00100101/25H00100101/25H

-3710100101/A5H11011010/DAH11011011/DBH

1.13解:

+37

-37

16位

32位

16位

32位

0025H

00000025H

FF5BH

FFFFFF5BH

1.14解:

无符号数:

70D

补码有符号数:

70D

BCD码:

46D

ASCII:

F

1.15解:

1)、相加后若出现和大于9,则将和减去10后再向高位进1

2)、若出现组间进位,则将低位加6

1.16解:

详见课本16页。

1.17解:

C3402000

1.18解:

50

50H

十进制值

50

80

二进制

十六进制

二进制

十六进制

00110010B

32H

01010000B

50H

1.19解:

D:

44H

d:

64H

CR:

0DH

LF:

0AH

0:

30H

SP:

20H

NUL:

00H

1.20解:

国标码:

3650H

机内码:

B6B0H

 

第3章

3.2解:

(1)完整的汇编语言源程序由段组成

(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列

(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点

(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内

(5)通常,程序还需要一个堆栈段

3.3解:

存储模式

特点

TINY

COM类型程序,只有一个小于64KB的逻辑段(MASM6.x支持)

SMALL

小应用程序,只有一个代码段和一个数据段(含堆栈段),每段不大于64KB

COMPACT

代码少、数据多的程序,只有一个代码段,但有多个数据段

MEDIUM

代码多、数据少的程序,可有多个代码段,只有一个数据段

LARGE

大应用程序,可有多个代码段和多个数据段(静态数据小于64KB)

HUGE

更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制)

FLAT

32位应用程序,运行在32位80x86CPU和Windows9x或NT环境

3.4解:

开始位置:

用标号指明

返回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

(4)ax=7654h

3.10解:

(1)

41h

42h

43h

10

10h

45h

46h

-1

4

4

4

-1

4

4

4

-1

4

4

4

(2)

10h

00h

0fbh

0ffh

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)两个内存单元不能直接运算

(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

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

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’。

答:

;数据段

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

divcx;dx.ax除于cx,商ax、余数0存在dx

movbx,ax;bx是除数

popdx

decsi;目的数据位移量减1

jnzagain

movdbcd,dl;存个位数(<10)

.exit0

end

3.26解:

(1)汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下:

过程名PROC[NEAR|FAR]

……;过程体

过程名ENDP

(2)保护用到的寄存器内容,以便子程序返回时进行相应的恢复。

(3)改错:

crazyproc

pishbx

pushcx

xorax,ax

xordx,dx

again:

adda,[bx]

adcdx,0

incbx

incbx

loopagain

popcx

popbx

3.27解(不需调用HTOASC子程序):

again:

movah,1

int21h

cmpal,1bh;ESC的ASCII码是1bh

jedone

movdl,al

movah,2

int21h;是大写字母则转换为小写字母

jmpagain

done:

3.28解答:

asctobproc

pushcx

anddh,0fh;先转换十位数

shldh,1;十位数乘以10(采用移位指令)

movch,dh

shldh,1

shldh,1

adddh,ch

anddl,0fh;转换个位数

adddh,dl;十位数加个位数

moval,dh;设置出口参数

popcx

ret

asctobendp

3.29解:

DIPASCproc;入口参数:

AL=要显示的一个16进制数

pushcx

pushdx

pushax

movcl,4;转换高位

shral,cl

callHTOASC

movdl,al;显示

movah,2

int21h

popax;转换低位

callHTOASC

movdl,al;显示

movah,2

int21h

movdl,’H’;显示一个字母“H”

movah,2

int21h

popdx

popcx

ret

DIPASCendp

HTOASCproc;将AL低4位表达的一位16进制数转换为ASCII码

andal,0fh

cmpal,9

jbehtoasc1

addal,37h;是0AH~0FH,加37H转换为ASCII码

ret;子程序返回

htoasc1:

addal,30h;是0~9,加30H转换为ASCII码

ret;子程序返回

HTOASCendp

3.30解:

lucaseproc

pushbx

movbx,offsetstring

cmpal,0

jecase0

cmpal,1

jzcase1

cmpal,2

jzcase2

jmpdone

case0:

cmpbyteptr[bx],0

jedone

cmpbyteptr[bx],’A’

jbnext0

cmpbyteptr[bx],’Z’

janext0

addbyteptr[bx],20h

next0:

incbx

jmpcase0

case1:

cmpbyteptr[bx],0

jedone

cmpbyteptr[bx],’a’

jbnext1

cmpbyteptr[bx],’z’

janext1

subbyteptr[bx],20h

next1:

incbx

jmpcase1

case2:

cmpbyteptr[bx],0

jedone

cmpbyteptr[bx],’A’

jbnext2

cmpbyteptr[bx],’Z’

janext20

addbyteptr[bx],20h

jmpnext2

next20:

cmpbyteptr[bx],’a’

jbnext2

cmpbyteptr[bx],’z’

janext2

subbyteptr[bx],20h

next2:

incbx

jmpcase2

done:

popbx

ret

lucaseendp

3.31解:

(1)用寄存器传递参数:

最简单和常用的参数传递方法是通过寄存器,只要把参数存于约定的寄存器中就可以了

由于通用寄存器个数有限,这种方法对少量数据可以直接传递数值,而对大量数据只能传递地址

采用寄存器传递参数,注意带有出口参数的寄存器不能保护和恢复,带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致

(2)用共享变量传递参数

子程序和主程序使用同一个变量名存取数据就是利用共享变量(全局变量)进行参数传递

如果变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTREN声明

如果主程序还要利用原来的变量值,则需要保护和恢复

利用共享变量传递参数,子程序的通用性较差,但特别适合在多个程序段间、尤其在不同的程序模块间传递数据

(3)用堆栈传递参数

参数传递还可以通过堆栈这个临时存储区。

主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们

采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法

3.32解:

方法:

主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们

注意:

压栈与弹栈必须要一一对应。

3.33解:

方法1:

neg32proc;入口参数:

DX.AX=32位有符号数

negax;实现0-DX.AX功能

negdx

sbbdx,0;这条指令也可以用decdx代替

ret

neg32endp;出口参数:

DX.AX=32位有符号数的补码

方法2:

neg32proc;入口参数:

DX.AX=32位有符号数

notax;实现DX.AX求反加1

notdx

addax,1

adcdx,0

ret

neg32endp;出口参数:

DX.AX=32位有符号数的补码

3.34解:

;数据段

arraydb12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h;数组

countequ$-array;数组元素个数

resultdb

;校验和

;代码段

movbx,offsetarray;BX←数组的偏移地址

movcx,count;CX←数组的元素个数

callchecksum;调用求和过程

movresult,al;处理出口参数

movax,4c00h

int21h

;计算字节校验和的通用过程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2