微机原理与接口技术第二版课后习题答案 龚尚福版.docx

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

微机原理与接口技术第二版课后习题答案 龚尚福版.docx

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

微机原理与接口技术第二版课后习题答案 龚尚福版.docx

微机原理与接口技术第二版课后习题答案龚尚福版

微机原理与接口技术部分答案第二版

主编:

龚尚福

2.28086微处理器由哪几部分组成?

各部分的功能是什么?

16355

【解】:

按功能可分为两部分:

总线接口单元BIU(BusInterfaceUnit)和执行单元EU(ExecutionUnit)。

总线接口单元BIU是8086CPU在存储器和I/O设备之间的接口部件,负责对全部引脚的操作,即8086对存储器和I/O设备的所有操作都是由BIU完成的。

所有对外部总线的操作都必须有正确的地址和适当的控制信号,BIU中的各部件主要是围绕这个目标设计的。

它提供了16位双向数据总线、20位地址总线和若干条控制总线。

其具体任务是:

负责从内存单元中预取指令,并将它们送到指令队列缓冲器暂存。

CPU执行指令时,总线接口单元要配合执行单元,从指定的内存单元或I/O端口中取出数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存单元或I/O端口中。

执行单元EU中包含1个16位的运算器ALU、8个16位的寄存器、1个16位标志寄存器FR、1个运算暂存器和执行单元的控制电路。

这个单元进行所有指令的解释和执行,同时管理上述有关的寄存器。

EU对指令的执行是从取指令操作码开始的,它从总线接口单元的指令队列缓冲器中每次取一个字节。

如果指令队列缓冲器中是空的,那么EU就要等待BIU通过外部总线从存储器中取得指令并送到EU,通过译码电路分析,发出相应控制命令,控制ALU数据总线中数据的流向。

2.3简述8086CPU的寄存器组织。

【解】:

(1)通用寄存器:

通用寄存器又称数据寄存器,既可作为16位数据寄存器使用,也可作为两个8位数据寄存器使用。

当用作16位时,称为AX、BX、CX、DX。

当用作8位时,AH、BH、CH、DH存放高字节,AL、BL、CL、DL存放低字节,并且可独立寻址。

这样,4个16位寄存器就可当作8个8位寄存器来使用。

(2)段寄存器:

段寄存器共有4个CS、DS、SS、ES。

代码段寄存器CS表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供;堆栈段寄存器SS指定当前堆栈的起始地址;数据段寄存器DS指示当前程序使用的数据所存放段的起始地址;附加段寄存器ES则指出当前程序使用附加段地址的起始位置,该段一般用来存放原始数据或运算结果。

(3)指针和变址寄存器:

堆栈指针SP用以指出在堆栈段中当前栈顶的地址。

入栈(PUSH)和出栈(POP)指令由SP给出栈顶的偏移地址。

基址指针BP指出要处理的数据在堆栈段中的基地址,故称为基址指针寄存器。

变址寄存器SI和DI用来存放当前数据段中某个单元的偏移量。

(4)指令指针与标志寄存器:

指令指针IP的功能跟Z80CPU中的程序计数器PC的功能类似。

正常运行时,IP中存放的是BIU要取的下一条指令的偏移地址。

它具有自动加1功能,每当执行一次取指令操作时,它将自动加1,使它指向要取的下一内存单元,每取一个字节后IP内容加1,而取一个字后IP内容则加2。

某些指令可使IP值改变,某些指令还可使IP值压入堆栈或从堆栈中弹出。

标志寄存器FLAGS是16位的寄存器,8086共使用了9个有效位,标志寄存器格式如图2.5所示。

其中的6位是状态标志位,3位为控制标志位。

状态标志位是当一些指令执行后,表征所产生数据的一些特征。

而控制标志位则可以由程序写入,以达到控制处理机状态或程序执行方式的表征。

2.4试述8086CPU标志寄存器各位的含义与作用。

【解】:

