微机原理第二版答案Word文件下载.docx
《微机原理第二版答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理第二版答案Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
(1)JMPBX
(2)JMPWORDPTR[BX]
(3)JMPDWORDPTR[BX+DATA]
-
解:
转移指令分为段内转移和段间转移,根据其寻址方式的不同,又有段内的直接转移和间接转移,以及段间的直接转移和间接转移地址。
对直接转移,其转移地址为当前指令的偏移地址(即IP的内容)加上位移量或由指令中直接得出;
对间接转移,转移地址等于指令中寄存器的内容或由寄存器内容所指向的存储单元的内容。
(1)段内间接转移。
转移的物理地址=(CS)×
l6+0500H
=02000H+0500H=02500H
(2)段内间接转移。
转移的物理地址=(CS)×
16+[BX]
=(CS)×
l6+(217A0H)
=02000H+2300H=04300H
(3)段间间接转移。
转移的物理地址=[BX+DATA]
[IP]=[DS×
l6+BX+DATA[=[217E0]=(217E2H)×
l6+(217E0H)
[CS]=[217E2H]=9000H=90000H+0400H=90400H
试说明指令MOVBX,5[BX]与指令LEABX,5[BX]的区别。
前者是数据传送类指令,表示将数据段中以(BX+5)为偏移地址的16位数据送寄存器BX.;
后者是取偏移地址指令,执行的结果是(BX)=(BX)+5,即操作数的偏移地址为(BX)+5。
设堆栈指针SP的初值为2300H,(AX)=50ABH,(BX)=1234H。
执行指令PUSHAX后,(SP)=,再执行指令PUSHBX及POPAX之后,(SP)=(AX)=(BX)=
堆栈指针SP总是指向栈顶,每执行一次PUSH指令SP-2,执行一次POP指令SP+2.所以,执行PUSHAX指令后,(SP)=22FEH;
再执行PUSHBX及POPAX后,(SP)=22FEH,(AX)=(BX)=1234H
指出下列指令的错误:
(1)MOVAH,CX
(2)MOV33H,AL
(
(3)MOVAX,[SI][DI](4)MOV[BX],[SI]
(5)ADDBYTEPTR[BP],256(6)MOVDATA[SI],ES:
AX
(7)JMPBYTEPTR[BX](8)OUT230H,AX
(9)MOVDS,BP(10)MUL39H
解:
(1)指令错。
两操作数字长不相等
(2)指令错。
MOV指令不允许目标操作数为立即数.
(3)指令错。
在间接寻址中不允许两个间址寄存器同时为变址寄存器。
(4)指令错。
MOV指令不允许两个操作数同时为存储器操作数。
)
(5)指令错。
ADD指令要求两操作数等字长。
(6)指令错。
源操作数形式错,寄存器操作数不加段重设符。
(7)指令错。
转移地址的字长至少应是16位的。
(8)指令错。
对输人输出指令,当端口地址超出8位二进制数的表达范围(即寻址的端口超出256个)时,必须采用间接寻址。
(9)指令正确。
(10)指令错。
MUL指令不允许操作数为立即数。
试判断下列程序执行后,BX中的内容.
MOVCL,3
MOVBX,0B7H
ROLBX,1
RORBX,CL
该程序段是首先将BX内容不带进位循环左移1位,再循环右移3位。
即相当于将原BX内容不带进位循环右移2位,故结果为:
(BX)=0C02DH
分别指出以下两个程序段的功能:
(1)
(2)
MOVCX,l0CLD
LEASI,FIRSTLEADI,[1200H]
|
LEADI,SECONDMOVCX,0FOOH
STDXORAX,AX
REPMOVSBREPSTOSW
(1)该段程序的功能是:
将数据段中FIRST为最高地址的10个字节数据按减地址方向传送到附加段SECOND为最高地址的向前10个单元中。
(2)将附加段中偏移地址为1200H单元开始的0FOOH个字单元清0。
写出完成下述功能的程序段:
(1)从地址DS:
0012H中传送一个数据56H到AL寄存器;
(2)将AL中的内容左移两位
:
(3)AL的内容与字节单元DS:
0013H中的内容相乘
(4)乘积存入字单元DS:
0014H中
MOVSI,OFFSET[0012H]
MOVDI,OFFSET[0014H]
MOVAL,[SI]
MOVCL,2
SALAL,CL
MOVBL,[0013H]
MULBL
MOV[DI],AX
选看:
已知(AL)=7BH,(BL)=38H,试问执行指令ADDAL,BL后,AF、CF、OF、PF、SF和ZF的值各为多少
[
AF=1,CF=0,OF=1,PF=0,SF=l,ZF=0
按下列要求写出相应的指令或程序段。
(1)写出两条使AX内容为0的指令。
(2)使BL寄存器中的高4位和低4位互换。
(3)屏蔽CX寄存器的bll,b7和b3位。
(4)测试DX中的b0和b8位是否为1
(1)MOVAX,0
XORAX,AX;
AX寄存器自身相异或,可使其内容清0
(2)MOVCL,4
ROLBL,CL;
将BL内容循环左移4位,可实现其高4位和低4位的互换
(3)ANDCX,0F777H;
将CX寄存器中需屏蔽的位“与”0。
也可用“或”指令实现
(4)ANDDX,0101H;
将需侧试的位“与”1,其余“与”0屏蔽掉
CMPDX,0101H;
与0101H比较
JZONE;
若相等则表示b0和b8位同时为
执行以下两条指令后,标志寄存器FLAGS的六个状态位各为什么状态
MOVAX,84A0H
ADDAX,9460H
执行ADD指令后,6个状态标志位的状态分别为:
在两个16位数进行加法运算时,对CF、ZF、SF和OF会产生影响,但对PF和AF标志位,只有其低8位的运算影响它们的状态。
各标志位的状态分别为:
AF=0,PF=1,CF=1,ZF=0,SF=0,OF=1。
已知AX=8060H,DX=03F8H,端口PORT1的地址是48H,内容为40H;
PORT2的地址是84H,内容为85H。
请指出下列指令执行后的结果。
(1)OUTDX,AL
(2)INAL,PORT1
(3)OUTDX,AX
(4)INAX,48H
(5)OUTPORT2,AX
(1)将60H输出到地址为03F8H的端口中。
(2)从PORT1读入一个字节数据,执行结果:
(AL)=40H。
(3)将AX=8060H输出到地址为03F8H的端口中。
(4)由48H端口读人16位二进制数。
(5)将8060H输出到地址为84H的端口中。
请分别用DB、DW、DD伪指令写出在DATA开始的连续8个单元中依次存放数据11H、22H、33H、44H、55H、66H、77H、88H的数据定义语句.
解:
DB,DW,DD伪指令分别表示定义的数据为字节类型、字类型及双字型.其定义形式为:
DATADB11H,22H,33H,44H,55H,66H,77H,88H
DATADW2211H,4433H,6655H,8877H
DATADDH,H
若程序的数据段定义如下,写出各指令语句独立执行后的结果:
DSEGSEGMENT
DATA1DB10H,20H,30H
DATA2DW10DUP()
STRINGDB‘123’
]
DSEGENDS
(1)MOVAL,DATA1
(2)MOVBX,OFFSETDATA2
(3)LEASI,STRING
ADDDI,SI
1.取变量DATA1的值.指令执行后,(AL)=10H.
2.变量DATA2的偏移地址.指令执行后,(BX)=0003H.
3.先取变量STRING的偏移地址送寄存器SI,之后送SI的内容与DI的内容相加并将结果送DI.指令执行后,(SI)=0017H;
(DI)=(DI)+0017H.
…
假设数据项定义如下:
DATA1DB‘HELLO!
GOODMORNING!
’
DATA2DB20DUP()
用串操作指令编写程序段,使其分别完成以下功能:
(1)从左到右将DATA1中的字符串传送到DATA2中。
(2)传送完后,比较DATA1和DATA2中的内容是否相同。
(3)把DATA1中的第3和第4个字节装入AX。
(4)将AX的内容存入DATA2+5开始的字节单元中。
(1)MOVAX,SEGDATA1
MOVDS,AX
MOVAX,SEGDATA2
MOVES,AX
LEASI,DATA1
LEADI,DATA2
#
MOVCX,20
CLD
REPMOVSB
(2)
CLD
:
REPECMPSB
。
(3)
ADDSI,2
LODSW
(4)LEADI,DATA2
ADDDI,5
STOSW
编写程序段,将STRING1中的最后20个字符移到STRING2中(顺序不变)。
首先确定STRING1中字符串的长度,因为字符串的定义要求以‘$’符号结尾,
可通过检测‘$’符确定出字符串的长度,设串长度为COUNT,则程序如下:
LEASI,STRING1
LEADI,STRING2
ADDSI,COUNT-20
试编写程序,比较AX,BX,CX中带符号数的大小,并将最大的数放在AX中。
比较带符号数的大小可使用符号数比较指令JG等。
CMPAX,BX
JGNEXT1
XCHGAX,BX
NEXT1:
CMPAX,CX
JGSTO
MOVAX,CX
STO:
HLT
给出下列等值语句
ALPHAEQU100
>
BETAEQU25
GRAMMEQU4
试求下列表达式的值
(1)ALPHA*100+BETA10025
(2)(ALPHA+4)*BETA-22598
(3))(BETA/3)MOD5………AMODB=A-(ADivB)*B
图示一下数据段在存储器中的存放形式
DATASEGMENT
%
DATA1DB10H,34H,07H,09H
DATA2DW2DUP(42H)
DATA3DB‘HELLO!
DATA4EQU12
DATA5DD0ABCDH
DATAENDS
答:
…
10H
34H
07H
09H
—
42H
00H
‘H’
‘E’
‘L’
~
‘O’
‘!
12
CD
AB
DATA1低
地
址
DATA2
DATA3
DATA4
DATA5
高
【
址
阅读下面的程序段,试说明它实现的功能
DATA1DB‘ABCDEFG’
CODESEGMENT
'
ASSUMECS:
CODE,DS:
DATA
AAA:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETDATA1
MOVCX,7
NTXT:
MOVAH,2
MOVAL,[BX]
XCHGAL,DL
INCBX
INT21H
LOOPNEXT
MOVAH,4CH
CODEENDS
ENDAAAA
}
试利用全地址译码将6264芯片接到8088系统总线上,使其所占地址范围为32000H~33FFFH。
将地址范围展开成二进制形式如下图所示。
00110010000000000000
00110011111111111111
6264芯片的容量为8×
8KB,需要13根地址线A0~A12。
而剩下的高7位地址应参加该芯片的地址译码。
电路如图所示:
甚什么是字扩展什么是位扩展用户自己购买内存条进行内存扩充,是在进行何种存储器扩展
(1)当存储芯片的容量小于所需内存容量时,需要用多个芯片构成满足容量要求的存储器,这就是字扩展。
(2)当存储芯片每个单元的字长小于所需内存单元字长时,需要用多个芯片构成满足字长要求的存储模块,这就是位扩展。
(3)用户在市场上购买内存条进行内存扩充,所做的是字扩展的工作。
某8088系统用2764ROM芯片和6264SRAM芯片构成16KB的内存。
其中,ROM的地址范围为0FE000H~0FFFFFH,RAM的地址范围为0F0000H~0F1FFFH。
试利用74LS138译码,画出存储器与CPU的连接图,并标出总线信号名称。
连接如下图所示。
6-9中断向量表的作用是什么如何设置中断向量表
中断向量表用于存放中断服务子程序的入口地址,位于内存的最低1K字节(即内存中0000H~003FFH区域),共有256个表项。
设置中断向量表就是将中断服务程序首地址的偏移量和段基址放入中断向量表中。
如:
将中断服务子程序CLOCK的入口地址置入中断向量表的程序如下:
MOVAX,0000H
MOVDS,AX;
置中断向量表的段基地址
MOVSI,<
中断类型码×
4>
;
置存放子程序入口地址的偏移地址
MOVAX,OFFSETCLOCK
MOV[SI],AX;
将子程序入口地址的偏移地址送入中断向量表
MOVAX,SEGCLOCK
MOV[SI+2],AX;
将子程序入口地址的段基址送入中断向量表
INTR中断和NMI中断有什么区别
INTR中断为可屏蔽中断,中断请求信号高电平有效。
CPU能否响应该请求要看中断允许标志位IF的状态,只有当IF=1时,CPU才可能响应中断。
NMI中断为非屏蔽中断,请求信号为上升沿有效,对它的响应不受IF标志位的约束,CPU只要当前指令执行结束就可以响应NMI请求。
试说明8088CPU可屏蔽中断的响应过程。
可屏蔽中断的响应过程主要分为5个步骤,即:
(1)中断请求。
外设在需要时向CPU的INTR端发出一个高电平有效的中断请求信号。
(2)中断判优。
若IF=1,则识别中断源并找出优先级最高的中断源先予以响应,在其处理完后,再响应级别较低的中断源的请求。
(3)中断响应。
中断优先级确定后,发出中断的中断源中优先级别最高的中断请求就被送到CPU。
(4)中断处理。
(5)中断返回。
中断返回需执行中断返回指令IRET,其操作正好是CPU硬件在中断响应时自动保护断点的逆过程。
即CPU会自动地将堆栈内保存的断点信息弹出到IP、CS和FLAG中,保证被中断的程序从断点处继续往下执行。