16、32位微机原理、汇编语言及接口关键技术-课后习题答案.docx

上传人:夺命阿水 文档编号:1372359 上传时间:2024-06-15 格式:DOCX 页数:73 大小:135.55KB
返回 下载 相关 举报
16、32位微机原理、汇编语言及接口关键技术-课后习题答案.docx_第1页
第1页 / 共73页
16、32位微机原理、汇编语言及接口关键技术-课后习题答案.docx_第2页
第2页 / 共73页
16、32位微机原理、汇编语言及接口关键技术-课后习题答案.docx_第3页
第3页 / 共73页
16、32位微机原理、汇编语言及接口关键技术-课后习题答案.docx_第4页
第4页 / 共73页
16、32位微机原理、汇编语言及接口关键技术-课后习题答案.docx_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《16、32位微机原理、汇编语言及接口关键技术-课后习题答案.docx》由会员分享,可在线阅读,更多相关《16、32位微机原理、汇编语言及接口关键技术-课后习题答案.docx(73页珍藏版)》请在课桌文档上搜索。

1、第一章1.1 解:五代,详细见书1.2 解:微型计算机:以大规模、超大规模集成电路为重要部件,以集成了计算机重要部件控制器和运算器微解决器为核心,所构造出计算机系统。PC机:PC(PersonalComputer)机就是面向个人单独使用一类微机。单片机:用于控制微解决器芯片,内部除CPU外还集成了计算机其她某些重要部件,如:ROM、RAM、定期器、并行接口、串行接口,有芯片还集成了A/D、D/A转换电路等。数字信号解决器DSP:重要面向大流量数字信号实时解决,在宿主系统中充当数据解决中心,在网络通信、多媒体应用等领域正得到越来越多应用1.3 解:微机重要有存储器、I/O设备和I/O接口、CPU

2、、系统总线、操作系统和应用软件构成,各某些功能如下:CPU:统一协调和控制系统中各个部件系统总线:传送信息存储器:存储程序和数据I/O设备:实现微机输入输出功能I/O接口:I/O设备与CPU桥梁操作系统:管理系统所有软硬件资源1.4 解:系统总线:传递信息一组公用导线,CPU通过它们与存储器和I/O设备进行信息互换。好处:组态灵活、扩展以便三组信号线:数据总线、地址总线和控制总线。其使用特点是:在某一时刻,只能由一种总线主控设备来控制系统总线,只能有一种发送者向总线发送信号;但可以有各种设备从总线上同步获得信号。1.5解:(1)用于数值计算、数据解决及信息管理方向。采用通用微机,规定有较快工作

3、速度、较高运算精度、较大内存容量和较完备输入输出设备,为顾客提供以便和谐操作界面和简便快捷维护、扩充手段。(2)用于过程控制及嵌人应用方向。采用控制类微机,规定能抵抗各种干扰、适应现场恶劣环境、保证长时间稳定地工作,规定其实时性要好、强调其体积要小、便携式应用强调其省电。1.6 解:CPU存储器I/O接口tt1.7 解:I/O通道:位于CPU和设备控制器之间,其目是承担某些本来由CPU解决I/O任务,从而把CPU从繁杂I/O任务中解脱出来。由10根信号线构成(A9-A0)。1.8 解:BIOS:基本输入输出系统。重要功能:用来驱动和管理诸如键盘、显示屏、打印机、磁盘、时钟、串行通信接口等基本输

4、入输出设备1.9 解:基本RAM区:640KB保存RAM区:128KB扩展ROM区:128KB基本ROM区:128KB1.10解:(1)、数一用来直接表征量大小,涉及:定点数、浮点数。(2)、码一用来指代某个事物或事物某种状态属性,涉及:二进制、八进制、十进制、十六进制。区别:使用场合不同,详见P16.1.11解:(1)(174.66)10=(10101110.10101)2(174.66)l0=(AEA8)6(2)(100oiiioioiloioii)2=(2283.34375)10(100oiiioioiloioii)2=(8ER58)16(3)(F18A6.6)16=(111100Ol1

5、00010100110.0110)2(F18A6.6)16=(989350.375)101.12解:原码反码补码+3700100101/251100100101/25H00100101/25H-3710100101/A5H11011010/DAH11011011/DBH1.13解:+37-3716位32位16位32位OO25HOOOOOO25HFF5BHFFFFFF5BH1. 14解:无符号数:70D补码有符号数:70DBCD码:46DASCIkF1.15 解:1)、相加后若浮现和不不大于9,则将和减去10后再向高位进12)、若浮现组间进位,则将低位加61.16 解:详见课本16页。1.17

