微机原理习题集答案Word格式.docx
《微机原理习题集答案Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理习题集答案Word格式.docx(26页珍藏版)》请在冰豆网上搜索。
(3)[X2-Y2]补=[X2]补+[-Y2]补=11101100+00100001=00001101
(4)[X2+Y2]补=[X2]补+[Y2]补=11101100+11011111=11001011
6.将下列十六进制数分别转换成二进制、八进制、十进制和BCD数。
(1)(5D.BA)16=(0101,1101.1011,1010)2=(135.564)8=(93.7265625)10
=(1001,0011.0111,0010,0110,0101,0110,0010,0101)BCD
(2)(1001.0101,1)2=(9.34375)10=(11.26)8=(9.58)16
=(1001.0011,0100,0011,0111,0101)BCD
7.写出下列字符的ASCII码。
(1)‘9’=(39H)ASCII码
(2)‘C’=(43H)ASCII码
(3)‘$’=(24H)ASCII码(4)‘空格’=(20H)ASCII码
(5)‘b’=(62H)ASCII码(6)‘回车’=(0DH)ASCII码
(7)‘换行’=(0AH)ASCII码(8)‘报警符’=(07H)ASCII码
二、选择题
1.A2.D3.A4.A5.D6.ABD
第3章微处理器及其结构
1.EU、16、BIU,BIU、20、。
2.20、4、状态。
3.0FFFF0H、ROM、跳转。
4.2、512K、
。
5.64K、16。
6.逻辑地址。
7.空闲。
8.16、64K、20、1M、。
9.指令、总线、时钟。
二、单项选择题
1.E2.A3.D4.C5.D6.A7.A8.A
三、简答题
EU是执行部件,主要的功能是执行指令和形成有效地址。
BIU是总线接口部件,与片外存储器及I/O接口电路传输数据,主要功能是形成实际地址、预取指令和存取操作数。
EU经过BIU进行片外操作数的访问,BIU为EU提供将要执行的指令。
EU与BIU可分别独立工作,当EU不需BIU提供服务时,BIU可进行填充指令队列的操作。
2.答:
8086/8088CPU的地址总线共20位,最大可寻址1MB空间。
3.答:
8086/8088为16位CPU,其内部的ALU、相关的地址寄存器(如SP、IP以及BX、BP、SI、DI)等都是16位的,因而对存储器地址的处理也只能是16位操作,即8086/8088的直接寻址能力在64KB范围内。
而实际上8086/8088有20条地址线,它的最大寻址空间为1MB。
这就产生了一个矛盾,即如何用16位的地址寄存器去表示一个20位的存储器物理地址?
实际使用的解决办法是:
将1MB大小的存储空间分为若干“段”,每段不超过64KB。
这样,一个20位的物理地址就可以用“16位段基址:
16位偏移量”的形式(称为逻辑地址)来表示了,其中段地址存放在8086/8088的段寄存器中。
4.答:
8086/8088CPU中共有:
8个16位的通用寄存器AX、BX、CX、DX、BP、SP、SI、DI;
2个变址寄存器SI、DI;
2个指针寄存器BP、SP;
其中BX、BP、SI、DI亦可作地址寄存器。
5.答:
8086与8088的区别主要表现在以下几个方面:
第一、8086的指令队列可以容纳6个字节,每个总线周期在存储器中取出2个字节指令代码填入队列。
而8088只能容纳4个字节,且每个总线周期只能取出1个字节指令代码。
第二、8086外部数据总线宽度为16位,8088外部数据总线宽度只有8位。
注意:
8086和8088外部数据总线的宽度不同将导致扩展主存储器及输入/输出接口时系统地址线和数据线连接方式的不同。
第三、其他不同的引脚定义:
(1)AD15~AD0,在8086中为地址/数据复用,而在8088中AD15~AD8改为A15~A8只作地址线用;
(2)34、28号引脚定义不同。
6.答:
8086/8088CPU工作在最小模式时,若访问存储器,需用到以下信号:
、ALE、
、DEN、READY、
、
、AD0~AD15、A19/S6~A16/S3。
若访问外设,需用到以下信号:
、AD0~AD15。
7.
(1)1278H+3469H
答:
CF=0AF=1ZF=0SF=0OF=0PF=1
(2)54E3H-27A0H答:
CF=0AF=0ZF=0SF=0OF=0PF=0(3)3881H+3597H答:
CF=0AF=0ZF=0SF=0OF=0PF=1(4)01E3H-01E3H答:
CF=0AF=0ZF=1SF=0OF=0PF=1
其中,进位标志CF用于判别无符号数运算是否超出数的表示范围,而溢出标志OF用于判别带符号数运算是否超出数的表示范围。
奇偶标志PF只能判断结果低8位中“1”的个数为奇数还是偶数。
8.答:
逻辑地址由两个16位的部分即段基址和偏移量组成,一般在程序中出现的地址都表示为逻辑地址形式;
物理地址是一个20位的地址,它是唯一能代表存储空间每个字节单元的地址,一般只出现在地址总线上。
由于8086/8088CPU中的寄存器只有16位长,所以程序不能直接存放20位的物理地址,而必须借助逻辑地址,即用两个16位的寄存器来表示物理地址。
他们之间的关系是:
物理地址=段基址*16+偏移量;
另外,一个物理地址可对应多个逻辑地址。
9.答:
DS段寄存器内容为0B000H。
10.答:
逻辑地址是在程序中对存储器地址的一种表示方法,由段基址和段内偏移地址两部分组成,都是16位的二进制代码,如1234H:
0088H。
偏移地址是指段内某个存储单元相对该段首地址的差值。
物理地址是8086芯片引线送出的20位地址码,物理地址=段基址*16+偏移地址,用来指出一个特定的存储单元。
11.答:
物理地址:
0C2EC0H。
12.答:
考虑到芯片成本和体积,8086/8088采用40条引线的封装结构。
40条引线引出8086/8088的所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从逻辑角度,地址与数据信号不会同时出现,二者可以分时复用同一组引线。
13.答:
引线
的逻辑状态决定8086的工作模式,
引线接高电平,8086被设定为最小模式,
引线接低电平,8086被设定为最大模式。
14.答:
基本总线周期由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。
15.答:
8086为16位微处理器,可访问1M字节的存储器空间;
1M字节的存储器分为两个512K字节的存储体,分别命名为偶存储体和奇存储体;
偶体的数据线连接D7~D0,“体选”信号接地址线A0;
奇体的数据线连接D15~D8,“体选”信号接
信号;
A0信号有效时允许访问偶体中的低字节存储单元,
信号有效时允许访问奇体中的高字节存储单元,实现8086的低字节访问、高字节访问及字访问。
16.首单元地址:
610A0H+1CE7H=62D87H;
末单元地址:
62D87H+27H=62DAEH
17.
地址
内容
00130H
0DAH
00131H
31H
00132H
00133H
00134H
00135H
7F
00136H
5E
18.答:
8086的低位地址线与数据线复用,为保证地址线维持足够的时间,需使用ALE信号将低位地址线通过锁存器保存,以形成系统地址总线。
第4章8086/8088CPU指令系统
一、判断题
1.×
2.×
3.√4.×
5.√6.×
1.C2.A3.C4.C5.B6.A7.C8.C9.C10.C
三、多项选择题
1.BF2.BCD3.CD4.ABDE5.ABC
四、填空题
1.LEABX,BUF。
2.(BX)=7230H。
3.除以16。
4.0FFA3H。
5.SAHF、POPF、POPF。
6.99、JLE、LOOP1、[2100H]
7.(ES)×
16+(BX)+(SI)。
五、综合题
1.
(1)MOVSI,2100H
(2)SBBDISP[BX],7(3)AND[DI],AX(4)ORAX,[609EH](5)MOV[BX+DI+30H],CX(6)PUSHES:
[BP](7)CALLDISP[DI]
(1)源操作数:
立即数寻址;
目的操作数:
寄存器寻址
(2)源操作数:
(带位移量的)基址寻址
(3)源操作数:
寄存器寻址;
变址寻址
(4)源操作数:
直接寻址;
目的操作数:
(5)源操作数:
(带位移量的)基址变址寻址
(6)源操作数:
带段超越的基址寻址;
隐含寻址
(7)只有一个操作数,为(带位移量的)变址寻址
2.MOV[100],23H
(1)ADDAX,[BX+BP+6]
(2)PUSHDL
(3)INAX,[3FH]
(4)OUT3FFH,AL
(5)LESSS,[SI]
(6)POP[AX]
(7)IMUL4CH
(8)SHLBX,
(9)INT300
(10)XCHGDX,0FFFH
(11)MOVAH,BX
(12)MOV[BX],ES:
AX
(13)MOVAX,OFFSET[SI]
(14)MOVCS,AX
(15)MOVDS,ES
(16)MOVDS,1000H
(1)该指令在语法上是对的,即可以把一个立即数送入一个存储单元;
但是如果考虑实际编译,则第一操作数前应加上BYTEPTR或WORDPTR说明,否则汇编程序会因不能确定操作数长度而指示出错。
可改为:
MOVBYTEPTR[100],23H
(2)不能同时使用两个基址寄存器BX、BP进行间接寻址,可改为:
ADDAX,[BX+DI+6]
(3)堆栈操作应以字为单位进行,而DL是一个字节。
PUSHDX
(4)在输入/输出指令中,8位端口地址应直接写在操作数处。
INAX,3FH
(5)端口地址3FFH已超出8位二进制表示范围,16位端口地址应存于DX。
MOVDX,3FFHOUTDX,AL
(6)LES指令的目操作数应该是通用寄存器,不能是段寄存器。
LESAX,[SI]
(7)AX不能用于间接寻址,间接寻址只能用BX、BP、SI、DI四个寄存器之一。
可改为:
POP[BX]
(8)立即数不能做乘法指令的操作数,可改为:
MOVBL,4CH
IMULBL
(9)当逻辑移位的次数大于1时,应该用CL指示次数。
MOVCL,5
SHLBX,CL
(10)操作数300255,已超出有效的中断类型码范围。
(11)XCHG指令不允许立即数做它的操作数。
MOVCX,0FFFH
XCHGDX,CX
(12)源、目的字长不一致
(13)在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻址方式
(14)OFFSET只用于简单变量,应去掉
(15)CS不能作为目的寄存器
(16)段寄存器之间不能直接传送数据
(17)不允许直接向段寄存器送立即数,可改为:
MOVAX,1000H
MOVDS,AX
指令执行后标志寄存器的值为0411H,(AX)=0411H,(SP)=005EH。
4.答案:
(1)(AX)=5(BX)=16(CX)=0(DX)=0
(2)(AX)=3(BX)=7(CX)=2(DX)=0
(3)(AX)=2(BX)=4(CX)=3(DX)=1
5.答案:
MOVAX,0
MOVAL,N1
SUBAL,N2
AAS
MOVDL,AL
MOVAL,N1+1
SBBAL,N2+1
MOVDH,AL
(1)MOVAX,0;
仅将累加器清0,不会影响任何标志位
(2)SUBAX,AX;
累加器清0的同时影响所有状态标志,具体地有:
ZF、PF置1,CF、AF、SF、OF均清0
(3)ANDAX,0;
将累加器清0,ZF、PF置1,CF、OF、SF清0
(4)XORAX,AX;
7.答:
执行结果为(BX)=1200H,(SI)=1000H,(AX)=3040H。
8.答:
执行结果为(AX)=6655H,(BX)=6655H,(CL)=55H,(SI)=24C0H,(DS)=8877H。
9.答:
执行结果为(AX)=0A64CH,(CX)=0F208H,CF=OF=0。
10.答:
程序段执行后(AL)=23H。
该程序段实现了将AL中的1个组合BCD码转换为十六进制数并存回AL中的功能。
11.答:
执行结果为(AX)=2,(DX)=0ACF0H。
12.答:
一种可能的程序段实现如下:
MOVAX,VAR;
AXx
CMPAX,30
JGPLUS2;
x>
30,则转PLUS2
CMPAX,1
JLMIN2;
x<
1,则转MIN2
MOVF1,0;
30≥x≥1,y=0
JMPGO
PLUS2:
MOVF1,2;
y=2
JMPGO
MIN2:
MOVF1,-2;
y=-2或00FEH
GO:
……;
后续处理
简析:
本例中并未说明VAR字节单元是带符号数还是无符号数,读者在使用判断转移指令时可任意选用。
若当作带符号数,应使用JG、JL、JGE、JLE等指令,如参考程序;
若当作无符号数,则应使用JA、JB、JAE、JBE
第五单元
1.SEGMENT、ENDS。
2.1200。
3.在同一个代码段中、不在同一个代码段中。
4.AH。
5.过程、PROC、ENDP、NEAR、FAR。
6.立即数寻址。
1.D2.ABCEF3.ABC4.C5.B6.A
三、综合题
1.答案:
(1)因为‘.’只允许是标号的第一个字符
(2)第一个字符不能为数字(3)不允许出现‘-’
(4)不能是保留字,如助记符(5)不能有空格
(1)错误。
K1是符号,在此处相当于立即数100,故不能做目的操作数。
(2)正确。
(3)正确。
(4)错误。
A1、A2都是字节变量,相当于两个存储器单元,故不能同时出现在一条指令中直接进行比较。
5)错误。
用EQU定义的符号不能重新赋值,除非已用PURGE解除了原值。
指令MOVNUM2,NUM1的源操作数使用立即数寻址,目的操作数使用直接寻址。
指令执行后NUM2+1单元的内容是0。
4.答:
(SEGA1)=0300H,(OFFSETA1)=2000H,(TYPEA1)=4,
(LENGTHA1)=2,(SIZEA1)=2×
3×
4=24;
(SEGA2)=0300H,(OFFSETA2)=2018H,(TYPEA2)=1,
(LENGTHA2)=10,(SIZEA2)=10×
6×
1=60;
(SEGA3)=0300H,(OFFSETA3)=2054H,(TYPEA3)=2,
(LENGTHA3)=100,(SIZEA3)=100×
2=200
5.答案:
不一样。
分别是72H,04H和04H,72H。
存储字时低8位存在低字节,高8位存在高字节。
6.答:
(1)ALPHA*4GTBETA=100*4GT25=0FFFFH
(2)ALPHAMODGAMMA+BETA=100MOD2+25=25
(3)(BETA/3)LE5=(25/3)LE5=0
(4)ALPHAANDBETA=100AND25=64H&
19H=0
(5)GAMMAXOR(BETAEQ25)=2⊕(25EQ25)=0FFFDH
7.答:
有关存储单元的内容如下图所示。
(1)正确。
(2)错误。
宏不能精简目标代码。
(3)错误。
高级语言程序经编译或解释后直接转换为目标代码。
(4)正确。
(AX)=40
10.答案:
改正后:
STAKSGSEGMENT
DB100DUP(?
)
STAKSGENDS
DTSEGSEGMENT
DATADB?
DTSEGENDS
CDSEGSEGMENT
MAINPROCFAR
ASSUMECS:
CDSEG,DS:
DTSEG,SS:
STAKSG
START:
MOVAX,DTSEG
MOVDS,AX
MOVAL,34H
ADDAL,4FH
MOVDATA1,AL
MOVAH,4CH
INT21H
MAINENDP
CDSEGENDS
ENDSTART
11.答案:
MOVBX,TABLE_ADDR;
执行后(BX)=1234H;
LEABX,TABLE_ADDR;
执行后(BX)=OFFSETTABLE_ADDR
程序空处可填CNT,字节变量RS的最后结果是04H。
该程序实现的功能是:
统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。
需要注意的是:
十进制数据“145”在以二进制带符号字节数据形式存放时相当于“-111”。
13.答案:
abc:
movah,1
int21h
cmpal,’a’
jbstop
cmpal,’z’
jastop
subal,20h
movdl,al
movah,2
jmpabc
stop:
ret
14.答案:
datareasegment
string1db‘asfioa’
string2db‘xcviyoaf’
mess1db‘MATCH’,’$’
mess2db‘NOMATCH’,’$’
datareaends
prognamsegment
mainprocfar
assumecs:
prognam,ds:
datarea
start:
pushds
subax,ax
pushax;
返回DOS
movax,datarea
movds,ax
moves,ax;
赋初值
begin:
movcx,string2-string1
movbx,mess1-string2
cmpbx,cx;
比较两字符串的长度
jnzdispno
leadx,addr;
若长度相同
leasi,string1
leadi,string2;
地址指针赋初值
repecmpsb;
比较
jnedispno
movah,9;
相同,显示MATCH
leadx,mess1
int21h
ret
dispno:
movah,9;
不同,显示NOMATCH
leadx,mess2
mainendp
prognamends
endstart
一种可能的程序如下实现:
DATASEGMENT
BLOCKDB35,-27,-13,6,-47,52,9,-3