微机原理课后答案1.docx
《微机原理课后答案1.docx》由会员分享,可在线阅读,更多相关《微机原理课后答案1.docx(19页珍藏版)》请在冰豆网上搜索。
微机原理课后答案1
4.本章作业:
(带答案)
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
4、编写程序实现下述功能:
答案:
(1)将BX寄存器的低8位清零,其余位不变。
ANDBX,0FF00H
(2)将DL寄存器的最高位置1,其余位不变。
ORDL,80H
(3)将CL寄存器的高4位保持不变,低4位取反。
XORCL,0FH
(4)测试CX中的最低位,当最低位为0时将AL置1,否则AL置0。
答案:
TESTCX,01H
JZL1
MOVAL,0
HLT
L1:
MOVAL,1
HLT
(5)测试SI,如果SI为奇数将AL置1,否则AL置0。
答案:
TESTSI,01H
JNZL1
MOVAL,0
HLT
L1:
MOVAL,1
HLT
本章典型例题分析:
【例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
1.本章作业(带答案):
1、计算下列程序分别执行后AX寄存器的内容。
(1)MOVAX,0
MOVBX,3456H
TESTBX,1000H
JZNEXT答案:
INCAX
NEXT:
HLT(AX)=1
(2)MOVAX,0
XORBX,BX
AGAIN:
INCBX
ADDAX,BX
CMPBX,5
JBAGAIN
HLT(AX)=(((((0+1)+2)+3)+4)+5)=15
(3)MOVAL,0FFH
CBW
INCAX
INCAX
XCHGAH,AL
SHRAH,1
RCRAL,1
HLT(AX)=0080H
(4)MOVAX,0
MOVBX,1234H
MOVCX,16
AGAIN:
SHLBX,1
JNCNEXT
INCAX
NEXT:
LOOPAGAIN
HLT检测1的个数(AX)=5
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
〖例3〗为某8位微机(地址总线为16位)设计一个12KB容量的存储器,要求EPROM区为8KB,从0000H开始,采用2716芯片(2K×8);RAM区为4KB,从2000H开始,采用2114(1K×4)芯片。
分析:
根据要求可先列出存储器地址分配表如表7-4所示。
当然,也可画出如图7-23所示相应的存储单元地址分配图。
表7-4示例地址分配表
容量分配
芯片型号
地址范围
容量分配
芯片型号
地址范围
2KB
2716
0000~07FFH
1KB
2114
2000~23FFH
2KB
2716
0800~0FFFH
1KB
2114
2400~27FFH
2KB
2716
1000~17FFH
1KB
2114
2800~2BFFH
2KB
2716
1800~1FFFH
1KB
2114
2C00~2FFFH
需要指出的是,在微机应用系统中,存储器或I/O接口译码电路的设计方案不是唯一的,例如,本例的译码电路既可以采取ROM、RAM分别译码,即由译码器直接输出8个存储器芯片所需的片选信号,也可以采取二次译码的方式。
所谓二次译码方式,即先按“片”地址为2KB进行译码,得到一些映射地址空间为2KB的片选信号;再利用其中的某一条或某几条输出与一条地址线进行二次译码,得到映射地址空间为1KB的片选信号。
这种方法可推广到多种不同容量的存储芯片一起使用的场合,这时可通过多层译码来相继获得容量从大到小的不同芯片的片选信号。
对于本例,由于整个存储器ROM和RAM共为12KB,按2KB为一片共需6根“片选”信号线,故可选74LS138作为译码器。
这样,根据前面的地址分配表或分配图可画出如图7-24所示的地址位图。
图中第一次译码为2KBROM芯片提供片选信号,第二次译码为1KBRAM芯片提供片选信号。
根据图7-24的地址位图,可画出二次译码方式所对应的外部译码电路如图7-25所示,进一步可画出如图7-26所示的存储器与系统总线接口的连接图。
图7-24地址位图
图7-25芯片片选译码电路
图7-26存储器接口连接图
4.本章作业:
(带答案)
1.若用4K×1位的RAM芯片组成16K×8位的存储器,需要多少芯片(32片)?
A19~A0地址线中哪些参与片内寻址(A0~A13)?
哪些参与作芯片组的片选择信号(A14~A19)?
2.下列RAM各需要多少条地址线进行寻址?
多少条数据I/O线?
地址线数据线地址线数据线
(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
3.使用下列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
4.若用2114芯片组成2KBRAM,地址范围为3000H~37FFH,问地址线应如何连接?
(假设CPU只有16条地址线,8根数据线,可选用线选法和全译码法)
CBA
A15A14A13A12A11A10A9A8A7~A0
001100000~0
001101111~1
2、假设标志寄存器各标志初始值为0,分别单独执行如下指令后,请指出标志寄存器CF、AF、ZF、SF、OF的值。
答案:
CFAFZFSFOF
(1)MOVAX,BX00000
(2)XORAX,AX00100
(3)MOVAX,1968H
ADDAX,1971H00000
(4)MOVCX,0FFFFH
INCCX01100
(5)MOVBX,0
SUBBX,80H10010
(6)MOVDX,0ABCDH
SHLDX,110001
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
ENDSTART
7、用2114存储器芯片组成2KBRAM,地址范围为C800H~CFFFH,问地址线、数据线及相关的控制线如何连接?
(假设CPU只有16根地址线、8根数据线,控制线为WR、RD、IO/M,采用LS138全译法。
见下图,)
CBA
A15A14A13A12A11A10A9A8A7~A0
110010000~0
110011111~1
试按如下要求分别编写8253的初始化程序,已知8253的计数器0~2和控制字I/O地址依次为204H~207H。
①使计数器1工作在方式0,仅用8位二进制计数,计数初值为128。
②使计数器0工作在方式1,按BCD码计数,计数值为3000。
③使计数器2工作在方式2,计数值为02F0H。
〔解答〕
①
moval,50h
movdx,207h
outdx,al
moval,128;=80h
movdx,205h
outdx,al
②
moval,33h
movdx,207h
outdx,al
movax,3000h;不是3000
movdx,204h
outdx,al
moval,ah
out