6、解:C34020001.18解:5050H十进制值5080二进制十六进制二进制十六进制0011OOlOB32H01010000B50H1. 19解:D:44Hd:64HCR:ODH1.F:OAH0:30HSP:20HNU1.:00111.20解:国标码:3650H机内码:B6BOH第二章2. 1算术逻辑单元A1.U、寄存器组和控制甥;总线接口单元BIU:管理8088与系统总线接口负责cpu对接口和外设进行访问执行单元EU:负责指令译码、执行和数据运算;8位cpu在指令译码前必要等待取指令操作完毕,8088中需要译码指令已经取到了指令队列,不需要等待取指令。而取指令是Cpu最为频繁操作,因而80

7、88构造和操作方式节约了大量等待时间,比8位CPU节约了时间,提高了性能。2.28个8位寄存器:AH、A1.、BH、BUCH、C1.、DH、D1.;8个16位寄存器:累加器AX、基址寄存器BX、计数器CX、数据寄存器DX、源地址寄存器SI、目地址寄存器DI、基址指针BP、堆栈指针SP。2.3标志用于反映指令执行成果或者控制指令执行形式。状态标志用于记录程序运营成果状态信息;控制标志用于控制指令执行形式。2.4例:有运算:3AH+7CH=B6H作为无符号数运算,没有进位,CF=O;作为有符号数运算,成果超过范畴,OF=1.2.58088中每个存储单元有唯一20位地址,称为物理地址。解决器通过总线

8、存取存储器数据时,采用这个物理地址。在顾客编程过程中采用“段地址:偏移地址”形式称为逻辑地址。将逻辑地址中段地址左移4位,加上偏移地址就得到物理地址。IMB最多能提成65536个逻辑段。2.6代码段:存储程序指令序列;堆栈段:拟定堆栈所在主存储区;数据段:存储当前运营程序数据;附加段:附加数据段,用于数据保存。此外串操作指令将其作为目操作数存储区。2. 78088存储空间分段管理,程序设计时采用逻辑地址。由于段地址在默认或指定段寄存器中,因此只需要偏移地址,称为有效地址EA.操作数在主存中有如下几种寻址方式:直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址。3. 8(1

9、)及时数寻址ax:1200HD7位不全为0(3) cx64H2) 18执行65536次。3) 19功能:将数组中每个字元素相加,成果存储于total。4) 20(1)leasi,stringMovdh,siMovdl,si+5(2)movaxwordptrbufferlSubawordptrbuffer2Movdxwordptrbuffer1+2Sbbdwordptrbuffer2+25) )testdx,OFOOOHjzeveneven;movax,O6) )movex,4again:sard,lrcra,lloopagain7) )movcz100movsi,Oagain:movalzOF

10、FHaddal,arraysimovarraysi,alincsiloopagain2.21HtoascprocMovbl,alMoval,ahMovbh,10MulbhAndaxzOOFFHAddal,blHtoend:retHtoascendp2.22计算机系统运用中断为顾客提供硬件设备驱动程序。在IBM-PC系列微机中,基本输入输出系统ROM-BIOS和DOS都提供了丰富中断服务程序,称为系统功能调用。调用环节(1)AH中设立系统功能调用号(2)在指定寄存器中设立入口参数(3)使用中断调用指令执行功能调用(4)依照出口参数分析调用状况2.23HtoascprocAndal,OFHAdda

