何小海版微机原理与接口技术部分课后习题.docx

上传人:b****4 文档编号:26911557 上传时间:2023-06-24 格式:DOCX 页数:24 大小:738.20KB
下载 相关 举报
何小海版微机原理与接口技术部分课后习题.docx_第1页
第1页 / 共24页
何小海版微机原理与接口技术部分课后习题.docx_第2页
第2页 / 共24页
何小海版微机原理与接口技术部分课后习题.docx_第3页
第3页 / 共24页
何小海版微机原理与接口技术部分课后习题.docx_第4页
第4页 / 共24页
何小海版微机原理与接口技术部分课后习题.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

何小海版微机原理与接口技术部分课后习题.docx

《何小海版微机原理与接口技术部分课后习题.docx》由会员分享,可在线阅读,更多相关《何小海版微机原理与接口技术部分课后习题.docx(24页珍藏版)》请在冰豆网上搜索。

何小海版微机原理与接口技术部分课后习题.docx

何小海版微机原理与接口技术部分课后习题

 

(何小海版)微机原理与接口技术部分课后习题

串操作指令特点:

1.可用前缀使其重复操作;

2.每操作一次自动修改SI和DI内容,当DF=0时为增量,DF=1为减量;

3.所有源操作数地址放在SI中,在DS段,串长≤64K;

所有目标操作数地址放在DI中,在ES段,串长≤64K;

4.用重复前缀时,如果条件满足且CX≠0时重复,每重复一次

CX←CX–1,否则结束重复;

5.重复操作时IP不变,中断返回后继续操作。

使用串操作指令时注意:

1.SI←源串首(末)址

DI←目标串首(末)址;

2.CX←串长度;

3.设DF值;

4.选重复前缀;

5.使用条件重复前缀时,判断结束条件(即是CX=0还是ZF=0/1结束)

指令执行时间:

计算机中的计时单位:

(1).指令周期:

执行一条指令所花的时间;

(2).总线周期:

CPU每访问一次内存或I/O端口所花的时间;

(3).时钟周期(T周期):

计算机主频的倒数,用T表示,即T=1/F

1、试分别说明下列指令中源操作数和目的操作数采用的寻址方式:

答案:

目的操作数源操作数

(1)MOVAX,0FFFFH寄存器立即

(2)MOVES,AX寄存器寄存器

(3)XORCL,[100H]寄存器直接

(4)ADD[SI],DX寄存器间寄存器

(5)MOVES:

[2000H],CL直接寄存器

(6)SUB[BX+SI],1基+变立即

(7)ADCAX,[BX+SI+10H]寄存器相对基+变

(8)PUSHDS隐含寄存器

(9)CLD隐含

(10)CMP[BP+DI],CL基+变寄存器

2、若(BX)=1123H,(SI)=1968H,位移量=0313H,(DS)=1971H,试确定由这些寄存器和下列寻址方式产生的有效地址和物理地址:

答案:

EA物址

(1)直接寻址;0313H19A23H

(2)用BX的寄存器间接寻址;1123H1A833H

(3)用BX的寄存器相对寻址;1436H1AB46H

(4)用BX和SI的基址变址寻址;2A8BH1C19BH

(5)用BX和SI的相对基址加变址寻址。

2D9EH1C4AEH

3、连续执行以下指令,并在空格中填写执行指令的结果。

答案:

MOVAX,2060HAL=60HAH=20HCF=

MOVDS,AXDS=2060HAH=20HCF=

ADDAL,AHAL=80HAH=20HCF=0

INCAXAL=81HAH=20HCF=0

MOVDX,512DL=00HDH=02HCF=0

SUBAX,DXAL=81HAH=1EHCF=0

第3章:

汇编语言程序设计

1.本章学习要求

(1).应熟悉的内容:

汇编语言的格式、语句行的构成。

(2).应掌握的内容:

指示性语句、指令性语句及相互区别、作用。

(3).应熟悉掌握的内容:

各种结构的汇编语言程序设计的方法,特别是分支结构和循环结构程序的特点和设计。

2.本章重点难点分析:

伪指令、程序设计、子程序中参数通过堆栈传递较难。

通过看例题、做作业和上机实习解决。

如:

汇编程序是将由助记符号所编写的汇编语言源程序转换为计算机能直接执行的目标程序的软件,即:

汇编语言源程序

.ASM

MASM.OBJLINK.EXE

上图可看出汇编语言源程序(扩展名为.ASM)经过“汇编程序”汇编后生成二进制编码的目标程序(.OBJ),再经过“连接程序”生成可执行文件(.EXE)便可以上机执行或使用DEBUG程序进行调试。

而指示性语句(伪指令)是告诉汇编程序如何将汇编语言源程序转换为目标程序的语句,在可执行的目标程序生成后的软件中,伪指令是看不见的。

如:

SEGMENT是表示一个段的开始,ENDS表示段结束;

而ASSUME告诉汇编程序,将某一个段寄存器设置为存放某一个逻辑段的段址,即明确指出源程序中的逻辑段与物理段之间的关系。

当汇编程序汇编一个逻辑段时,即可利用相应的段寄存器寻址该逻辑段中的指令或数据。

也就是说ASSUME是建立一个段寄存器与段名的对照表,汇编时使汇编程序能找到本段属于哪个段寄存器,在此对照表中所出现的存储器操作数,寻址时只需给出偏移地址,否则还应给出段地址。

关键字NOTHING表示取消前面用ASSUME伪操作对这个段寄存器的设置。

使用ASSUME语句,仅仅告诉汇编程序关于段寄存器与定义段之间的对应关系。

但它并不意味着汇编后这些段地址已装入了相应的段寄存器中,这些段地址的真正装入,仍需要用程序来完成,且这4个段寄存器的装入略有不同。

3.本章典型例题分析:

【例1】若从0200H单元开始有100个数,编一个程序检查这些数,正数保持不变,负数都取补后送回。

DATASEGMENT

ORG0200H

STRINGDB4DUP(-55,5DUP(6,-10,-8,9),2DUP(-4,0))

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP()

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

STARTPROCFAR

BEGIN:

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVCX,100

LEASI,STRING

AGAIN:

MOVAL,[SI]

ANDAL,AL

JNSOVER;AL>0,跳至OVER

NEGAL;AL<0,对AL求补

OVER:

MOV[SI],AL

INCSI

LOOPAGAIN

INT3

RET

STARTENDP

CODEENDS

ENDBEG

【例2】数据块间的搬移程序。

程序要求把内存中一数据块(称为源数据块)传送到另一存储区(称为目的数据块)。

图4-11给出源数据块和目的数据块在存储器中可能的3种情况:

两块分离和有部分重叠。

