微机原理与接口技术第四版课后习题答案1Word格式.docx
- 文档编号:22224373
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:54
- 大小:49.90KB
微机原理与接口技术第四版课后习题答案1Word格式.docx
《微机原理与接口技术第四版课后习题答案1Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术第四版课后习题答案1Word格式.docx(54页珍藏版)》请在冰豆网上搜索。
用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序。
汇编程序:
汇编语言源程序要翻译成机器语言程序才可以由处理器执行。
这个翻译的过程称为“汇编”,完成汇编工作的程序就是汇编程序(Assembler)。
第2章处理器结构
〔习题2.1〕简答题
(1)ALU是什么?
(2)8086的取指为什么可以被称为指令预取?
(4)堆栈的存取原则是什么?
(5)标志寄存器主要保存哪方面的信息?
(6)执行了一条加法指令后,发现ZF=1,说明结果是什么?
(9)汇编语言源程序文件中,END语句后的语句会被汇编吗?
①ALU是算术逻辑运算单元,负责处理器所能进行的各种运算,主要是算术运算和逻辑运算。
②取指是指从主存取出指令代码通过总线传输到处理器内部指令寄存器的过程。
8086分成总线接口单元和指令执行单元,可以独立操作。
在执行单元执行一条指令的同时,总线接口单元可以读取下一条指令,等到执行时不需要进行取指了,所以称为预取。
④堆栈的存取原则是先进后出(也称为后进先出)操作方式存取数据。
⑤标志寄存器主要保存反映指令执行结果和控制指令执行形式的有关状态。
⑥执行了一条加法指令后,发现ZF=1,表明运算结果为0。
⑨不会。
〔习题2.3〕填空题
(3)逻辑地址由__________和__________两部分组成。
代码段中下一条要执行的指令由CS和__________寄存器指示,后者在实地址模型中起作用的仅有__________寄存器部分。
(4)进行8位二进制数加法:
10111010+01101100,8位结果是__________,标志PF=__________。
(5)在实地址工作方式下,逻辑地址“7380H∶400H”表示的物理地址是__________,并且该段起始于__________物理地址。
(9)除外设数据外的数据寻址方式有3类,分别被称为_____________、_____________和_____________。
③段地址,偏移地址,EIP,IP
④00100110,0
⑤73C00H,73800H
⑨立即数寻址、寄存器寻址和存储器寻址
〔习题2.4〕处理器内部具有哪3个基本部分?
8086分为哪两大功能部件?
其各自的主要功能是什么?
处理器内部有ALU、寄存器和指令处理三个基本单元。
8086有两大功能部件:
总线接口单元和执行单元。
总线接口单元:
管理着8086与系统总线的接口,负责处理器对存储器和外设进行访问。
8086所有对外操作必须通过BIU和这些总线进行。
执行单元EU:
负责指令译码、数据运算和指令执行。
〔习题2.5〕8086怎样实现了最简单的指令流水线?
8086中,指令的读取是在BIU单元,而指令的执行是在EU单元。
因为BIU和EU两个单元相互独立、分别完成各自操作,所以可以并行操作。
也就是说,在EU单元对一个指令进行译码执行时,BIU单元可以同时对后续指令进行读取;
这就是最简单的指令流水线技术。
〔习题2.8〕什么是8086中的逻辑地址和物理地址?
逻辑地址如何转换成物理地址?
请将如下逻辑地址用物理地址表达(均为十六进制形式):
①FFFF∶0②40∶17③2000∶4500④B821∶4567
物理地址:
在处理器地址总线上输出的地址称为物理地址。
每个存储单元有一个唯一的物理地址。
逻辑地址:
在处理器内部、程序员编程时采用逻辑地址,采用“段地址:
偏移地址“形式。
某个存储单元可以有多个逻辑地址,即处于不同起点的逻辑段中,但其物理地址是唯一的。
逻辑地址转换成物理地址:
逻辑地址由处理器在输出之前转换为物理地址。
将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址。
①FFFFH:
0=FFFF0H
②40H:
17H=00417H
③2000H:
4500H=24500H
④B821H:
4567H=BC777H
〔习题2.12〕汇编语句有哪两种,每个语句由哪4个部分组成?
汇编语句有两种:
执行性语句(处理器指令)、说明性语句(伪指令)。
每个语句有:
标号、指令助记符、操作数或参数、注释4个部分组成。
〔习题2.16〕说明下列指令中源操作数的寻址方式?
假设VARD是一个双字变量。
(1)movedx,1234h
(2)movedx,vard
(3)movedx,ebx
(4)movedx,[ebx]
(5)movedx,[ebx+1234h]
(6)movedx,vard[ebx]
(7)movedx,[ebx+edi]
(8)movedx,[ebx+edi+1234h]
(9)movedx,vard[esi+edi]
(10)movedx,[ebp*4]
①立即数
②直接
③寄存器
④寄存器间接
⑤寄存器相对
⑥寄存器相对
⑦基址变址
⑧相对基址变址
⑨相对基址变址
⑩带比例寻址
第3章数据处理
〔习题3.1〕简答题
(1)使用二进制8位表达无符号整数,257有对应的编码吗?
(2)字符“'
F'
”和数值46H作为MOV指令的源操作数有区别吗?
(3)为什么可以把指令“MOVAX,(34+67H)*3”中的数值表达式看成是常量?
(4)数值500,能够作为字节变量的初值吗?
(6)都是获取偏移地址,为什么指令“LEAEBX,[ESI]”正确,而指令“MOVEBX,OFFSET[ESI]”就错误?
(7)INC,DEC,NEG和NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数?
(9)乘除法运算针对无符号数和有符号数,有两种不同的指令。
只有一种指令的加减法如何区别无符号数和有符号数运算?
(10)逻辑与运算为什么也称为逻辑乘?
①没有。
使用二进制8位表达无符号整数,257没有对应的编码。
②字符“'
”的ASCII码就是数值46H,所以没有区别。
③汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。
④不能。
数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。
⑥前者在指令执行时获得偏移地址,是正确的;
但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。
⑦INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。
⑨加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和OF标志,可利用CF和OF进行区别。
⑩逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。
〔习题3.3〕填空题
(1)定义字节变量的伪指令助记符是_____________,获取变量名所具有的偏移地址的操作符是_____________。
(2)计算机中有一个“01100001”编码。
如果把它认为是无符号数,它是10进制数___________;
如果认为它是BCD码,则表示真值_____________;
又如果它是某个ASCII码,则代表字符__________。
(3)C语言用“\n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:
一个是回车,其ASCII码是_____________,它将光标移动到当前所在行的首位;
另一个是换行,其ASCII码是_____________,它将光标移到下一行。
(4)数据段有语句“H8843DWORD99008843H”,代码段指令“MOVCX,WORDPTRH8843”执行后,CX=_____________。
(5)用DWORD定义的一个变量XYZ,它的类型是_____________,用“TYPEXYZ”会得到数值为_____________。
如果将其以字量使用,应该用_____________说明。
(6)数据段有语句“ABCBYTE1,2,3”,代码段指令“MOVCL,ABC+2”执行后,CL=_____________。
①BYTE,OFFSET
②97,61,小写字母a
③0DH(13),0AH(10)
④8843H
⑤DWORD,4,WORDPTRXYZ
⑥3
〔习题3.4〕
下列十六进制数表示无符号整数,请转换为十进制形式的真值:
①FFH②0H③5EH④EFH
①255
②0
③94
④239
〔习题3.5〕
将下列十进制数真值转换为压缩BCD码:
①12②24③68④99
①12H
②24H
③68H
④99H
〔习题3.6〕
将下列压缩BCD码转换为十进制数:
①10010001②10001001③00110110④10010000
①91
②89
③36
④90
〔习题3.7〕
将下列十进制数用8位二进制补码表示:
①0②127③-127④-57
①00000000
②01111111
③10000001
④11000111
〔习题3.8〕
进行十六进制数据的加减运算,并说明是否有进位或借位:
①1234H+7802H
②F034H+5AB0H
③C051H-1234H
④9876H-ABCDH
①1234H+7802H=8A36H,无进位
②F034H+5AB0H=4AF4H,有进位
③C051H-1234H=BE1DH,无借位
④9876H-ABCDH=ECA9H,有借位
〔习题3.10〕
设置一个数据段,按照如下要求定义变量或符号常量:
①my1b为字符串变量:
PersonalComputer
②my2b为用十进制数表示的字节变量:
20
③my3b为用十六进制数表示的字节变量:
④my4b为用二进制数表示的字节变量:
⑤my5w为20个未赋值的字变量
⑥my6c为100的常量
⑦my7c表示字符串:
my1bbyte'
PersonalComputer'
my2bbyte20
my3bbyte14h
my4bbyte00010100b
my5wword20dup(?
)
my6c=100
my7cequ<
PersonalComputer>
〔习题3.11〕定义常量NUM,其值为5;
数据段中定义字数组变量DATALIST,它的头5个字单元中依次存放-10,2,5和4,最后1个单元初值不定。
numequ5
datalistbyte-10,2,5,4,?
〔习题3.12〕从低地址开始以字节为单位,用十六进制形式给出下列语句依次分配的数值:
byte'
ABC'
10,10h,'
EF'
3dup(-1,?
3dup(4))
word10h,-5,3dup(?
4142430A104546FF00040404FF00040404FF00040404
1000FBFF000000000000
〔习题3.19〕请分别用一条汇编语言指令完成如下功能:
(去E)
(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。
(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。
(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。
(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。
①addedx,ebx
②addal,[ebx+esi]
③add[bx+0b2h],cx
④addvarw,3412h
⑤addeax,0a0h
〔习题3.20〕分别执行如下程序片断,说明每条指令的执行结果:
(1)
moveax,80h;
EAX=__________
addeax,3;
EAX=__________,CF=__________,SF=__________
addeax,80h;
EAX=__________,CF=__________,OF=__________
adceax,3;
EAX=__________,CF=__________,ZF=__________
(2)
moveax,100;
addax,200;
EAX=__________,CF=__________
(3)
addal,200;
(4)
moval,7fh;
AL=__________
subal,8;
AL=__________,CF=__________,SF=__________
subal,80h;
AL=__________,CF=__________,OF=__________
sbbal,3;
AL=__________,CF=__________,ZF=__________
;
EAX=80H
EAX=83H,CF=0,SF=0
EAX=103H,CF=0,OF=0
EAX=106H,CF=0,ZF=0
EAX=100
EAX=300,CF=0
EAX=44,CF=1(包含256的进位含义:
256+44=300)
AL=7FH
AL=77H,CF=0,SF=0
AL=F7H,CF=1,OF=1
AL=F3H,CF=0,ZF=0
〔习题3.21〕(推敲)
给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:
moval,89h
addal,al
addal,9dh
cmpal,0bch
subal,al
decal
incal
moval,89h;
AL=89HCFZFSFOFPF
addal,al;
AL=12H10011
addal,9dh;
AL=0AFH00101
cmpal,0bch;
AL=0AFH10101
subal,al;
AL=00H01001
decal;
AL=0FFH00101
incal;
〔习题3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成EDX.EAX←buffer1-buffer2功能。
数据段
buffer1qword67883000h
buffer2qword67762000h
代码段
moveax,dwordptrbuffer1
movedx,dwordptrbuffer1+4
subeax,dwordptrbuffer2
sbbedx,dwordptrbuffer2+4
〔习题3.23〕分别执行如下程序片断,说明每条指令的执行结果:
movesi,10011100b;
ESI=__________H
andesi,80h;
oresi,7fh;
xoresi,0feh;
moveax,1010b;
EAX=__________B
shreax,2;
EAX=__________B,CF=__________
shleax,1;
andeax,3;
moveax,1011b;
roleax,2;
rcreax,1;
oreax,3;
xoreax,eax;
;
ZF=__________,SF=__________,PF=__________
ESI=9CH
ESI=80H
ESI=FFH
ESI=01H
EAX=1010B(可以有前导0,下同)
EAX=0010B,CF=1
EAX=0100B,CF=0
EAX=0000B,CF=0
EAX=1011B(可以有前导0,下同)
EAX=101100B,CF=0
EAX=10110B,CF=0
EAX=10111B,CF=0
EAX=0,CF=0,OF=0
ZF=1,SF=0,PF=1
〔习题3.24〕3.24给出下列各条指令执行后AX的结果,以及状态标志CF、OF、SF、ZF、PF的状态。
movax,1470h
andax,ax
orax,ax
xorax,ax
notax
testax,0f0f0h
movax,1470h;
AX=1470HCFOFSFZFPF
andax,ax;
AX=1470H00000
orax,ax;
xorax,ax;
AX=0000H00011
notax;
AX=FFFFH00011
testax,0f0f0h;
AX=0F0F0H00101
〔习题3.25〕逻辑运算指令怎么实现复位、置位和求反功能?
AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。
〔习题3.27〕(去E)
编程将一个64位数据逻辑左移3位,假设这个数据已经保存在EDX.EAX寄存器对中。
movecx,3
again:
shleax,1
rcledx,1
loopagain
〔习题3.28〕编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。
bcdbyte92h
moval,bcd
shral,4
addal,30h
calldispc
andal,0fh
〔习题3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。
在空白处填入适当的语句或语句的一部分。
array1dword1,2,3,4,5,6,7,8,9,10
array2dword10dup(?
movecx,lengthofarray1
movebx,0
moveax,array1[ebx*4]
addeax,8000h
mov______________
addebx,__________
movarray2[ebx*4],eax
addebx,1
第4章汇编语言程序设计
〔习题4.1〕简答题
(3)为什么判断无符号数大小和有符号大小的条件转移指令不同?
(4)双分支结构中两个分支体之间的JMP指令有什么作用?
(5)为什么特别强调为子程序加上必要的注释?
(6)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题?
(7)参数传递的“传值”和“传址”有什么区别?
(8)INC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 第四 课后 习题 答案