11、l,9HDaaAdcalz40HDaaMovdl,alInt21HRetHtoascendp2.24NumoutprocXorah,ahAamAdda3030HMovdl,ahMovah,02HInt21HMovdl,alMovah,02HInt31HRetNumoutendp2.25Msgkeydb,inputnumber0-9,$MsgwrgdbwerrorTSwInt21HAgain:movahz01HInt21HCmpa3HJbdispCmpa39HJadispMovdl,alMovah,02HInt21HJmpdoneDisp:movdx,offsetmsgwrgMovah,09HI

12、nt21HJmpagainDone:movah,02HMovdl,alInt21H3.1解:汇编语言是一种以解决器指令系统为基本低档程序设计语言,它采用助记符表达指令操作码,采用标记符号表达指令操作数,可以直接、有效地控制计算机硬件,因而容易创立代码序列短小、运营迅速可执行程序3.2 解:(1)完整汇编语言源程序由段构成(2)一种汇编语言源程序可以包括若干个代码段、数据段、附加段或堆栈段,段与段之间顺序可随意排列(3)需独立运营程序必要包括一种代码段,并批示程序执行起始点,一种程序只有一种起始点(4)所有可执行性语句必要位于某一种代码段内,阐明性语句可依照需要位于任一段内(5)普通,程序还需要

13、一种堆栈段3.3 解:存储模式特点TINYCOM类型程序,只有一种不大于64KB逻辑段(MASM6.x支持)SMA1.1.小应用程序,只有一种代码段和一种数据段(含堆栈段),每段不不不大于64KBCOMPACT代码少、数据多程序,只有一种代码段,但有各种数据段MEDIUM代码多、数据少程序,可有各种代码段,只有一种数据段1.ARGE大应用程序,可有各种代码段和各种数据段(静态数据不大于64KB)HUGE更大应用程序,可有各种代码段和各种数据段(对静态数据没有限制)F1.AT32位应用程序,运营在32位80x86CPU和Windows9x或NT环境3.4 解:开始位置:用标号指明返回DOS:运用

14、DOS功能调用4CH子功能来实现汇编停止:执行到一条END伪指令时,停止汇编3.5 解:段定位、段组合和段类型。3.6 解:stacksegmentstackdb1024(0)stackendsdatasegmentstringdb,Hello,Assembly!,OdH,OaH,$dataendscodesegment,code,assumecs:code,ds:data,ss:stackstart:movdx,offsetstringmovah,9int21hcodeendsendstart3.7 解:(1) .EXE程序程序可以有各种代码段和各种数据段,程序长度可以超过64KB普通生成E

15、XE构造可执行程序(2) .COM程序只有一种逻辑段,程序长度不超过64KB需要满足一定条件才干生成COM构造可执行程序(MASM6.X需要采用TINY模式)(3) 8解:符号定义伪指令有“等价EQir和“等号=”:符号名EQU数值表达式符号名EQU字符串符号名=数值表达式EQU用于数值等价时不能重复定义符号名,但“=”容许有重复赋值。例如:X=7;等效于:Xequ7X=X+5;“XEQUX+5”是错误3.9 解:(1) al=67h(2) ax=133h,dx=4h(3) ax=0230h(4) al=41h(5) ax=7654h3.10 解:(1)41h42h43h1010h45h46h

16、-1?444-19444-19444(2)IOhOOhOfbhOffh?3.11解:.datamylbdb,PersonalComputer,my2bdb20my3bdb14hmy4bdb00010100bmy5wdw20dup(?)my6c=100my7c=3.12解:运用定位伪指令控制,如org,even,align3.13 解:涉及逻辑地址和类型两种属性。3.14 解:Org100hvarwdw1234h5678hvarbdbvarddd12345678hbuffdd10dup(?)messdbHello,movaxoffsetvarboffsetmossmovax,typebuff+t

17、ypemess+typevardmovax,sizeofvarw+sizeofbuff+sizeofmessmovax,Iengthofvarw+Iengthofvard3.15 解:(1) 100O超过一种字节所能表达最大整数(2) Sl应为偶数(3)两个内存单元不能直接运算(4)应改为al+l(5)条件转移指令背面应接标号,而不是变量1.1 16解:movah,1;只容许输入小写字母int21hsubal,20h;转换为大写字母movdl,almovah,2int21h;显示3.17 解:movbx,offset1.EDtablemoval,Iednumxlat3.18 解:movax,b