对于两个数据块分离的情况,如图4-11(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。

但对于有部分重叠的情况,则要加以分析,否则重叠部分部分会因“搬移”而遭破坏,从图4-11(b)和(c)可以得出以下结论:

当源数据块首址<目的块首址时,从数据块末地址开始传送数据。

当源数据块首址>目的块首址时,从数据块首地址开始传送数据。

流程图如图4-12所示,

00000H00000H00000H

源数

据块源数目的

据块数据块

目的源数

目的数据块据块

数据块

FFFFFHFFFFFHFFFFFH

(a)(b)(c)

图4-11数据块之间的三种情况

图4-12

程序如下:

STACKSEGMENT STACK

DW 64 DUP()

STACKENDS

CODESEGMENT

ASSUME CS:

CODE,SS:

STACK

START:

MOV CX,0010H;取搬家字节数(16个字节)

MOV SI,3100H;取源块首址

MOV DI,3200H;取目的块首址

CMP SI,DI;从首址开始?

JA A2;是,转移

ADD SI,CX;否,以末地址开始搬家

ADD DI,CX

DEC SI

DEC DI

A1:

MOV AL,[SI];从末址开始搬家

MOV [DI],AL

DEC SI

DEC DI

DEC CX

JNE A1

JMP A3

A2:

MOV AL,[SI];从首址开始搬家

MOV [DI],AL

INC SI

INC DI

DEC CX

JNE A2

A3:

MOV AH,4CH

INT 21H

CODEENDS

END START

4.本章作业(带答案):

2、若在自2000H单元开始有一个1000个字节的数据块,要把它传送到自2200H开始的存储区中去,用以下三中方法,分别编制程序:

(1)不用串操作指令。

(2)用单个传送的串操作数据传送指令。

(3)用带重复前缀的串操作数据传送指令。

程序如下:

DATASEGMENT

ORG2000H

N1DBn1,n2,…n1000

N2EQU2000H+1000–1

CONEQU1000

DATAENDS

STACKSEGMENTSTACK‘STACK’

DW100DUP(

STACKENDS

CODESEGMENT

ORG1000H

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

MAINPROC

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEASI,N1+1000–1;

(2);(3)

MOVDI,N2

MOVCX,CON;STD

L1:

MOVAL,[SI];MOVSB;REPMOVSB

MOV[DI],AL

DECSI

DECDI

LOOPL1;LOOPL1

MOVAH,4CH

INT21H

MAINENDP

CODEENDS

ENDSTART

3、若在存储器中有数a、b、c、d(它们连续存放),编写一个程序实现:

((a*10+b)*10+c)*10+d(假设和小于65535)

程序如下:

DATASEGMENT

BCMDWa,b,c,d

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

BCD1PROCFAR

START:

MOVAX,DATA

MOVDS,AX

LEASI,BCM

MOVCX,3

MOVAX,[SI]

L1:

INCSI

SHLAX,1;(AX)←(AX)×2

MOVBX,AX;(BX)←(AX)×2

SHLAX,1;(AX)←(AX)×4

SHLAX,1;(AX)←(AX)×8

ADDAX,BX;(AX)←(AX)×10

ADDAX,[SI]

LOOPL1

INCSI

MOV[SI],AX

MOVAH,4CH

INT21H

BCD1ENDP

CODEENDS

ENDSTART

4、已知数组A包含10个互不相等的整数,数组B包含15个互不相等的整数。

试编写一程序,将既在A中出现又在B中出现的偶数存放在数组C中。

程序如下:

DATASEGMENT

ORG0500H

DATAADWA1,A2,…A10

DATABDWB1,B2,…B15

COUNTAEQU10

COUNTBEQU15

DATACDW10DUP()

DATAENDS

STACKSEGMENTSTACK'STACK'

DB100DUP()

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

STARTPROCFAR

BEGIN:

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVES,AX

MOVDS,AX

LEABX,DATAC;(BX)=数组C首址

CLD

LEASI,DATAA;(SI)=数组A首址

MOVDX,COUNTA;(DX)=数组A元素个数

LP1:

LODSW;取数组A元素到AX

LEADI,DATAB;(DI)=数组B首址

MOVCX,COUNTB;(CX)=数组B元素个数

REPNESCASW;(AX)=数组B元素?

不同重复

JNZNEXT;B中无此A元素转NEXT

TESTAX,01H

JNZNEXT

MOV[BX],AX;有A元素且是偶数存入C中

INCBX

INCBX

NEXT:

DECDX

JNZLP1

INT3

STARTENDP

CODEENDS

ENDBEGIN

5、若自STRING开始有一个字符串(以‘$’号作为字符串的结束标志),请编程查找此字符串中有无字符‘#’,有多少个‘#’,并将个数存放在NUMBER字单元中,且把每一个‘#’字符所存放的偏移地址放到自POINTER开始的连续存储字单元中。

程序如下:

DATASEGMENT

ORG0100H

STRINGDB'593#6707#84BK47#68H#8K8#497$'

NUMBERDB

POINTERDW50DUP(

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP()

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

STARTPROCFAR

BEGIN:

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVES,AX

MOVDS,AX

LEASI,STRING

LEADI,POINTER

XORBL,BL;BL清0

AGAIN:

MOVAL,[SI]

CMPAL,’$’;与’$’比较

JZSTOP

CMPAL,’#’

JNZNEXT

MOVDX,[SI]

MOV[DI],DX

INCDI

INCDI

INCBL

NEXT:

INCSI

JMPAGAIN

STOP:

LEADI,NUMBER

MOV[DI],BL

INT3

STARTENDP

CODEENDS

ENDBEGIN

一、8282(地址锁存器)的作用:

在T1时锁存地址信息。

二、8284(时钟发生器)的作用:

1.提供系统时钟CLK

2.同步RESET

3.同步READY

4.提供其他系统时钟

三、8286(总线缓冲器)的作用:

1.数据缓冲

2.增强总线负载能力

3.控制数据传送方向

四、8288(总线控制器)的作用:

在8088/8086工作在最大模式时,根据S2~S0的信号,输出系统各种控制信号

.本章作业:

(带答案)

1.若用4K×1位的RAM芯片组成16K×8位的存储器,需要多少芯片(32片)

2.A19~A0地址线中哪些参与片内寻址(A0~A13)

3.哪些参与作芯片组的片选择信号(A14~A19)

4.

5.下列RAM各需要多少条地址线进行寻址多少条数据I/O线

6.

地址线数据线地址线数据线

(1)512×4;94(5)4K×1;121

(2)1K×4;1046)16K×4;144

(3)1K×8;108(7)64K×1;161

(4)2K×1;111(8)256K×4;184

7.

使用下列RAM芯片,组成所需的存储容量,各需多少RAM芯片各需多少RAM芯片组共需多少寻址线每块片子需多少寻址线

片数组数总线数片内线

(1)512×4的芯片,组成8K×8的存储容量;3216139

(2)1024×1的芯片,组成32K×8的存储容量;256321510

(3)1024×4的芯片,组成4K×8的存储容量;841210

(4)4K×1的芯片,组成64K×8的存储容量;128161612

8.若用2114芯片组成2KBRAM,地址范围为3000H~37FFH,问地址线应如何连接(假设CPU只有16条地址线,8根数据线,可选用线选法和全译码法)

CBA

A15A14A13A12A11A10A9A8A7~A0

001100000~0

001101111~1

 

第三部分综合练习题

1、名词解释∶

•ASSUME,SEGMENT,CPU,BCD码,ASCII码,RAM,EPROM,IP,SP,CS,DS,开中断,总线周期,T周期,段寄存器,字节、字,汇编程序,堆栈,字长,中断,伪指令,指示性语句、指令性语句、OFFSET、物理地址、逻辑地址、ROM、ORG、AB、DB、CB、指令周期、全译码、局部译码、内存、外存┅

综合练习题答案如下:

1、名词解释(略)

3、判断下列指令正误,如果错误请指出原因。

答案:

(1)MOVCL,259×数据不匹配

(2)XORBL,BH√

(3)ADD100,AL×立即数不能为目标操作数

(4)MOVSS,2200H×立即数不能直接送基寄存器

(5)POPCS×POP不能对CS

(6)XCHGCX,DX√

(7)INAL,260H×端口地址超过256,应用DX间接寻址

(8)MOV[BP+SI],[BX]×源和目标操作数不能同时为存储器操作数

(9)LEABX,AX×源操作数应为存储器操作数

(10)MOVAX,10H[BX]√

4、问答题:

(1)何为逻辑地址何为物理地址它们俩者之间有何关系

答:

物理地址是存储器的实际地址,一个存储单元的物理地址是惟一,逻辑地址为程序设计中所使用的存储器地址,它由段基址和地内偏移地址两部份构成,物理地址=段基址×16+偏移地址,可见一个存储单元的逻辑地址可以有若干个。

(2)什么是总线周期一个基本的总线周期由多少个T构成

答:

CPU每访问一次总线所花的时间称为总线周期,一个基本的总线周期由四个T周期构成。

(3)在使用串操作指令(如MOVS)前应注意些什么?

答:

使用串操作指令时应注意以下五点:

1·将源串的首(末)地址送入SI中、将目标串的首(末)地址送入DI中;2·将串长度送入CX中;3·设置DF的值;4·选择适当的重复前缀;5·判断串操作指令的结束条件。

(4)8088CPU有多少根地址线多少根数据线它最大直接寻址范围是多少一次对外数据传送多少BIT二进制数?

答:

8088CPU有20根地址线,8根数据线,它最大直接寻址范围是1MB,一次对外数据传送8BIT二进制数。

(5)微机中的基本计时有哪几种它们之间的有何关系

答:

微机中的基本计时有:

指令周期;总线周期;时钟周期。

一个指令周期由若干时钟周期或总线周期构成,

一个基本的总线周期由四个时钟周期构成,时钟周期是最小的计时单位,它是微机主频的倒数。

(6)8086/8088微处理器内部有哪些寄存器其主要作用是什么

答:

8086/8088微处理器内部有:

AX、BX、CX、DX、SI、DI、CS、DS、SS、ES、IP、SP、FR、BP存放数据、偏移地址、段基址以及标志。

5、自1000H单元开始,有100个无符号数(字节),编写程序计算这100个数的和,并把和存放在1971H和1972H单元,且高位存放在1972H单元。

程序如下:

DATASEGMENT

ORG1000H

N1DBn1,n2,…n100

N2EQU1971H

CONEQU100

DATAENDS

STACKSEGMENTSTACK‘STACK’

DW100DUP(

STACKENDS

CODESEGMENT

ORG2000H

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

MAINPROC

START:

MOVAX,DATA

MOVDS,AX

LEASI,N1

MOVCX,CON

XORAX,AX

L1:

ADDAL,[SI]

ADCAH,0

INCSI

LOOPL1

MOVN2,AL

MOVN2+1,AH

MOVAH,4CH

INT21H

MAINENDP

CODEENDS

ENDSTART

6、若自6000H单元开始有1000个数(字节),试针对下面情况编程将它们中的最小值、最大值找出来,并分别存放在5000H和5001H字节单元中。

(1)这1000个数为无符号数。

(2)这1000个数为带符号数。

程序如下:

DATASEGMENT

ORG6000H

BUFFERDBX1,X2,…,X1000;自定义N个无(带)符号数

COUNTEQU$-BUFFER

MAXEQU5000H;保存最大值

MINEQU5001H;保存最小值

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROC

START:

MOVAX,DATA

MOVDS,AX

MOVCX,COUNT

LEABX,BUFFER;首地址→BX

MOVAL,[BX];AL←最大值初值

MOVDL,[BX];DL←最小值初值

DECCX;循环次数减1

AGAIN:

INCBX

CMPAL,[BX];比较

JNC(JGE)NEXT1;若最大值≥[BX],则转至NEXT1

MOVAL,[BX];AL←保存最新的最大值

JMPNEXT2

NEXT1:

CMPDL,[BX];比较

JC(JL)NEXT2;若最小值<[BX],则转至NEXT2

MOVDL,[BX];DL←保存最新的最小值

NEXT2:

LOOPAGAIN;循环

MOVMAX,AX;MAX←存最大值

MOVMIN,DX;存最小值→MIN

MOVAH,4CH

INT21H;返回DOS

MAINENDP

CODEENDS

END

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

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1