(1)6个状态标志位的功能分别叙述如下:

CF(CarryFlag)——进位标志位。

当执行一个加法(或减法)运算,使最高位产生进位(或借位)时,CF为1;否则为0。

PF(ParityFlag)——奇偶标志位。

该标志位反映运算结果中1的个数是偶数还是奇数。

当指令执行结果的低8位中含有偶数个1时,PF=1;否则PF=0。

AF(AuxiliarycarryFlag)——辅助进位标志位。

当执行一个加法(或减法)运算,使结果的低4位向高4位有进位(或借位)时,AF=1;否则AF=0。

ZF(ZeroFlag)——零标志位。

若当前的运算结果为零,ZF=1;否则ZF=0。

SF(SignFlag)——符号标志位。

它和运算结果的最高位相同。

OF(OverflowFlag)——溢出标志位。

当补码运算有溢出时,OF=1;否则OF=0。

(2)3个控制标志位用来控制CPU的操作,由指令进行置位和复位。

DF(DirectionFlag)——方向标志位。

它用以指定字符串处理时的方向,当该位置“1”时,字符串以递减顺序处理,即地址以从高到低顺序递减。

反之,则以递增顺序处理。

IF(InterruptenableFlag)——中断允许标志位。

它用来控制8086是否允许接收外部中断请求。

若IF=1,8086能响应外部中断,反之则不响应外部中断。

注意:

IF的状态不影响非屏蔽中断请求(NMI)和CPU内部中断请求。

TF(TrapFlag)——跟踪标志位。

它是为调试程序而设定的陷阱控制位。

当该位置“1”时,8086CPU处于单步状态,此时CPU每执行完一条指令就自动产生一次内部中断。

当该位复位后,CPU恢复正常工作。

2.58086中,存储器为什么采用分段管理?

【解】:

8086/8088的地址总线宽度为20位,其最大寻址空间是1?

MB。

而其他微处理器则在实模式下只能访问前1MB的存储器地址。

实际上,实模式就是为8086/8088而设计的工作方式,它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法。

程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。

每个段的大小可达64?

KB,这样段内地址可以用16位表示。

存储器分段的方法虽然给程序设计带来一定的麻烦,但这种方法可以扩大存储空间,而且对于程序的再定位也是很方便的。

2.6什么是逻辑地址?

什么是物理地址?

如何由逻辑地址计算物理地址?

【解】:

物理地址:

完成存储器单元或I/O端口寻址的实际地址成为物理地址,CPU型号不同其物理地址也不同。

物理地址是指CPU和存储器进行数据交换时实际所使用的地址,而逻辑地址是程序使用的地址。

物理地址由两部分组成:

段基址(段起始地址高16位)和偏移地址。

前者由段寄存器给出,后者是指存储单元所在的位置离段起始地址的偏移距离。

当CPU寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址。

在取指令时,CPU自动选择代码段寄存器CS,左移4位后,加上指令提供的16位偏移地址,计算出要取指令的物理地址。

堆栈操作时,CPU自动选择堆栈段寄存器SS,将其内容左移4位后,加上指令提供的16位偏移地址,计算出栈顶单元的物理地址。

每当存取操作数时,CPU会自动选择数据段寄存器(或附加段寄存器ES),将段基值左移4位后加上16位偏移地址,得到操作数在内存的物理地址。

2.9在80x86微机的输入/输出指令中,I/O端号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00H~0FFH的端口号。

试问可直接由指令指定的I/O端口数是多少?

【解】:

由于在80x86的输入/输出指令中,可以直接在00H~0FFH指定,所以直接由指令指定的I/O端口数是256。

3.1指令分成几部分?

每部分的作用是什么?

【解】:

每条指令由两部分组成:

操作码字段和地址码字段。

操作码字段:

用来说明该指令所要完成的操作。

地址码字段:

用来描述该指令的操作对象。

一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。

3.2指出下列MOV指令的源操作数的寻址方式:

MOVAX,1234H

