郑初华版课后答案doc.docx
《郑初华版课后答案doc.docx》由会员分享,可在线阅读,更多相关《郑初华版课后答案doc.docx(35页珍藏版)》请在冰豆网上搜索。
郑初华版课后答案doc
第1章进制及码元
1.进制转换
129=81H=10000001B=2010
298=12AH=l()0101()10B=452O
1000=3E8H=1111101000B=17500
5DH=1011101B=1350=93D
3E8H=1111101000B=17500=WOOD
3570=11101111B=OEFH=239D
2.101101B+1101001B=10010110B
3FC9H-0FE6H=2FE3
一个字节的N0T8=F7H=-9(有符号数)
两个字节的N0T8二FFF7H=-9(有符号数)
5AND6=4D
5OR6=7D
3.数据表示范围:
一字节的无符号数表示范围为。
〜255,有符号数(补码)表示范围为-128—+127。
一个字的无符号数表示范围为0~65535,有符号数(补码)表示范围为一32768~+32767。
N位二进制数的无符号数表示范围为。
〜(2、1),有符号数(补码)表示范围为-2^〜(2叫-1).
4.35H代表的ASCII字符为旦,代表十六进制数时等价的十进制值为53,代表压缩8421BCD码等价的十进制值为35,代表非压缩8421BCD码等价的十进制值为》
5.FFH代表无符号数时等价的十进制值为255,代表补码有符号数时等价的十进制值为一1,代表反码有符号数时等价的十进制值为代表原码有符号数时等价的十进制值为T27。
6.-20的8位二进制补码为ECH,原码为94H,反码为EBH°158的16位二进制补码为009EH,原码为009EH,反码为009EH。
7.10221
8.FCAC00H
第2章微机硬件基础
2.8086/8088CPU为什么要分为BIU和EU两大模块?
答:
为了使取指和分析、执行指令可并行处理,提高CPU的执行效率。
8086/88CPU有两大模块总线接口单元B1U和执行单元EU组成。
参见教材《汇编语言、微机原理及接口技术(第2版)》2.3.1节“8086/8088CPU的内部结构”。
3.简述8086/8088CPU的两大模块BIU和EU的主要功能及组成。
答:
如图2.2所示。
「功能:
取指.取数.存数.物理地址形成、总线控制
「biux
8086/8088CPU
I组成:
IP、指令从元.SR.埴址加法器、总线控制逻辑
{
功能:
分析指令、执行指令、EA形成、数据哲存、EU控制
组成:
ID、EU控制逻辑、ALILUR.FR(PSW)
4.简述8086/8088CPU的14个寄存器的英文名、中文名及主要作用。
答:
AX(Accumulator)(AH>AL)累加器,它是汇编编程中最常用的一个寄存器,主要用于乘除运算、BCD运算、换码、I/O操作、申操作、中断调用等。
BX(Base)(BH>BL)基址寄存器,主要用于存放地址、基址(默认相对于DS段)等。
CX(Countcr)(CH>CL)计数器,主要用于循环计数、串操作计数、移位计数(CL)等。
DX(Data)(DH、DL)数据寄存器,主要用于16位乘除、问接I/O、中断调用等。
BP(BasePointer)基址指针,主要用于存放地址、基址(默认相对于SS段)等。
SP(StackPointer)堆栈指针(栈顶指针),主要用于存放栈顶地址。
SI(SourceIndex)源变址寄存器,用于存放地址、变址、串操作源变址。
DI(DestinationIndex)目的变址寄存崩,用于存放地址、变址、串操作日的变址。
CS(CodeSegment)代码段寄存器(代码段),用于存放正在或正待执行的程序段的起始地址的高16位二进制数据,即程序段的段地址。
,
DS(DataSegment)数据段寄存器(数据段),用于存放正在或正待处理的一般数据段的起始地址的高16位二进制数据,即一般数据段的段地址。
ES(ExtraSegment)附加数据段寄存器(附加段),用于存放正在或正待处理的附加数据段的起始地址的高16位二进制数据,即附加数据段的段地址。
SS(StackSegment)堆栈数据段寄存器(堆栈段),用于存放正在或正待处理的堆栈数据段的起始地址的高16位二进制数据,即堆栈数据段的段地址。
IP(Instructionpointer)指令指针,它的内容始终是下一条待执行指令的起始偏移地址,与CS一起形成下一条待执行指令的起始物理地址。
CS:
IP的作用是控制程序的执行流程。
IP一•般会自动加1(逻辑加1、实际随指令长度变化)移向下一条指令实现顺序执行;若通过指令修改CS或1P的值,则可实现程序的转移执行。
PSW(ProgramStatusword)程序状态字,它其中有三个控制标志(IF、DF、TF)和6个状态标志(SF、PF、ZF、OF、CF、AF)。
控制标志是用于控制CPU某方而操作的标志,状态标志是部分指令执行结果的标志。
6.请说明8086/8088CPU的标志位的英文名、中文名及通用填充方法。
答:
IF(InterruptEnableFlag)中断允许标志,用于控制CPU能否响应可屏蔽中断请求,1F=1能够响应,IF=0不能响应。
DF(DirectionFlag)方向标志,用于指示串操作时源串的源变址和目的串的目的变址变化方向,DF1向减的方向变化,DF=0向加的方向变化。
TF(TrapFlag)陷阱标志(单步中断标志),TF=1程序执行当前指令后暂停,TF=0程序执行当前指令后不会暂停。
SF(SignFlag)符号标志,指令执行结果的最高二进制位是0还是1,为0,则SF=0,代表正数;为1,则SF=1,代表负数。
我们一般是用十六进制数表示,则可以根据十六进制的最高位是落在0〜7还是落在8〜F之间,若落在0〜7之间则SF=0.否则SF=1。
PF(ParityChECkFlag)奇偶校验标志,指令执行结果的低8位中1的个数是奇数个还是偶数个,若为奇数个则PF=0,若为偶数个则PF=1O
ZF(ZeroFlag)零标志,指令执行结果是不是为0,若为0则ZF=1,否则ZF=0。
OF(OverflowFlag)有符号数的溢出标志,指令执行结果是否超出有符号数的表示范围,若超过则0F=l,否则OF=0。
我们可以通过判断是否出现以下四种情况之一:
正加正得负,正减负得负,负加负得正,负减正得正。
若出现则0F=l.否则OF=0.
CF(CarryFlag)进位/借位标志无符号数的溢出标志),指令执行结果的最高位是否有向更高位进位或借位,若有则CF=1,同时也代表无符号数溢出;若无则CF=(),也代表无符号数未溢出。
AF(AuxiliaryCarryFlag)辅助进位/借位标志,低4位二进制是不是有向高位进位或借位,若有则AF=1,否则AF=O,其主要用于BCD修正运算。
7.内存分段组织的优缺点?
答:
(1)8086/8088CPU中的寄存器只有16位,如果采用它们直接寻址,则寻址能力势必限制在64KB范围内,而采用分段组织可以较好地实现扩展CPU的寻址能力。
每段的大小可达64KB,不同段的组合则可寻址更大的范围。
(2)使程序与数据相对独立,不同存取方式的数据也相对独立。
程序:
存放于代码段CS中
j堆栈方式:
存放于堆栈段SS中
数据:
t随机方式:
存放于数据段DS及附加段ES中
(3)便于程序和数据的动态装配,从一个地方挪到另外一个地方只要更改一•下段寄存器的值即可,段内偏移可以不用改变。
但内存地址采用分段组织增加址计算的复杂度,降低了CPU的执行效率。
8.1MB内存最多可有64K个不同的段地址,若不允许重叠最多可有16个不同的段地址。
不同的段间可以重叠。
9.设DS=26FCH,BX=108H,SI=9A8H,试求出使DS:
BX与ES:
S1指向同一物理地址的ES值。
答:
即DS:
BX=ES:
SI
DS:
BX=DSx16+BX=26FCHxl6+1()8H=270C8H
ES:
SI=ESx16+SI=ESx16+9A8H
ES=(270C8H一9A8H)T6=2672H
13.20位物理地址山段地址左移4位加偏移地址形成,下一条待执行指令等于CS*10H+IP得到20100H.
14.DS段寄存器的取值范围:
AF10H〜B100H
第3章寻址方式及指令系统
1.指令是CPU可以理解并执行的操作命令,指令巾操作码和操作数两部分组成,指令有两个级别,即机暮级和汇编级。
3.指令主要有哪些分类方式及其主要类别是什么?
答:
指令分类有不同的方式。
按操作数的个数将指令分为零地址指令(无操作数)、一地址指令(只有一个操作数)、二地址指令(有两个操作数)、多地址指令(多于两个操作数);按指令级别分为机器指令和汇编指令:
按是否转移分为转移指令和顺序指令;按功能分为七大类:
传送类、算术运算类、位操作类、I/O类、串操作类、CPU控制类、转移类;按指令长度(即指令占用的字节数)分为1字节指令、2字节指令等,8086/8088指令长度是不同的,叫变字长,不同的指令有不同的指令长度,从1〜6字节均有;按指令执行期间取操作数是否需要与总线打交道分为内部指令(不需)和外部指令(需要),类似功能的指令内部指令比外部指令执行速度快,所以在编程时尽量采用内部指令即多用寄存器优化程序。
4.操作数的寻址方式有哪些?
并举例说明其主要特点。
答:
操作数寻址方式主要有立即寻址方式、寄存器寻地址、存储器寻址方式、端口寻址方式4类.
(1)立即寻址方式:
操作对象是这个操作数本身,M0VAL、5
(2)寄存器寻地址:
操作对象是寄存器中的内容MOVAX、BX
(3)存储器寻址方式:
操作对象是内存地址所对应的存储单元中的内容,MOVAXT2000HJ
(4)端口寻址方式:
操作数是指明端口的地址、端口地址所对应的端口中的内容是操作对象INAX,46A,4直接寻址.
6.设CS=1()()OH,DS=2000H,ES=3()()()H,SS=4000H,IP=1()()H,SP=2OOH,BX=30()H,
BPMOOH,SI=5OOH,则①下一条待执行指令的物理地址为多少?
②当前栈顶的物理地址为多少?
③[BX]代表的存储单元的物理地址为多少?
©[BP]^表的存储单元的物理地址为多少?
⑤ES:
[BX+S1J代表的存储单元的物理地址为多少?
答:
①下一•条待执行指令的物理地ill:
=CSx16+IP=1OOOHx16+IOOH=101OOH0
%1当前栈顶的物理地址二SSx16+SP=4000Hx16+200H=40200H。
%1[BX]代去的存储单元物理地址=DSxl6+BX=2000HX16+300H=20300Ho
%1[BP]代表的存储单元物理地址=SSX16+BP=4000Hx16+400H—-40400Ho
%1ES:
IBX+SIJ代表的存储单元物理地址=ESxl6+BX+SI=3000Hx16+300H+500H=30800H
7.试根据以下要求,分别写出相应的汇编语言指令。
⑴以寄存器BX和D1作为基址变址寻址方式把存储器中的一个字送到DX寄存器。
答:
MOVDX,[BX+DIJ
(2)以寄存器BX和偏移量VALUE作为寄存器相对寻址方式把存储器中的一个字和AX相加,把结果送I口I到那个字单元。
答:
ADDVALUE[BX],AX
(3)将1字节的立即数086H与以S1作为寄存器间接寻址方式的字节单元相比较。
答:
CMPBYTEPTR[SIJ,086H
(4)将BH的高4位与低4位互换。
答:
MOVCL,4
RORBH,CL;或者ROLBH,CL
(5)测试BX的第3、7、9、12、13位是否同时为0。
答:
TESTBX,3288H;0011001010001000B
(6)将存放了0〜9数值的DL寄存器中的内容转化为相应的〜0〜〜9的字符。
答:
ADDDL,30H;或者ORDL,30H
⑺将存放了A〜F字符的AL寄存器中的内容转化为相应的数值。
答:
SUBAL,37H
10.指出下列指令错误的原因。
:
(l)MOVCL,300
;300超过字节数据表示范围
(2)MOV
CS,AX
;CS不能作为目的操作数
(3)MOV
BX,DL
;数据类型不匹配
(4)MOV
ES,1000H
:
立即数不能送给段寄存器
(5)INC
LBXJ
;数据类型不明确’
(6)ADD
AX,DS
:
段寄存器不能参加运算
(7)TEST
BX,[CX]
;存储器间接寻址只能使用BX、SI、DI、BP四个之一
(8)SUB
[BX],[BP+SI]
;加减两个操作数不能同时为存储操作数
(9)JC[SI]
:
条件转移只有短转移寻址方式
(10)SHL
BX
;少给一个表明移位次数的操作数,1或CL
11.
(1)CS=(1000)IP=(0155)
(2)CS=(1000)IP=(176F)
(3)CS=(1000)IP=(17C6)
(4)CS=(2000)IP=(0146)
(5)CS=(1000)IP=(1770)
(6)CS=(2000)IP=(()146)
12.分别说明下列各组指令中的两条指令的区别。
答:
(l)MOVAX,TABLELEAAX,TABLE
假设TABLE为字变量名,则:
左为将TABLE单元的内容送AX,右为将TABLE单元的偏移地址送AX
假设TABLE为字节变量名,则:
左为错误指令,右为将TABLE单元的偏移地址送AX
假设TABLE为常量名,贝IJ:
左为将TABLE的内容送AX,右为错误指令
(2)ANDBL,OFHORBL,OFH
左为将BL的高4位清0,右为将BL的低4位置1
(3)JMPSHORTLIJMPNEARPTRLI
左为短转移,2字节的指令,转移范围为一128〜+127
右为近转移,1字节的指令,转移范围为-32768+32767
(4)MOVAX,BXMOVAX,[BX]
左为将BX的值送AX
右为将BX的值作为相对DS段的内存单元偏移地址,取出字单元值送AX
(5)SUBDX,CXCMPDX,CX
左为减法,并将DX-CX的值存入DX中
右为比较,做减法,但不会将DX-CX的值存入DX中
(6)MOV[BP][SI],CLMOVDS:
[BPIESI],CL
左边第〜操作数默认为相对于SS段偏移的存储器操作数
右边第一操作数采用段超越,指定为相对于DS段偏移的存储器操作数
13.
答:
方法一:
CMPAL,80H方法二:
CMPAL,00H方法三:
TESTAL,80H方法四:
ORAL,AL方法五:
ANDAL,AL方法六:
SUBAL,OOH方法七:
TESTAL,80H
写出判断AL为正为负的程序段(请至少用三种方法)。
;而后用JAE代表负数转移,JB代表正数转移
;而后用JGE代表正数转移,JL代表负数转移
;而后用JNZ代表负数转移,JZ代表正数转移;而后用JNS代表负数转移,JS代表正数转移;而后用JNS代表负数转移,JS代表正数转移
;而后用JGE代表正数转移,JL代表负数转移:
而后用JNS代表正数转移,JS代表负数转移
14.思考题:
试比较以下几条指令的功能。
答:
MOVBX,SI;将SI的值送给BX
MOVBX,[Sil
MOVBX,OFFSET[SI]
;将SI的值作为偏移地址找到对应的内存单元中的值送给BX
;将S1的值作为偏移地址找到对应内存单元的偏移地址送给BX,
即SI的值送给BX
LEABX,[SI];将SI的值作为偏移地址找到对应内存单元的偏移地址送给BX,即S1的值送给BX
LDSBX,ISI];将S1值作为偏移地址找到对应内存单元中的第一个字值送给BX,
第二个字值送DS
LESBX,[SI]
:
将SI值作为偏移地址找到对应内存单元中的第一个字值送给BX,第二个字值送ES
15.设B、D为字节变量,A、C为字变量,旦A除B可能会溢出,试编写无符号数或有符号数A/B商送C,余数送D。
答:
可能会溢出则要考虑扩展数据表示能力。
16.编写程序段实现DX、AX中32位二进制数乘10(设不溢出)。
答:
;X*10=X*8+X*2,
SHL
AX,1
RCL
DX,1
:
DX,AX=(DX,AX)*2
MOV
BX,DX
MOV
BP,AX
;BX,BP转存2倍值
SHL
AX,1
RCL
DX,1
;再乘2
SHL
AX,1
RCL
DX,1
:
再乘2
ADD
AX,BP
ADC
DX,BX
;8倍+2倍=10倍
用移位指令实现
19.程序理解执行。
;无符号数除法.
;有符号数除法
MOVAL,B
MOVAL,B
XORAH,AH
CBW
MOVBX,AX
MOVBX,AX
MOVAX,A
MOVAX,A
XORDX,DX:
无符号扩展
CWD
DIVBX
IDTVBX
MOVC,AX
MOVC,AX
MOVD,DL
MOVD,DL
:
有符号扩展
(1)MOV
AH,
1
:
AH=FFH
MOV
AL,
180
:
AL=B4H
MOV
BL,
15
:
BL=0FH
IDIV
BL
;AX/BL即:
-76/15,
商-5,余数-1
程序段执行后,AX=OFFFBHc
说明:
关键是要知道谁除以谁,特别注意是有符号除还是无符号除。
⑵
MOV
AL,OCH
:
AL=0CH
ORAL,AL
;AL=0CH,CF=0
SBB
AL,OFOH
:
AL=1CH
NEG
AL
:
AL=E4H,CF=1
ADC
AL,0D4H
:
AL=B9H
TEST
AL,35H
:
AL=B9H,CF=()
程序段执行后,CF=_0_,AL=B9Ho
说明:
第
(1)、
(2)小题只要理解每条指令功能及对标志位的影响,逐步进行即可完成。
(3)MOVAL,08H
:
AX二FF08H
MOVAH,一1
MOVBX,0F8H:
BX=00F8H
CMPAX,BX
程序段执行后SF§OF=I,CF=0
(4)MOVAX,,中,;AX的二进制高位为1,即落在负数范围
MOVBX,,AB,;BX的二进制高位为(),即落在正数范围CMPAX,BX
程序段执行后SF®OF=j,CF=0o
说明:
第(3)(4)小题实质是考查有符号数和无符号数大小的比较。
(5)MOVAX,7587:
AX=3538H
ANDAX,OFOFH:
AX=()5()8H
AAD:
AX=58=003AH
程序段执行后AX=003AH,即留。
程序段的功能是:
将两位非压缩BCD码转化为其对应的十六进制数。
说明:
可用AAD指令实现将十位和个位数值拼装还原为。
〜99的十六进制数。
反之将。
〜99的数值分离成I•位和个位可用AAM指令实现,教材《汇编语言、微机原理及接口技术(第4版)》例5.10和例5.14中均有应用。
20.程序语旬填空。
(1)下列是完成1〜20之间的奇数累加和存于AL中的程序段:
XORAL.AL
MOVCX,1();循环次数
MOVBL,1
AGAIN:
ADDAL.BL
ADDBL,2;步长,参数改变
LOOPAGAIN
(2)下列是在串长为N的串STR中查找是否有M字符的程序段:
MOVDI,SEGSTR
MOVES.DI
LEADI.STR
CLD
MOVCX.N
MOVAL.7M7
REPNESCASB;申查找核心指令
JZFOUND;转到找到分支
(3)下列是完成1位十六进制数X显示的程序段:
MOVDL.X
ANDDL.OFH
ADDDL,30H:
或0RDL,30H
CMPAL.'9'
JBENEXT
ADDDL,7
NEXT:
MOVAH,02H
INT21H
(4)将DH中的二进制数看成压缩BCD码并送出显示的程序段如卜.:
MOVDL,DH
MOV
CL,4
;获取1•位
SHR
DL,CL
ADD
DL,30H
MOV
AH,2
;2号功能调用显示十位
INT
21H
MOV
DL,DH
AND
DL,OFH
;获取个位
OR
DL,30H
INT
2IH
21.图略
22.假定AX和BX中的内容为带符号数,CX和DX的内容为无符号数,请用比较指令和转移指令实现以下条件转移:
⑴若DX的内容超过CX的内容,则转到L1。
答:
CMPDX,CX
JAL1
(2)若BX的内容大于AX的内容,则转到L2。
答:
CMPBX,AX
JGL2
(3)若DX的内容未超过CX的内容,则转到L3。
答:
CMPDX,CX
JNAL3
(4)判断BX与AX相比较是否产生溢出,若溢出则转到L4o
答:
CMPBX,AX
JOL4
(5)若BX的内容小于等于AX的内容,则转到L5。
答:
CMPBX,AX
JLEL5
(6)若DX的内容小于等于CX的内容,则转到L6o
答:
CMPDX,CX
JBEL6
23.假设BX=0A69H,VALUE变量中存放的内容为1927H,写出下列各条指令执行后的BX
的寄存器中和CF、ZF、SF与OF的值:
(I)
XOR
BX,VALUE
(2)
AND
BX,VALUE
(3)
ORBX,VALUE
(4)
SUB
BX,VALUE
(5)
CMP
BX,VALUE
(6)
TEST
BX,VALUE
答:
BX
CFZFSFOF
(1)
134EH
0000
(2)
0821H
0000
(3)
186FH
0000
(4)
F142H
1010
(5)
0A69H
1010
(6)0A69H00
第4章MASM汇编语言
1.名词解释
指令伪指令宏指令汇编语句汇编语言汇编源程序汇编程序汇编连接程序连接答:
指令:
是CPU可以理解并执行的操作命令。
伪指令:
是用于为汇编程序编译时理解程序框架、分配空间(数据定义)等的汇编语句。
宏指令:
实质上就是有多条指令打包而成的一组指令的集合。
汇编指令:
一行只能写一条汇编语句,一条汇编只能写在