微机原理习题参考答案1docx.docx
《微机原理习题参考答案1docx.docx》由会员分享,可在线阅读,更多相关《微机原理习题参考答案1docx.docx(23页珍藏版)》请在冰豆网上搜索。
![微机原理习题参考答案1docx.docx](https://file1.bdocx.com/fileroot1/2023-1/7/c8c10bc4-e0d1-40e9-b24a-3fde1a14003f/c8c10bc4-e0d1-40e9-b24a-3fde1a14003f1.gif)
微机原理习题参考答案1docx
习题与思考题(参考答案)
第一章
1.6将下列十进制数转换成二进制数。
256D=10000000B237.135D=11101101.0010001B
12.58D=1100.100101B0.374D二0.0101B
1.7写出下列二进制数对应的十进制数、八进制数、十六进制数。
1101110B二110D二156Q二6EH111011000B二472D二730Q二1D8H
1101111.1001B-111.5625D二157.44Q二6F・9H
1.8填空:
10101.001B=(21.125)D=(25.1)Q=(15.2)H
2DE.6H=(1011011110.011)B=(1336.3)Q=(734.375)D1.9试写出下列用补码表示的二进制数的真值。
00111010-00111010-+5810000000--128
10000101->11111011->-12311111110->10000010->-201111110-01111110-+126
1.10已知X=35,Y=-89,试用补码运算法则,求出:
X+Y=?
[X]补=00100011[Y]原=11011001[Y]补=10100111
[X+Y]补=[X]补+[Y]补=00100011+10100111=11001010
X+Y=
=10110110B=-54
1.11已知[X]补=10011011,[X+Y]补=10111001,试求:
1[x—Y]补=?
(有溢出,结果出错。
)
因为[X+Y]补=[X]补+[Y]补=10111001
所以[Y]补=[X+Y]补一[X]补=00011110
[-Y]补=11100010
[X—Yh=[X]补+[—丫]补=10011011+11100010=01111101
2X、Y的真值各为多少?
[X]原=11100101,X的真值为一101;[丫]原=00011110,Y的
真值为30
第二章
2.38086CPU的ALE信号的功能是什么?
答:
ALE(AddressLatchEnable)是8086CPU提供给地址锁存器的控制信号,在任何一个总线周期的T1状态,ALE输出有效电平(正脉冲),以表示当前地址/数据、地址/状态复用总线上输出的是地址信息,锁存器可利用它的下降沿将地址锁存起来。
ALE信号不能浮空。
2.48086CPU内部的寄存器由哪几种类型组成?
各自的作用是什么?
答:
8086CPU内部有14个16位寄存器,可以分为以下三组:
分别是通用寄存器组,段寄存器组,控制寄存器。
通用寄存器组可以分为两组:
数据寄存器和地址指针与变址寄存器。
数据寄存器主要用来保存算术、逻辑运算的操作数、中间结果和地址。
地址指针与变址寄存器主要用于存放或指示操作数的偏移地址。
段寄存器组:
8086/8088CPU内部设置了4个16位段寄存器,它们分别是代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS、附加段寄存器ES,由它们给出相应逻辑段的首地址,称为“段基址”。
控制寄存器:
含指令指针IP及标志位寄存器FR。
IP用来存放将要执行的下一条指令在现行代码段中的偏移地址。
标志寄存器FR用来存放运算结果的特征。
2.68086的存储器采用什么结构?
答:
8086的存储器采用分体结构。
1M的存储空间分成两个存储体:
偶地址存储体和奇地址存储体,各为512K字节。
2.78086CPU访问存储器时物理地址是如何形成的?
答:
8086CPU访问存储器时根据所执行的操作,自动选择某个段寄存器,将其中的内容(16位)自动左移4位形成20位地址的高16位,而20位地址的低4位自动添0,然后通过20位地址加法器再与16位偏移量相加,形成对应的物理地址。
2.10名词解释
(1)时钟周期:
一个时钟脉冲的时间长度,CPU的时钟频率的倒数,也称T状态。
(2)总线周期:
CPU中,BIU完成一次访问存储器或I/O端口操作所需要的时间,称作一个总线周期,也称机器周期(MachineCycle)o
(3)指令周期:
执行一条指令所需的时间称为指令周期。
(4)等待周期:
在T3和T4之间插入的周期。
(4)空闲状态:
CPU不执行总线周期时的状态。
(5)时序:
计算机操作运行的时间顺序。
2.12如果8086的CLK引脚输入的时钟脉冲频率为4MHz,那么一个基本的总线周期是多少?
答:
T=l/4us,那么一个基本的总线周期是4T=1use
第三章
3.5已知某个系统的ROM容量为6K字节,首地址为2800H,求其最后一个单元的地址。
答:
最后一个单元的地址=2800H+17FFH=3FFFH
3.6采用Intel2114(1KX4位)RAM芯片,组成64KX8位的存储器,需要多少片2114?
答:
需要128块。
注:
扩展时需要的芯片数量可以这样计算:
要构成一个容量为MX7位的存储器,若使用pXk位的芯片(p3.7某RAM芯片的存储容量为4096X8位,则该芯片的引脚中有几条数据线和几条地址线?
已知某RAM芯片引脚中有8条数据线,12条地址线,那么该芯片的存储容量是多少?
答:
该芯片的外部引脚应有8条数据线,12条地址线。
RAM芯片引脚中有8条数据线,12条地址线,那么该芯片的存储容量是4KX8位。
3.8在8086存储器系统的最高地址区组成32KB的ROM,要求采用2764芯片(8KX8的EPROM),以及利用74LS138译码器进行全译码,请画出这些芯
第四章
4.1试出指令MOVBX,3040H和MOVBX,[3040H]有什么不同?
1、寻址方式不同:
立即数寻址和直接寻址。
2、运行结果不同:
MOVBX,3040H;BX二3040H
4.2指出下列指令是否有错,并说明理由。
(1)MOV[DI],[SI]
MOVBX,[304011];将DS段304011和3041II的内容送BX
(2)
MOV
CS,
AX
(3)
MOV
120(
J,AX
(4)
MOV
DS,
CS
(5)
POP
CS
(6)
MOV
CL,
AX
(7)
MOV
[500(
川],
错,错,错,错,错,错,
内存单元之间不能直接进行数据传送CS不能做目的操作数立即数不能做目的操作数段寄存器之间不能互相传送CS不能做目的操作数源、目的操作数长度不一致
[1000II];错,内存单元之间不能直接进行数据传送
4.3在8086中,堆栈操作是字操作还是字节操作?
已知SS二1050H,SP二0006H,AX二1234H,若对AX执行压栈操作(即执行PUSHAX);试问AX的内容存放在何处?
答:
堆栈操作是字操作。
入栈时“先减后压”(SP先减2,再压入操作数),执行压栈操作后AL的内容存放在10504H,AH的内容存放在10505Ho
4.4假如要从200中减去AL中的内容,用SUB200,AL对吗?
如果不对,应采用什么方法?
答:
不对,立即数不能作为目的操作数。
先把立即数传送到一个存储器或寄存器当中。
例如:
MOVBL,200
SUBBL,AL
或:
NEGAL
ADDAL,200
4.5编程求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果
放内存(2800H)单元中。
解:
CMP
AX
BX
CMPAX,BX
CLC
JA
PT1
JAPT1
SUBAX,BX
SUB
BX
AX
XCHGAX,BX
JCPT1
MOV
DX
280011
PT1:
SUBAX,BX
MOVDI,2800II
MOV
DX
BX
MOV[2800H],
AXMOV[DI],AX
HLT
HLT
HLT
PT1:
SUB
AX
BX
PT1:
SUBBX,AX
MOV
DX
2800H
MOVDI,2800H
MOV
DX
AX
MOV[DI],BX
HLT
HLT
4.6若有两个4字节的无符号数相加,这两个数分别存放在2000H和3000II开始的存储单元,将所求的和存放在2000II开始的内存单元中,试编制程序。
MOV
DI,
2000II
LEA
SI,
3000H
MOV
AX,
[DI]
MOV
DX,
[DI+2]
ADD
AX,
[SI]
ADC
DX,
[SI+2]
MOV
[DI],
AX
MOV
[DI+2]
DX
4.7用两种方法写出从88H端口读入信息的指令,再用两种方法写出从
44H端口输出数据56H的指令。
方法一:
INAL,
88H
方法二:
MOVDX,0088H
INAX,DX
MOVAL,
56H
MOVAL,56H
OUT44H
AL
MOVDX,0044H
OUTDX,AL
4.19
指出以下四条指令的作用
(HEX为数据段的一个变量名)
(1)
MOV
BX,
HEX;
将变量HEX的内容传送到BX寄存器
(2)
LEA
BX,
HEX
;取变量HEX的偏移地址送BX
(3)
MOV
BX,
OFFSEGHEX
;BX指向变量HEX的偏移地址
(4)
MOV
BX,
SEGHEX
;将变量HEX所在段的段地址传送到BX
其结果分别为多少?
TYPEBUF二2
TYPECED二1
TYPEADDR二2
4.20下面是变量定义伪指令,
DATA
SEGMENT
BUF
DW
3DUP(5,2DUP(8))
CED
DB
"Welcometoyou,,ODH,OAH,'$,
ADDR
DW
BUF
COUNT
EQU
$-CED
DATA
ENDS
问:
(1)按内存单元存放的先后次序,按字节写出数据段中的数据。
05H,
OOH,
08H,
OOH,
08H,
OOH,
05H,
OOH,
08H,
OOH,
08H,
OOH,
05H,
OOH,
08H,
OOH,
08H,
OOH,
57H,
65H,
6CH,
63H,
6FH,I
5DH,65H,20H,74H,6FH,20H,79H,6FH,
75H,
ODH,
OAH,
24H,
OOH,
OOH
⑵说明对BUF,CED,ADDR等变量施行TYPE,LENGTHSIZE运算符后,
LENGTHBUF二3
LENGTHCED二1
LENGTHADDR二1
SIZEBUF二6
SIZECED二1
SIZEADDR二2
⑶COUNT的值为多少?
19
4.22编写一个将16位二进制数转换成BCD码数的程序。
DATASEGMENT
BIN
ADEC
TAB
DB
DB
DW
5C0EH
5DUP(?
)
10000,1000,100,10,1
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:
CODE,DS:
DATA,
;待转换数为23567
BXEDCPROCFAR
START:
MOV
AX,
DATA
MOV
DS,
AX
LEA
SI,
TAB
LEA
DI,
ADEC
MOV
AX,
BIN
LOPO:
XOR
CL,
CL
MOV
BX,
[SI]
L0P1:
SUB
AX,
BX
JB
NEXT
INC
CL
JMP
L0P1
NEXT:
ADD
AX,
BX
MOV
[DI],
CL
INC
SI
INC
SI
INC
DI
CMP
BX,
1
JNZ
LOPO
RET
BXEDC
ENDP
CODE
ENDS
END
START
4.24编写一个将16位二进制数转化为四位十六进制数的程序,并将十
六进制数的各位显示出来。
注:
答案中给了一个假定的16位二进制数。
DATASEGMENT
BINDW1001110101111011B
HEXASCDB4DUP(20H)
DB'$'
DATAENDS
STACK1SEGMENTPARASTACK
DW20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
BINHEX:
MOVCH,4;十六进制数的位数
MOV
BX,BIN;
取待转移数据
MOV
DI,OFFSETI1EXASC
;取存放ASCII码首地址
CONVl:
MOV
CL,4
ROL
BX,CL
;取4位二进制数
MOV
AL,BL
AND
AL,OFH
CMP
AL,09H;
是0-9吗?
JBE
ASCI
;是,转移
ADD
AL,07H;
是A-F,先加07H
ASCI:
ADDAL,30H
;加30H
MOV
[DI],AL;
存结果
INC
DI
;修改指针
DEC
CH
JNE
CONVl
;计数未完,继续
LEA
DX,HEXASC
MOV
AH,09H
INT
21H
CODEENDS
ENDBINHEX
很多同学的答案:
DATASEGMENT
ADW4
XDW(16位二进制数)
YDB4DUP(?
)
PUSH
DEC
MOVING:
SHR
LOOP
POP
AND
CMP
JG
ADD
JMP
CX
CX
BX,4
MOVING
CX
BL,OFH
BL,09H
DAYU
BL,30H
XIAOYU
DATAENDS
START:
MOV
CX,A
LEA
DI,Y
AGAIN:
MOV
BX,X
DAYU:
ADDBL,37H
XIAOYU:
MOV[DI],BL
INC
DI
LOOP
AGAIN
LEA
DX,
MOV
AH,09H
INT
21H
CODEENDS
ENDSTART
4.26从BUF单元开始有10个带符号数:
-1,3,248,90,42,9042,-4539,0,-28792o试找出它们的最大值、最小值和平均值,并分别送MAX、MIN和AVG单元。
试编写完整的汇编语言程序。
DATASEGMENT
BUFER
DW
-1,3,248,90,42,9042,-4539,0,-28792
MAX
DW
0
MIN
DW
0
AVG
DW
0
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DW100DUP(?
)
STACKENDS
CODESEGMENT
ASSUME
CS:
CODE,DS:
DATA,SS:
STACK
STARTPROC
FAR
BEGIN:
PUSH
DS
MOV
AX,
0
PUSH
AX
MOV
AX,
DATA
MOV
DS,
AX
LEA
SI,
BUFFER
MOV
AX,
SI
;和清o
MOV
BX,
AX
;最大值
MOV
DX,
AX
;最小值
INC
SI
INC
SI
MOV
CX,
9
L0P1:
ADD
AX,
[SI]
CMP
DX,
[SI]
;与最小值单元中的值相比较
JE
NEXT1
;相等转至NEXT1
JG
NEXT2
;若大于转至NEXT2
MOV
DX,[SI];把小的值送至DX
NEXT1:
CMP
BL,
[DI];
JB
NEXT2;若低于转移
MOV
BL,
[DI];小值tBL
(2分)
NEXT2:
MOV
DL,
[DI];取一字节数据
ADD
AX,
DX;累加和
INC
DI
LOOP
LOP1
MOV
MAX,
BH;送大值
MOV
MIN,
BL;送小值
MOV
DL,
6
DIV
DL,
;求平均值
MOV
AVI,
AL;送平均值
RET
STARTENDP
CODEENDS
ENDBEGIN
5.18086CPU对其I/O端口的寻址采用哪种方式?
它的四条输入指令:
INAL,PORT;INAL,DX;INAX,PORT;INAX,DX的作用有何区别?
答:
8086CPU对其I/O端口的寻址采用I/O端口单独寻址方式。
INAL,PORT;直接寻址,从PORT端口读入(输入)一个字节到AL。
INAL,DX;间接寻址,从DX所指端口读入(输入)一个字节到AL。
INAX,PORT;直接寻址,从PORT和PORT+1两个端口读入(输入)
一个字到AXo
INAX,DX;间接寻址,从DX和DX+1两个端口读入(输入)一个字到AXo
5.5某输入设备的接口电路中,其数据端口的地址为3F8H;状态端口地址为3FEH,当其D?
位为1时,表示输入数据已准备好。
试编写采用查询方式的数据传送程序段,要求从该设备读取100个字节,并存放到自2000H:
2000H开始的内存单元之中。
MOV
AX,
2000H
MOV
DS,
AX
;设定段基址
MOV
DI,
2000H
;目的地址送DI
MOV
CX,
100
;字节数
READ:
MOV
DX,
3FEH
;指向状态口
IN
AL,
DX
;读入状态位
TEST
AL,
80H
;数据准备好否?
JZ
READ
;否,循环检测
MOV
DX,
3F8H
;指向数据口
IN
AL,
DX
;已准备好,读入数据
MOV
[DI],
AL
;存到内存缓冲区中
INC
DI
;修改地址指针
LOOP
READ
;未传送完,继续传送
5.6设计一个采用74LS138的I/O端口地址译码器,要求能寻址的端口地址范围分别是:
①340II〜34711;②34811〜34F1I;③350II-3571I;④37811〜37FI1。
答案不唯一。
5.16某8086系统中有三片8259A安排为非缓冲、级连使用,两从片A、B分别接主片的IR2、IRi;三片8259A的端口地址分别为20H、22H、30H、32H、40H、42H;主片及从片A、从片B的I&上各接有一个外部中断源,其中断类型号分别为75H、7DH、85H;所有中断都采用电平触发方式、全嵌套、非自动E0I方式。
试完成:
1画出该系统中三片8259A级连部分简要的电器原理图;
2
AB7
M/IO
AB3
AB2
AB5
AB4
AB0
AB6
I0W
编写出全部初始化程序
主片:
ICW1二00011001B二19HICW2二01110000B二70HICW3二00010100B二14H
ICW4二00000001B二01H
从片A:
ICW1二00011001B二1911ICW2二01111000B二7811ICW3二00000010B二0211
从片B:
ICW1二00011001B二19H
ICW2二10000000B二80H
ICW3二00000100B二04H
ICW4=00000001B=01H
ICW4二00000001B二0111
主片初始化程序:
ICW1写入到偶端口地址20H;ICW2写入到奇端口地址22H
MOVAL,19H
OUT20H,AL;写入ICW1
MOVAL,70H
OUT22H,AL;写入ICW2
MOVAL,02H
OUT2211,AL
MOVAL,01H
OUT22H,AL
6.4设8253计数器0〜2和控制字寄存器的I/O地址依次为F8H〜FBH,
说明如下程序的作用。
MOVAL,33H;00110011B计数器0,先低位后高位,方式1,BCD
码计数
OUTOFBH,AL;写控制字
MOVAL,80H;置计数初值低位字节80H
OUT0F8H,AL;先写低位字节
MOVAL,50H;置计数初值高位字节50H
OUT0F8H,AL;写高位字节
程序的作用为:
使计数器0工作在方式1,用BCD码计数,计数初值为
5080o
6.5设8253的4个端口地址分别为300H、302H、304H和306H,由CLK。
输入计数脉冲频率为2MHzo要求通道0输出1.5kHz的方波,通道1、通道2均用通道0的输出作计数脉冲,通道1输出频率为300Hz的序列负脉冲,通道2每秒钟向CPU发50次中断请求。
试编写初始化程序,并画出8253相关引脚的连线图。
通道0:
输出方波则工作在方式3;计数初值为n°二2MHz/l・5kHz"1334=53611(1.499kllz)
控制字为:
00110110B=36H
通道1:
输出序列负脉冲则工作在方式2;计数初值为m二1.5kHz/300Hz二5二05H
控制字为:
01010100B=54H
通道2:
每秒钟向CPU发50次中断请求则工作在方式2;计数初值为
匕二1500/50二30二1EH
初始化程序:
通道0:
MOV
DX,
306H
MOV
AL,
36H
OUT
DX,
AL
MOV
DX,
30011
MOV
AL,
36H
OUT
DX,
AL
MOV
AL,
05H
OUT
DX,