MOVAX,BX

MOVAX,[BX]

MOVAX,TABLE;TABLE;TABLE是一个变量名

MOVAX,[1234H]

MOVAX,[BX+1234H]

MOVAX,[BP][SI]

MOVAX,[BX+SI-1234H]

【解】:

MOVAX,1234H立即寻址

MOVAX,BX寄存器寻址

MOVAX,[BX]寄存器间接寻址

MOVAX,TABLE;TABLE是一个变量名直接寻址方式

MOVAX,[1234H]直接寻址方式

MOVAX,[BX+1234H]寄存器相对寻址

MOVAX,[BP][SI]基址变址寻址

MOVAX,[BX+SI-1234H]相对地址变址寻址

3.3设:

(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。

求下列每条指令源操作数的存储单元地址:

MOVAX,[1234H]

MOVAX,[BX]

MOVAX,TABLE[BX]

MOVAX,[BP]

MOVAX,[BP][SI]

【解】:

存储单元地址:

(DS)×10H+EA=2000H×10H+1234H=21234H

存储单元地址:

(DS)×10H+(BX)=2000H×10H+0100H=20100H

存储单元地址:

(DS)×10H+EA=2000H×10H+0100H+000AH=2010AH

存储单元地址:

(SS)×10H+EA=1000H×10H+0010H=10010H

储单元地址:

(SS)×10H+EA=1000H×10H+0010H+0002H=10012H

3.4设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令,要求使用以下几种寻址方式:

⑴直接寻址⑵寄存器间接寻址⑶寄存器相对寻址⑷基址变址寻址

【解】:

(1)直接寻址

(2)寄存器间接寻址(3)寄存器相对寻址(4)基址变址寻址

MOVAX,ARRAY+8MOVBX,ARRAY+8MOVBX,8LEABX,ARRAY

MOVAX,[BX]MOVAX,ARRAY[BX]MOVSI,8

MOVAX,[BX+SI]

3.5设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在当前代码段偏移地址是0100H处,(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=30H,数据段定义的字变量ARRAY的内容为1000H,试写出下列转移指令的目标转移地址

⑴JMPNEARPTR

⑵JMPBX

⑶JMPWORDPTRARRAY

【解】:

⑴JMPNEARPTR此转移指令的目标转移地址为:

20100H

⑵JMPBX此转移指令的目标转移地址为:

21000H

⑶JMPWORDPTRARRAY此转移指令的目标转移地址为:

23000H

3.6设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在3000H:

1000H处。

当前(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=03H,(11002H)=00H,(11003H)=30H,数据段定义的字变量ARRAY的内容为0300H,(ARRAY+2)=3000H,试写出下列转移指令的目标转移地址:

⑴JMPFARPTRNEXT

⑵JMPDWORDARRAY

【解】:

⑴JMPFARPTRNEXT此转移指令的目标转移地址为:

31000H

⑵JMPDWORDARRAY此转移指令的目标转移地址为:

30300H

3.7下列每组指令有何区别?

(1)MOVAX,1234HMOVAX,[1234H]

(2)MOVAX,TABLEMOVAX,[TABLE]

(3)MOVAX,TABLELEAAX,TALBE

(4)MOVAX,BXMOVAX,[BX]

【解】:

(1)MOVAX,1234H将立即数1234H送到寄存器AX中

MOVAX,[1234H]将存储区[1234H]中的内容送到寄存器AX中

(2)MOVAX,TABLE将标号TABLE的地址送到寄存器AX中

MOVAX,[TABLE]将存储区[TABLE]中的内容送到寄存器AX中

(3)MOVAX,TABLE将标号TABLE的地址送到寄存器AX中

LEAAX,TALBE将标号TABLE的地址送到寄存器AX中

(4)MOVAX,BX寄存器寻址

MOVAX,[BX]寄存器间接寻址

3.8MOVCS,AX指令正确吗?

【解】:

MOVCS,AX指令不正确。

因为CS是指令寄存器,由系统自动改变,不能由指令进行更改。

3.9写一指令序列,将3456H装入DS寄存器。

【解】:

MOVAX,3456H

MOVDS,AX

3.10若正在访问堆栈中03600H单元,则SS和SP的值是多少?

【解】:

若正在访问堆栈中03600H单元,则SS和SP的值会有好多组合,其中可以有SS是0300H,SP是0600H。

3.11若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的物理地址)。

【解】:

物理地址=(SS)×10H+SP

3.16解释XLAT指令是怎样转换AL寄存器中的内容的。

并编写一段程序用XLAT指令将BCD码0~9转换成对应的ASCII码,并将ASCII码存入数据ARRAY中。

【解】:

XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换。

使用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移量存入AL寄存器中。

XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送入AL寄存器。

程序如下:

TABLEDB30H,31H,┅,39H

ARRAYDB1ODUP(?

MOVCL,10

MOVSI,0

MOVBX,OFFSETTABLE

MOVAL,AL

AGAIN:

XLAT

MOV[SI],AL

INCSI

INCAL

LOOPAGAIN

3.17若(AX)=0001H,(BX)=0FFFFH,执行ADDAX,BX之后,标志位ZF、SF、CF和OF各是什么?

【解】:

(AX)=0001H=0000000000000001B

+(BX)=0FFFFH=1111111111111111B

(AX)=0001H=10000000000000000B则:

ZF=1、SF=0、CF=1、OF=0

3.18写一指令序列完成将AX寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变。

【解】:

ORAX,000FH(ORAX,0000000000001111B)

ANDAX,1FFFH(ANDAX,0001111111111111B)

XORAX,01C0H(XORAX,0000000111000000B)

3.19试写出执行下列指令序列后AX寄存器的内容。

执行前(AX)=1234H。

MOVCL,7

SHLBX,CL

【解】:

(AX)=1234H=0001001000110100B

执行后:

(AX)=0001101000000000B=0001101000000000B=1A00H

4.1假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?

它们的错误是什么?

⑴MOVBP,AL⑵MOVWORD_OP[BX+4*3][DI],SP

⑶MOVWORD_OP1,WORD_OP2⑷MOVAX,WORD_OP1[DX]

⑸MOVSAVEWORD,DS⑹MOVSP,SS:

DATA_WORD[BX][SI]

⑺MOV[BX][SI],2⑻MOVAX,WORD_OP1+WORD_OP2

⑼MOVAX,WORD_OP1-WORD_OP2+100⑽MOVWORD_OP1,WORD_OP1-WORD_OP2

【解】:

⑴MOVBP,AL两个操作数不匹配

⑵MOVWORD_OP[BX+4*3][DI],SP         

⑶MOVWORD_OP1,WORD_OP2  两个内存单元之间不能直接传送数据

⑷MOVAX,WORD_OP1[DX]

⑸MOVSAVEWORD,DS

⑹MOVSP,SS:

DATA_WORD[BX][SI]  当基址为BX时,选取DS寄存器

⑺MOV[BX][SI],2

⑻MOVAX,WORD_OP1+WORD_OP2

⑼MOVAX,WORD_OP1-WORD_OP2+100

⑽MOVWORD_OP1,WORD_OP1-WORD_OP2

4.2假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:

⑴ADDVAR1,VAR2⑵SUBAL,VAR1

⑶JMPLAB[SI]⑷JNZVAR1

⑸JMPNEARLAB

【解】:

⑴ADDVAR1,VAR2

ADD两个操作数不能同时为存储单元,

MOVAX,VAR1

ADDAX,VAR2

⑵SUBAL,VAR1

两个操作数不匹配

SUBAX,VAR1

⑶JMPLAB[SI]

LAB与[SI]不能相加

JMPWORDPTR[SI]

⑷JNZVAR1

JNZ后面应是标号,不应是变量

JNZLAB

⑸JMPNEARLAB

缺少PTR运算符

JMPNEARPTRLAB

4.3画图说明下列语句所分配的存储空间及初始化的数据值。

⑴BYTE_VARDB’BYTE’,12,-12H,3DUP(0,?

,2DUP(1,2),?

⑵WORD_VARDW5DUP(0,1,2),?

,-5,,'BY','TE',256H

【解】:

(1)

(2)

4.4假设程序中的数据定义如下:

PARTNODW?

PNAMEDB16DUP(?

COUNTDD?

PLENTHEQU$-PARTNO

问PLENTH的值为多少?

它表示什么意义?

【解】:

PLENTH的值为22,它表示数据的个数。

4.5有符号定义语句如下:

BUFFDB1,2,3,’123’

EBUFFDB0

LEQUEBUFF-BUFF

问L的值是多少?

【解】:

PLENTH的值为6。

4.6假设程序中的数据定义如下:

LNAMEDB30DUP(?

ADDRESSDB30DUP(?

CITYDB15DUP(?

CODE-LISTDB1,7,8,3,2

⑴用一条MOV指令将LNAME的偏移地址放入AX。

⑵用一条指令将CODE_LIST的头两个字节的内容放入SI。

⑶写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。

【解】:

⑴用一条MOV指令将LNAME的偏移地址放入AX。

MOVAX,OFFSETLANME

⑵用一条指令将CODE_LIST的头两个字节的内容放入SI。

MOVSI,WORDPTRCODE_LSIT

⑶写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。

CODE_LENGHTEQUCITY-CODE_LIST

4.7试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。

然后,写出完整的代码段,其功能为:

把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。

【解】:

参考程序如下:

DATA_SEGSEGMENT

DB1DB5

DATA_LISTDB-1,0,2,5,4,5DUP(?

COUNTDB5

MAXDB?

MINDB?

DATA_SEGENDS

CODE_SEGSEGMENT

ASSUMECS:

CODE_SEG,DS:

DATA_SEG

STARTPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA_SEG

MOVDS,AX

LEABX,DATA_LIST

MOVCX,COUNT-1

MOVAL,[BX]

MOVAH,[BX+1]

LOOP1:

INCBX

CMPAH,AL

JAELOOP1

XCHGAH,AL

LOOP2INCBX

CMPAH,[BX]

JAELIS

XCHGAH,[BX]

JMPLOP2

LIS:

CMPAL,[BX]

JBELOP2

XCHGAL,[BX]

LOOP2

MOVMAX,AH

MOVMIN,AL

RET

STARTENDP

CODE_SEGENDS

ENDSTART

4.10给出等值语句如下:

ALPHAEQU100

BETAEQU25

GAMMAEQU2

下列表达式的值是多少?

⑴ALPHA*100+BETA⑵ALPHAMODGAMMA+BETA

⑶(ALPHA+2)*BETA-2⑷(BETA/3)MOD5

⑸(ALPHA+3)*(BETAMODGAMMA)⑹ALPHAGEGAMMA

⑺BETAAND7⑻GAMMAOR3

【解】:

⑴ALPHA*100+BETA

100×10025=10025

⑵ALPHAMODGAMMA+BETA

100/(25+2)=19

⑶(ALPHA+2)*BETA-2

(100+2)*25=2548

⑷(BETA/3)MOD5

(25/3)MOD5=3

⑸(ALPHA+3)*(BETAMODGAMMA)

(100+3)*(25MOD2)=103

⑹ALPHAGEGAMMA

100GZGAMMA=0FFFFH

⑺BETAAND7

25AND7=1

⑻GAMMAOR3

2OR3=3

4.9对于下面的数据定义,三条MOV指令分别汇编成什么?

(可用立即数方式表示)

TABLEADW10DUP(?

TABLEBDB10DUP(?

TABLECDB’1234’

MOVAX,LENGTHTABLEA

MOVBL,LENGTHTABLEB

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

当前位置:首页 > 初中教育 > 语文

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

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