18、ufXcmpax,bufYjaedonemovax,bufYdone:movbufZ,ax3.19解:.modelsmal1.stack.databufXdw-7signXdb?.code.startupcmpbufX,0;testbufX,80hjlnext;jnznextmovsignX,0jmpdonenext:movsignX,-1done:.exit0end3.20解:movdl,2,movax,bufXcmpax,bufYjenextldecdlnextl:ncxt2:cmpax,bufZjenext2decdlmovah,2int21h3.21解:restart:again:ne

19、xt:fun:funl:moval,numbermovbx,0;BX-记录为1位数cmpal,0;A1.=O结束jzdoneshral,1;最低位右移进入CFjcnext;为1,转移incbx;不为1,继续jmpagainpushaxpushbxshlbx,1;位数乘以2(偏移地址要用2个字节单元)jmpaddrsbx;间接转移:lP-table+BX;如下是各个解决程序段movdl,0,jmpdispmovdl,;代码段fun2:jmpdispmovdl,2,jmpdispfun3:movdl,3jmpdispfun4:movdl,4jmpdispfun5:movdl,5jmpdispfun

20、6:movdl,6,jmpdispfun7:movdl,7,jmpdispdisp:fmovah,2;显示一种字符int21hpopbxpopaxjmprestartdone:3.22编制程序完毕12H、45H、0F3H、6AH、20HOFEH90H、0C8H、57H和34H等10个字节数据之和,并将成果存入字节变量SUM中(不考虑溢出和进位)。;wjxt322.asm.modelsmall.stack.databdatadb12h,45h,0f3h,6ah,20h,Ofeh,90h,0c8h,57h,34h;原始数据sumdb?;预留成果单元.code.startupxorsi,si;位移量

21、清零xoral,al;取第一种数movex,num;累加次数again:addal,bdatasi;累加incsi;指向下一种数loopagain;如未完,继续累加movsum,al;完了,存成果.exit0endnumequ10;数据个数3.23求主存O(MOh:0开始一种64KB物理段中共有多少个空格?;wjxt323.asm.modelsmal1.codestart:movax,0040h;送段地址movds,axmovsi,0;偏移地址movex,si;计数(循环次数)xorax,ax;空格计数器清零again:cmpbyteptrsi,20h;与空格ASCn码比较jnenext;不是

22、空格,转incax;是空格,空格数加1next:incsi;修改地址指针loopagain;cx=c-1,如CX=O退出循环.exit0endstart3.24编写计算100个16位正整数之和程序。如果和不超过16位字范畴(65535),则保存其和到WOrdSUn1,如超过则显示4overflow,.答::数据段countequ100parraydwcountdup(?);假设有100个数据wordsumdw0msgdb*overflow*,$;代码段movex,countmovax,0movbx,offsetparrayagain:addax,bxjncnextmovdx,offsetmsg

23、movah,9int21h;显示溢出信息jmpdone;然后,跳出循环体next:addbx,2loopagainInovwordsum,axdone:3.25编程把一个16位无符号二进制数转换成为用842IBCD码表达5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以100、10和1,得到“百位”、“十位”和“个位”。jwjxt325.asm.modelsmall.stack256.dataarraydw?:源字数据dbcddb5dup(?);五位bed成果,高对高低对低.code.startupmovdx,array;取

24、源数据(余数)movbx,10000;除数movex,10;除数系数movsi,4:目数据高位位移量again:movax,dx;dx.ax中存储被除数movdx,0divbx;除于bx,商ax,余数dxmovdbcdsi,al;商V10,存成果pushdx;暂存余数movax,bx;除数除于10movdx,0divex;dx.ax除于ex,商ax、余数0存在dxmovbx,ax;bx是除数popdxdecsi;目数据位移量减1jnzagainmovdbcd,dl;存个位数(10).exit0end3. 26解:(1)汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下:过程名

25、PROCNEARIFAR;过程体过程名ENDP(2)保护用到寄存器内容,以便子程序返回时进行相应恢复。(3)改错:crazyprocpishbxpushexxorax,axxordx,dxagain:adda,bxadcdx,0incbxincbxloopagainpopexpopbx3.27解(不需调用HTOASC子程序):again:movah,1int21hcmpal,Ibh;ESCASCII码是Ibhjedonemovdl,almovah,2int21h;是大写字母则转换为小写字母jmpagaindone:3.28解答:asctobprocpushexanddh,Ofh;先转换十位数s

26、hldh,1;十位数乘以10(采用移位指令)movch,dhshldh,1shldh,1adddh,chanddl,Ofh;转换个位数adddh,di:十位数加个位数moval,dh;设立出口参数popCXretasctobendp3.29解:DIPASCDIPASCHTOASCprocpushexpushdxpushaxmovcl,4shral,clcallHTOASCmovdl,almovah,2int21hpopaxcallHTOASCmovdi,almovah,2int21hmovdl,H,movah,2int21hpopdxpopCXretendpproc;入口参数:A1.=要显示一

27、种16进制数;转换高位;显示;转换低位;显示;显示一种字母“H”;将A1.低4位表达一位16进制数转换为ASCII码andal,Ofhcmpal,9jbehtoascladdal,37h;是0人1一0尸11,加37H转换为ASCIl码ret;子程序返回htoascl:addal,30h;是09,加30H转换为ASCII码ret;子程序返回HTOASCendp3.30解:Iucaseprocpushbxmovbx,offsetstringcmpal,0jecasecmpal,1jzeaselcmpal,2jzcase2jmpdonecase:cmpbyteptrbx,0jedonecmpbyte

28、ptrbx,A,jbnextcmpbyteptrbxt,Z,janextaddbyteptrbx,2Ohnext:easel:next1:incbxjmpcasecmpbyteptrbx,Ojedonecmpbyteptrbx,ajbnextlcmpbyteptrbx,zjanextlsubbyteptrbx,20hincbxcase2:next20:jmpeaselcmpbyteptrbx,Ojedonecmpbyteptrbx,A,jbnext2cmpbyteptrbx,Vjanext20addbyteptrbx,2Ohjmpnext2cmpbyteptrbx,ajbnext2cmpbyt

29、eptrbx,z,janext2subbyteptrbx,20hnext2:incbxjmpcase2done:popbxretIucaseendp3.31解:(1)用寄存器传递参数:最简朴和惯用参数传递办法是通过寄存器,只要把参数存于商定寄存器中就可以了由于通用寄存器个数有限,这种办法对少量数据可以直接传递数值,而对大量数据只能传递地址采用寄存器传递参数,注意带有出口参数寄存器不能保护和恢复,带有入口参数寄存器可以保护、也可以不保护,但最佳可以保持一致(2)用共享变量传递参数子程序和主程序使用同一-种变量名存取数据就是运用共享变量(全局变量)进行参数传递如果变量定义和使用不在同一种源程序中,

30、需要运用PUB1.IC、EXTREN声明如果主程序还要运用本来变量值,则需要保护和恢复运用共享变量传递参数,子程序通用性较差,但特别适合在各种程序段间、特别在不同程序模块间传递数据(3)用堆栈传递参数参数传递还可以通过堆栈这个暂时存储区。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈获得它们采用堆栈传递参数是程式化,它是编译程序解决参数传递、以及汇编语言与高档语言混合编程时常规办法3. 32解:办法:主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈获得它们注意:压栈与弹栈必要要一一相应。3.33 解:办法1:

31、neg32proc;入口参数:DX.AX=32位有符号数negax;实现O-DX.AX功能negdxsbbdx,0;这条指令也可以用decdx代替retneg32endp;出口参数:DX.AX=32位有符号数补码办法2:neg32proc;入口参数:DX.AX=32位有符号数notax;实现DX.AX求反加1notdxaddax,1adcdx,0retneg32endp;出口参数:DX.AX=32位有符号数补码3.34 解:;数据段arraydb12h,25h,OfOh,0a3h,3,68h,71h,Ocah,Offh,90h;数组countequ$-array;数组元素个数;代码段movbx

32、,offsetarray;BXj数组偏移地址movex,count;CX-数组元素个数callchecksum;调用求和过程movresult,al;解决出口参数movax,4c00hint21h;计算字节校验和通用过程;入口参数:DS:BX=数组段地址:偏移地址,CX=元素个数;出口参数:A1.=校验和;阐明:除AX/BX/CX外,不影响其她寄存器checksumprocxoral,al;累加器清0sum:addal,bx;求和incbx;指向下一种字节loopsumretchecksumendpendresultdb?;校验和3.35解:(1).modelsmal1.stack.dataw

33、datadispadw34abh.code.startupmovax,wdatacalldispa.exit0procpushexpushdxmovcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,Ofhcaldldispmovdl,alshrdl,clcalldldispmovdl,alanddl,Ofhcalldldisppopdxpopexretdispaendpdldispprocpushaxordl,30hcmpdl,39hjbedldispladddl,7dldispl:movah,2int21hpopaxretdldispendpend.mo

34、delsmal1.stack.datawdatadw34abhwordtempdw?.code.startupmovax,wdatamovwordtemp,axcalldispa.exitOdispaprocpushexpushdxmovcl,4movdl,byteptrwordtemp+1shrdl,clcalldldispmovdl,byteptrwordtemp+1anddl,Ofhcalldldispmovdl,byteptrwordtempshrdl,clcalldldispmovdl,byteptrwordtempanddl,OfhcalldldisppopdxpopCXretdi

35、spaendpdldispprocpushaxordl,30hcmpdl,39hjbedldispladddl,7dldispl:movah,2int21hpopaxretdldispendpend(3).modelsmall.stack.datawdatadw34abh.code.startuppushwdatacalldispapopax;addsp,2.exit0dispaprocpushbpmoVbp,sppushaxpushexpushdxmovax,bp+4movcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,Ofhcalldldispmov

36、dl,alshrdl,clcalldldispmovdl,alanddl,Ofhcalldldisppopdxpopexpopaxpopbpretdldispprocpushaxordl,30hcmpdl,39hjbedldispladddl,7dldispl:movah,2int21hpopaxretdldispendpend3.36解:如果运用共享变量传递函数,且变量定义和使用不在同一种源程序中,需要运用PUB1.IC、EXTERN声明。3.37解:(1)宏定义由一对宏汇编伪指令MACRO和ENDM来完毕,格式如下:宏名MACRO形参表;宏定义体ENDM宏定义之后就可以使用它,即宏调用:宏

37、名实参表(2)宏调用格式同普通指令同样:在使用宏指令位置写下宏名,后跟实体参数;如果有各种参数,应按形参顺序填入实参,也用逗号分隔(3)宏展开:在汇编时,宏指令被汇编程序用相应代码序列代替,这就是宏展开宏展开详细过程是:当汇编程序扫描源程序遇到已有定义宏调用时,即用相应宏定义体完全代替源程序宏指令,同步用位置匹配实参对形参进行取代3.38解:宏调用参数通过形参、实参结合实现传递,简捷直观、灵活多变。宏汇编大特色是它参数。宏定义时既可以无参数,也可以有一种或各种参数;宏调用时实参形式也非常灵活,可以是常数、变量、存储单元、指令(操作码)或它们一某些,也可以是表达式;只要宏展开后符合汇编语言语法规

38、则即可。3.39解:宏:仅是源程序级简化:宏调用在汇编时进行程序语句展开,不需要返回;不减小目的程序,执行速度没有变化通过形参、实参结合实现参数传递,简捷直观、灵活多变子程序:还是目的程序级简化:子程序调用在执行时由CA1.1.指令转向、RET指令返回;形成目的代码较短,执行速度减慢需要运用寄存器、存储单元或堆栈等传递参数选取:宏与子程序具备各自特点,程序员应当依照详细问题选取使用那种办法。普通,当程序段较短或规定较快执行时,应选用宏;当程序段较长或为减小目的代码时,要选用子程序3.40编写一种宏指令movedoprnd,soprnd,它实现任意寻址方式字量源操作数soprncl送到目操作数doprnd,涉及存储单元到存储单元传送功能。答:movemacrodoprnd,soprndmovax,soprndmovdo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号