首页 微型计算机原理与接口技术(第5版)课后答案及问题墙

微型计算机原理与接口技术(第5版)课后答案及问题墙

举报
开通vip

微型计算机原理与接口技术(第5版)课后答案及问题墙微型计算机原理与接口技术(第5版)课后答案及问题墙第一章绪论{崔文韬问}:课后习题第一题,二进制数与十进制数转换。{崔文韬答}:11001010B=202D,00111101B=61D,01001101B=77D,10100100B=164D。{崔文韬问}:课后习题第二题,16进制数与十进制数转换。{崔文韬答}:12CH=300D,0FFH=255,3A8DH=14989D,5BEH=1470D{崔文韬问}:课后习题第三题,十进制数转化为二进制数和16进制数。{杨艺答}:25D=19H=00011001B,76D=...

微型计算机原理与接口技术(第5版)课后答案及问题墙
微型计算机原理与接口技术(第5版)课后答案及问题墙第一章绪论{崔文韬问}:课后习题第一题,二进制数与十进制数转换。{崔文韬答}:11001010B=202D,00111101B=61D,01001101B=77D,10100100B=164D。{崔文韬问}:课后习题第二题,16进制数与十进制数转换。{崔文韬答}:12CH=300D,0FFH=255,3A8DH=14989D,5BEH=1470D{崔文韬问}:课后习题第三题,十进制数转化为二进制数和16进制数。{杨艺答}:25D=19H=00011001B,76D=4CH=01001100B,128D=100H=0000000100000000B,134D=106H=0000000100000110B{杨艺答}:128D=80H=10000000B,134D=86H=10000110B{崔文韬问}:课后习题第四题,写出10进制数的BCD码{杨艺答}:327D=(001100100111)BCD,1256D=(0001001101010110)BCD{杨艺答}:1256D=(0001001001010110)BCD{崔文韬问}:英文单词About的ASCII码{沙猛答}:3935H{王金鑫改}:41H,62H,6FH,75H,74H{崔文韬问}:数字95的ASCII码{王金鑫答}:39H,35H{崔文韬问}:课后习题第六题:10进制数的原码、补码、反码{杨艺答}:【+42】原=00101010B=【+42】反=【+42】补【-42】原=10101010B,【-42】反=11010101B,【-42】补=11010110B【+85】原=01010101B=【+85】反=【+85】补【-85】原=11010101B,【-85】反=10101010B,【-85】补=10101011B{崔文韬问}:机器语言或者机器码(MachineCode),汇编语言(AssembleLanguage),高级语言的定义{沙猛答}:机器码:计算机只认得二进制数码,计算机中的所有指令都必须用二进制 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示,这种用二进制表示的指令称为机器码。汇编语言:用助记符来代替二进制的机器码的符号语言高级语言:相对于机器语言,接近人们使用习惯的程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 语言。{崔文韬问}:课后习题第10题{崔文韬答}:参考课本16页图1.4{崔文韬问}:课后习题第11题{崔文韬答}:参考课本11页图1.2{杨艺答}:微处理器、存储器、I/O接口,I/O设备和总线。6{崔文韬问}:课后习题第12题{崔文韬答}:ALU:ArithmeticLogicUnit,CPU:CentralProcessingUnit,PC:PersonalComputer,DOS:DiskOperationSystem{崔文韬问}:8086和80386各有多少根地址线,可直接寻址的内存空间是多少,他们的数据线各有多少根?{杨艺答}:8086有20根地址线A19~A0,可直接寻址的内存空间是2^20个字节单元,有16根数据线;80386有32根地址线,可直接寻址的内存空间是2^32个字节单元,有32根数据线。{崔文韬问}:什么是二进制编码,常用的二进制编码有哪两种?{杨艺答}:采用若干特定的二进制码的组合来表示各种数字、英文字母、运算符号等的编码方式叫做二进制编码,常见的二进制编码有BCD码和ASCII码两种。{崔文韬问}:解释位,字节,字,字长的含义?{沙猛答}:位bit:计算机中二进制数的每一位0或1是组成二进制信息的最小单位,称为位。字节byte:8个二进制信息组成的一个单位称为一个字节,1Byte=8Bits。字word:由16位二进制数即两个字节组成。字长wordlength:决定计算机内部一次可以处理的二进制代码位数。{刘玉年问}:存在计算机中的数都是以有符号数存储的,还是以无符号数存储的呢?{崔文韬答}:刘玉年同学,你能先自己尝试回答一下这个问题,或者说你自己的理解是什么?{刘玉年答}:应该是两者都不是吧,因为在运算的时候仅仅就是二进制数的运算,而判断结果的意义(是什么样的数)是通过标志为判断的。{崔文韬答}:两者都不是,存储器中数据的含义是完全由编程人员决定的。计算机只接收二进制数据,即01序列。至于原始数据是什么以及如何转化为二进制数据,都是由编程人员决定的。计算机对所存储数据按照二进制计算法则进行运算,为适应有符号数和无符号数运算两种情况,通过设置标志位来计算结果在两种情况下的意义。第二章8086CPU{崔文韬问}:8086/8088可直接寻址多少内存(字节)单元?多少IO端口?外部数据线各有多少?{董国福答}:8086/8088可直接寻址1MB内存空间;可以访问64K个I/O端口;但外部数据总线8086有16根,8088有8根。{崔文韬问}:8086CPU内部由那两部分组成?{俞楠答}:8086CPU由总线接口单元(BIU)和指令执行单元(EU)两部分组成。{崔文韬问}:EU,BIU,AX,BX,CX,DX,DS,CS,ES,SS,SP,BP,DI,SI全称?{董国福答}:EU:ExecutionUnitBIU:BusInterfaceUnitAX:AccumulatorBX:BaseCX:CountDX:DataDS:DataSegmentCS:CodeSegmentES:ExtraSegmentSS:StackSegmentSP:StackPointerBP:BasePointerDI:DestinationIndexSI:SourceIndex{崔文韬问}:8086CPU内部包含哪些寄存器?各有什么用途?{俞楠答}:1.数据寄存器:用来存放16位数据信息或地址信息。2.地址指针和变址寄存器:SP,BP,SI,DI这组地址指针个变址寄存器加上基址寄存器BX,可与段寄存器配合使用,一起构成内存的物理地址。(数据寄存器和地址指针和变址寄存器则被称为通用寄存器。)(段基地址和段内偏移地址Offset组合起来就可形成20位物理地址)5.标志寄存器:6个状态标志CF,PF,AF,ZF,SF,OF用来表示指令执行后的结果或状态特征,根据这些特征,由转移指令控制程序的走向。3个控制标志,TF,IF,DF,可以根据需要用程序设置或清除。{崔文韬问}:带符号数10110100B和11000111B相加,各标志位为多少?哪些标志位有意义?如果作为无符号数相加,各标志位为多少?哪些标志位有意义?{崔文韬答}:二进制数所有位都参与运算10110100+11000111101111011OFSFZFAFPFCF100011程序员将该数看做有符号数,因此SF,OF,ZF,PF有意义。如果将该数看做无符号数,计算过程一样,标志位结果相同,CF,ZF,PF有意义。利用debug程序验证结果:运行dosbox,输入debug,r命令查看初始寄存器数值,a命令输入汇编指令,t命令执行查看结果,过程如下图所示:debug中,flags中的NV,UP等表示什么含义,请查看百度网盘中共享的debug教程,下图为该教程中的截图:{崔文韬问}:课后习题第七题,段地址:偏移地址与物理地址的关系(原理在 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 中31-32页){俞楠答}:20位的物理地址=段基地址*16+16位的偏移量1200H*16+3500H=15500H(1200H*16等同于把1200H左移一位地址变成12000H,下面同理)FF00H*16+0458H=FF458H3A60H*16+0100H=3A700H{崔文韬问}:CS:IP=3456:0210,CPU要执行的下条指令的物理地址为多少?{俞楠答}:3456H*16+0210H=33770H曲洋答:34770H{崔文韬问}:课后习题十一题,SS:SP=2000,0300H,堆栈在内存当中的物理地址范围是多少?执行两条PUSH指令后,SS:SP=?再执行一条PUSH指令后,SS:SP=?{俞楠答}:物理地址范围:(2000H*16+0):(2000H*16+(0300H))=20000H:20300H执行两条PUSH指令后:SS:SP=2000H:(0300H-4)=2000H:02FCH再执行一条PUSH指令后,SS:SP=2000H:(02FC-2)=2000H:02FAH{刘瑾改}:堆栈在内存当中的物理地址范围为:2000:0000H~2000:(0300H-1){崔文韬问}:课后习题十二题,从存储单元2000H开始存放的字节数据为:3AH,28H,56H,4FH,试画出示意图说明,从2000H和2001H单元开始取出一个字数据各要进行几次操作,取出的数据分别等于多少?{俞楠答}:从2000H中取出一个字数据要进行 一次操作,取出字为283A。从2001H中取出一个字数据要进行 两次操作,取出字为5628。{罗小东补充}:如下表,如果从2000H取出一个字数据,则执行一次操作直接取出一个字283AH如果从2001H开始取出一个字数据,则需进行两次操作,分别是——先从2000H单元开始读取一个字283AH,取得低字节28H,舍弃3AH;再从2002H单元读取一个字数据,4F56H,取得其高字节56H,然后就可以得到2001H单元开始取出的一个自数据——5628H。原理就是:8086CPU对存储器进行存取操作时,都是从偶地址体开始的。20003A20012820025620034F{罗小东问}:一个含有16个字节数据的变量,它的逻辑地址为1000:0100H,那么该变量的最后一个字节数据的物理地址是____H?(可不可以答案再加点简单分析呀){崔文韬问}:设定SS:SP后形成的堆栈占据一定的物理地址范围,是否可无限次执行PUSH或者POP指令?为什么?{苏子宇答}:堆栈有一定的容量,无限次执行push会超出范围,导致覆盖设定的堆栈空间外的数据,产生栈顶越界现象。堆栈空间是程序员向系统请,系统开辟的安全数据空间,空间外的数据可能具有其他用途,任意改动可能引发错误。8086CPU不提供检测栈顶是否越界的机制。编程时要注意栈顶越界问题,根据可能用到的最大栈空间来安排堆栈大小,防止入栈的数据导致栈顶越界。{刘玉年问}:8086有20根地址总线,可寻址的内存空间是1M,是不是就说8086里面的内存空间就只有1M呢?如果不是这样的,那么多余的地址空间又该如何寻址呢?{崔文韬答}:8086的内存寻址空间真的只有1M,这1M空间分配给内存使用(包含显存,主内存,BIOS的ROM)。8086针对外设的寻址,通过硬件电路另外生成64k的IO地址,供寻址IO接口使用还有啊,如果真的是内存空间的大小m和地址总线的数目n是:m=2^n的关系的话,那么现在的片子运存是4g的话,那要32根地址总线的,相应的地址输入输出端口也要有32个,这是不是又有些浪费?{崔文韬答}:内存空间大小和地址数目的关系就是如此。32根地址线对应4g内存,这个是必须的,不存在浪费问题。第三章8086寻址方式和指令系统{崔文韬问}:习题1中题目,分别说明源操作数和目的操作数各采用的寻址方式1.movax,2408h2.movcl,0ffh3.movbx,[si]4.mov5[bx],bl{沙猛答}:1.立即数,寄存器2.立即数,寄存器3.寄存器间接,寄存器4.寄存器,寄存相对{崔文韬问}:习题1中题目,分别说明源操作数和目的操作数各采用的寻址方式1.mov[bp+100],ax2.mov[bx+di],'$'3.movdx,es:[bx+si]4.movval[bp+di],dx{俞楠答}:1.寄存器寻址,寄存器相对寻址2.立即数寻址,基址变址寻址3.基址变址寻址,寄存器寻址4.寄存器寻址,相对基址变址寻址。{崔文韬问}:习题1中题目,分别说明源操作数和目的操作数各采用的寻址方式1.inal,052.movds,ax{姚胜答}1.寄存器,立即数。2.寄存器,寄存器{崔文韬问}:习题2中题目,已知DS=1000h,bx=0200h,si=02h,内存10200h~10205h的内容分别为10h,2ah,3ch,46h,59h,6bh。下列每条指令执行完成后,ax寄存器的内容是什么。1.movax,0200h2.movax,[200]{沙猛答}:1.为0200h2.为2a10h{崔文韬问}:习题2中题目,已知DS=1000h,bx=0200h,si=02h,内存10200h~10205h的内容分别为10h,2ah,3ch,46h,59h,6bh。下列每条指令执行完成后,ax寄存器的内容是什么。1.movax,bx2.movax,3[bx]{于刚答}:执行指令1后,ax为10h;执行2后,ax为46h{俞楠改}:1.0200H2.5946H{崔文韬问}:习题2中题目,已知DS=1000h,bx=0200h,si=02h,内存10200h~10205h的内容分别为10h,2ah,3ch,46h,59h,6bh。下列每条指令执行完成后,ax寄存器的内容是什么。1.movax,[bx+si]2.movax,2[bx+si]{于刚答}:执行指令1,ax为3ch;执行指令2,ax为59h{俞楠改}:1.463CH2.6B59H{崔文韬问}:习题3中题目,设ds=1000h,es=2000h,ss=3500h,si=00a0h,di=0024h,bx=0100h,bp=0200h,数据段中变量名为val的偏移地址为0030h,下列源操作数字段的寻址方式是什么?物理地址是多少?1.movax,[100h]2.movax,val3.movax,[bx]4.movax,es:[bx]{俞楠答}:1.直接寻址10100H2.直接寻址10030H3.寄存器间接寻址10100H4.寄存器间接寻址20100H{崔文韬问}:习题3中题目,设ds=1000h,es=200h,ss=3500h,si=00a0h,di=0024h,bx=0100h,bp=0200h,数据段中变量名为val的偏移地址为0030h,下列源操作数字段的寻址方式是什么?物理地址是多少?1.movax,[si]2.movax,[bx+10h]3.movax,[bp]4.movax,val[bp+si]{俞楠答}:1.寄存器间接寻址100A0H2.寄存器相对寻址10110H3.寄存器间接寻址35200H4.相对基址变址35230H{崔文韬问}:习题3中题目,设ds=100h,es=200h,ss=3500h,si=00a0h,di=0024h,bx=0100h,bp=0200h,数据段中变量名为val的偏移地址为0030h,下列源操作数字段的寻址方式是什么?物理地址是多少?1.movax,val[bx+di]2.movax,[bp+di]{俞楠答}:1.相对基址变址寻址10154H2.基址变址寻址35224H{崔文韬问}:习题4,指令机器码,利用debug命令可以查看指令对应的机器码,此内容大家了解即可。moval,cl机器码在内存中从低到高存放为:88c8movdx,cx机器码在内存中从低到高存放为:89camovwordptr[bx+100h],3150h机器码在内存中从低到高存放为:c78700015031通过debug中的a命令输入以上指令,通过d命令查看对应的二进制机器码,过程及结果如下:{崔文韬问}:习题6,指出指令错误1.movdl,ax2.mov8650h,ax3.movds,0200h4.mov[bx],[1200]5.movip,0ffh6.mov[bx+si+3],ip7.movax,[bx+bp]{刘玉年答}:1.数据长度不一致2.立即数不能做目的操作数3.立即数不能向段寄存器传送数据4.存储器与存储器之间不能直接传送数据5.IP寄存器的内容不能通过程序编辑6.IP寄存器不能作为源操作数或目的操作数7.bx和bp不允许出现在同一[]中。{崔文韬问}:习题6,指出指令错误1.moval,es:[bp]2.movdl,[si+di]3.movax,offset0a20h4.moval,offsettable5.xchgal,506.inbl,05h7.outal,offeh{刘玉年答}:1.正确2.si和di不能出现在同一[]中3.offset后面应跟符号地址4.符号table的偏移地址是16位的,数据长度不一致5.xchg指令中不能使用立即数6.目的操作数只能是ax或al7.0ffeh大于ff,应用dx表示{崔文韬问}:习题5,已知程序的数据段为:datasegmentadb'$',10hbdb'COMPUTER'cdw1234h,0ffhddb5dup(?)edd1200459ahdataends请画出上述数据变量在内存中的数据的位置示意图,假设数据段段地址为X。参考课本P122页,图4.2。{俞楠答}:{崔文韬答}:程序参考实验代码如下,请同学们编译后使用debug调试执行,观察结果,验证答案。assumecs:code,ds:datadatasegmentadb'$',10hbdb'COMPUTER'c1dw1234h,0ffh;c及C是汇编语言关键字不能作为变量名。ddb5dup(?)edd1200459ahdataendscodesegmentmain:movax,datamovds,ax;完成数据段段地址与ds的绑定moval,a;al=24hmovdx,c1;dx=1234hxchgdl,a;dl=24h,变量a对应内存空间数据变为34h,10hmovbx,offsetb;bx=0002hmovcx,3[bx];cx=5550h,对应ASC码'UP'leabx,d;bx=000ehldssi,e;ds=1200h,si=459ahlesdi,e;请同学们回答你实验完成后的结果es=?,di=?movax,4c00hint21hcodeendsendmain{李聪聪答}:es=5613di=fc46{崔文韬答}:李聪聪同学,能尝试分析一下,为什么结果是这个样子吗?{李聪聪答}:分析了一遍,之前代码执行的好像有问题,可能已写入其他值,les之后才会这样。正常运行之后应该es=0000h,di=0000h。因为上一步操作更改了段寄存器ds的值为1200h,而e的有效地址为0013h,所以执行les时应从1200:0013h取连续的四个字节分别给di,es,而初始状态时存储单元中应为0000h。(不知道是不是这样)。观察很仔细,基本原因就是这样的!赞一个!。你之前的代码执行也没有问题。按照我后面给你的提示,再尝试一下,就知道以前你的程序也没问题了。{崔文韬答}:李聪聪同学,为了验证自己的猜想,是不是可以在运行完lesdi,e这条指令后,使用debug的d指令查看一下1200:0013中连续4个字节的内容,看看是否一致?或者从debug显示的内容中说明其内容?或者在运行lesdi,e指令之前,运行e1200:0013更改该存储单元连续的四个字节内容,然后看看是否与运行后DI,ES内容一致呢?{李聪聪答}:开始分析的时候就是从debug显示的DS:0013=0000推测的。运行了e命令之后猜测进一步得到验证:从1200:0013h取连续的四个字节分别给di,es,3412存入di,2143存入es。{崔文韬问}:习题7,已知ss=1050h,sp=0100h,ax=4860h,bx=1287h,试用示意图表示执行下列指令过程中,堆栈中的内容和堆栈指针sp是如何变化的(参考例子3.29){胡玲答}:{崔文韬问}:习题8,已知当前数据段中有一个十进制数字0~9的7段代码表,其数值依次为:40h,79h,24h,30h,19h,12h,02h,78h,00h,18h。要求用xlat指令将十进制数57转换成相应的7段代码值,存到bx寄存器当中,试写出相应的程序段。(参考例子3.31,注意5和7要分别进行转换){胡玲答}:不是图标类型的答案,还是不要使用图片完成回答吧。最好,可以在后边附上自己的完整代码及debug调试验证过程。{胡玲问}:其实吧debug还不太会用debug,+文件名之后用单步执行t指令然后不会看结果=.=我错了不会=.=写整个程序代码。胡玲同学,现在能把这个题目补充完整了吗??{崔文韬问}:习题9,下列指令完成什么功能1.addal,dh2.adcbx,cx3.subax,2710h4.decbx{姚胜答}:1.al与dh相加存到al中;2.bx与cx与cf当前值相加存到bx中;{胡玲答}:3.减法指令将ax寄存器的内容减去2710h再存在ax中4.减量指令,将bx寄存器的内容减一再存在bx中{崔文韬问}:习题9,下列指令完成什么功能1.negcx2.incbl3.mulbx4.divcl{于刚答}:1.对cx取负,并把结果送回cx;2.bl加1,并把结果送回bl;3.bx*ax结果为32位数,高位字放在dx,低位字放在ax;4.ax/cl商放在al中,余数放在ah中{崔文韬问}:习题10,已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每条指令执行后的结果是什么?标志位cf等于什么?1.addah,cl{胡玲答}:ax寄存器的高地址存的数是29h,cf=02.orbl,30h{胡玲答}:00110110BOR00110000B=36h,cf=03.notax{胡玲答}:按位操作,ax中存的数是DAF7h,无进位cf=04.xorcx,0fff0h{胡玲答}:0004h和fff0h异或得fff4h,cf=0{崔文韬问}:习题10,已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每条指令执行后的结果是什么?标志位cf等于什么?1.testdh,0fh{胡玲答}:查dh的D3是否等于1,无进位,cf=0,操作数不变2.cmpcx,00h{胡玲答}:0004h-00h=0004h即cx=0004h,结果不返回操作数,cf=03.shrdx,cl{胡玲答}:1864h逻辑右移4h得dx为0186h,cf=04.saral,1{胡玲答}:算数右移得ax为2504h,最高位不变,cf=0{崔文韬问}:习题10,已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每条指令执行后的结果是什么?标志位cf等于什么?1.shlbh,cl{胡玲答}:36h逻辑左移04h得bx=f036h,cf=0,指令中写成bx=0f036h2.salax,1{胡玲答}:2508h算数左移一位得0100101000010000B=4A10h即ax=4A10h,cf=03.rclbx,1{胡玲答}:0000111100110110B通过进位循环左移1位得0001111001101100B=1E6Chcf=04.rordx,cl{胡玲答}:1864h循环右移4h位可得dx=4186h,cf=0且cf没有参加循环{崔文韬答}:有两处错误,请胡玲同学改正。(已改正){崔文韬问}:习题11,假设数据段定义如下:datasegmentstringdb'ThePersonalComputer&TV'dataends试用字符串操作等指令完成以下功能:参考字符串处理指令例子(1):把该字符串传送到附加段中偏移量为GET_CHAR开始的内存单元中。{崔文韬答}:参考代码如下:同学们可以使用notepad++编辑源代码,然后使用ml编译连接为可执行文件,通过debug调试程序,观察结果。assumecs:code,ds:data,es:extradatasegment;string字符串长度为stringdb'ThePersonalComputer&TV'str_enddb'$'dataendsextrasegmentget_chardb32dup(0)extraendscodesegmentstart:movax,datamovds,ax;数据段与ds的绑定movax,extramoves,ax;附加段与es的绑定leasi,string;源串偏移地址设定movsi,offsetstringleadi,get_char;目的偏移地址设定movdi,offsetget_charmovcx,offsetstr_end-string;计算字符串长度cldrepmovsbmovax,4c00hint21hcodeendsendstart{崔文韬问}:习题11,假设数据段定义如下:datasegmentstringdb'ThePersonalComputer&TV'dataends试用字符串操作等指令完成以下功能:参考字符串处理指令CMPS例子,编写参考程序,调试并验证(2):比较该字符串是否与“TheComputer”相同,如果相同则将al寄存器的内容置1,否则置0。并要求将比较次数送到BL寄存器中。{崔文韬问}:习题11,假设数据段定义如下:datasegmentstringdb'ThePersonalComputer&TV'dataends试用字符串操作等指令完成以下功能:参考字符串处理指令SCAS例子,编写参考程序,调试并验证(3):检查该字符串中是否有“&”符,如果有则用空格将其替换。{崔文韬问}:习题12题,编程将AX寄存器中的内容以相反的次序传入DX寄存器中,并要求AX中的内容不被破坏{崔文韬答}:参考程序;习题P111页习题12参考程序assumecs:codecodesegmentstart:movax,1234h;0001001000110100Bmovdx,0;程序执行完成后dx=0010110001001000B=2c48hmovcx,16s:rolax,1;循环左移1位,将最高位移入cf中rcrdx,1;通过CF完成的循环右移1位loops;通过循环,将cx倒序移入dx中。movax,4c00hint21hcodeendsendstart{崔文韬问}:请同学根据上述程序,修改代码,使程序在完成倒序传入的基础上,还能统计DX寄存器中1的个数是多少?1的个数可以存在某个通用寄存器中。{崔文韬问}:习题14第1问,下列程序执行完后,AX,BX,CX,DX寄存器的内容分别是什么?请先回答问题,然后通过编辑源程序验证答案,利用debug检验答案的正确性。{崔文韬答}:因为cx=4,因此loop指令会使得循环体内程序执行4次,因此最终ax=0005h,bx=0010h,cx=0000h,dx=0000h。参考程序如下:;习题P112页习题14第一问参考程序assumecs:code,ss:stackstacksegmentstackdb16dup(0)stackendscodesegmentstart:movax,01hmovbx,02hmovdx,03hmovcx,04hnext:incaxaddbx,axshrdx,1;逻辑右移loopnextmovax,4c00hint21hcodeendsendstart利用debug加载编译好的程序,利用r命令查看寄存器初始值,例如u命令查看反汇编结果,确定程序退出返回dos的地址,利用g命令,连续执行程序,并查看最终寄存器中的内容。过程如下:{崔文韬问}:习题14第2问,下列程序执行完后,AX,BX,CX,DX寄存器的内容分别是什么?请先回答问题,然后通过编辑源程序验证答案,利用debug检验答案的正确性。(参考上题解答过程给出答案)。start:movax,01hmovbx,02hmovdx,03hmovcx,04hnext:incaxaddbx,axshrdx,1loopenext{崔文韬问}:习题14第3问,下列程序执行完后,AX,BX,CX,DX寄存器的内容分别是什么?请先回答问题,然后通过编辑源程序验证答案,利用debug检验答案的正确性。参考上题解答过程给出答案)。start:movax,01hmovbx,02hmovdx,03hmovcx,04hnext:incaxaddbx,axshrdx,1loopnenext{崔文韬问}:习题15,7名同学英语成绩低于80分,分数存在array数组中,试编写程序给每名同学成绩加5分,结果保存到new数组中。(参考P193页例3.93){崔文韬答}:参考程序如下,请同学们编译链接后,利用debug调试,验证程序功能。;习题P112页习题15参考程序assumecs:code,ds:datadatasegmentarraydb66,67,68,76,77,78,79;原始成绩newdb7dup(0);修改后成绩dataendscodesegmentstart:movax,data;数据段绑定到dsmovds,axmovbx,0;设置数组索引的初始值movcx,7add5:moval,array[bx]addal,5movnew[bx],alincbxloopadd5movax,4c00hint21hcodeendsendstart同学们可以发挥自己的想象力,使用其他指令实现该功能。编写程序时关注如下三点:1,数据从哪里来,通过何种寻址方式获得;2,如何处理数据,使用哪种指令;3,数据到哪里去,通过何种寻址方式存储数据。{崔文韬问}:习题16,软中断指令INTn中n的含义是什么?取值范围是多少?当n=0~4时,分别定义什么中断?INTO指令用于什么场合?{胡玲答}:n是中断类型码,是八位二进制数,取值范围是0-255=0-FFh,软件中断指令也叫陷进中断。INT0定义除法错中断,INT1定义单步中断,INT2定义不可屏蔽中断,INT3定义断电中断,INT4定义溢出中断在带符号数进行加减法运算之后必须安排一条INTO指令{崔文韬问}:习题17,那些指令可以使CF,DF和IF标志直接清零或者置1?{刘瑾答}:执行STC指令可以使CF(进位标志)置1;执行CLC指令可以使CF清零。执行CLD指令可以使DF(方向标志)清零;执行STD指令可以使DF置1。执行STI指令可以使IF(中断标志)置1;执行CLI指令可以使IF清零。第四章汇编语言程序设计{崔文韬问}:习题1,简述从汇编语言源程序到生成可执行文件*.exe,需要经过哪些步骤?{张多睿答}:编辑程序生成源程序后,经汇编程序MASM汇编后生成目标文件.OBJ,目标文件经连接程序LINK后连接后,生成可执行文件。{崔文韬问}:伪指令和指令语句各由那几个字段组成?那些字段是必不可少的?{李聪聪答}:指令语句由4部分组成,格式为:标号:指令助记符操作数;注释其中指令助记符必不可少。伪指令语句由4部分组成,格式为:名字伪指令指示符操作数;注释其中伪指令指示符必不可少。{崔文韬}:伪指令语句的作用是什么?他与指令语句的主要区别是什么?{李聪聪答}:伪指令语句的作用:在汇编过程中完成某些特定的功能,如数据定义、分配存储区、指示程序结束等。主要区别:伪指令语句经汇编后不产生机器码,不能让CPU执行,其所指示的操作在程序汇编时完成,而指令语句汇编后有对应的机器码,其操作是在程序运行时完成。{崔文韬问}:下列指令完成什么功能:1.moval,not10001110B{胡玲答}:逻辑非运算将71h存到al中2.movcx,8GT00011000B{胡玲答}:8小于18h,结果为假,输出全零即cx=0000h3.movdl,27/5{胡玲答}:除法取商得5D=05h即dl=05h4.movbx,$-LIST{胡玲答}:将现行地址-LIST偏移量送到bx中储存{崔文韬问}:阅读下列程序段,说明每条指令执行后的结果是什么?x1db65h,78h,98hx2dw06ffh,5200hx3dd?go:moval,typex1movbl,typex2movcl,typex3movah,typegomovbh,sizex2movch,lengthx3{梁皓答}:AL=1,BL=2,CL=4,AH=0FFH,BH=4,CH=1{崔文韬问}:画出示意图,说明下列变量在内存中如何存放:a1db12h,34ha2db'Right.'a2db5678ha4db3dup(?){梁皓答}:{崔文韬问}:给出完成的汇编语言程序框架:{刘瑾答}:assumeds:data,ss:stack,cs:code,es:extra;声明数据段,堆栈段,代码段的入口地址datasegment;数据段dataendsextrasegment;附加段extraendsstacksegmentstack;堆栈段,增加stack字段,在代码段中无需进行ss:sp的绑定db64dup(0)stackendscodesegment;代码段start:movax,datamovds,axmovax,extramoves,ax;代码段中需要完成数据段扩展段与对应段寄存器的绑定codeendsendstart{崔文韬问}:从汇编语言程序返回dos有哪几种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ?最常用的是哪一种?{刘瑾答}:从汇编程序返回DOS有三种方法:(1)按程序框架设定的方法返回(请刘瑾同学增加内容,具体过程简要说明一下)。(2)执行4CH号DOS功能调用。(3)对于可执行的命令文件(.COM文件),用INT20H指令可以直接返回DOS。第二种最为常用。{崔文韬问}:DOS功能调用和BIOS中断调用各分那几个步骤?{刘瑾答}:1.DOS系统功能调用可分为以下几个步骤:(1)功能调用号送到AH寄存器中,AH=00—6CH。(2)入口参数送到指定的寄存器中,一种功能调用又包含多个子功能,有些调用不带参数。(3)执行INT21H指令。(4)得到出口参数,或将结果显示在CRT上。2.BIOS中断调用可分为以下几个步骤:(1)功能号送到AH中。(2)设置入口参数。(3)执行INTn指令。(4)分析出口参数及状态。{崔文韬问}:习题10,编写汇编程序,完成如下功能:参考p132页,例4.21和例4.231.从键盘输入字符串“Pleaseinputanumber:",存入buff开始的内存单元中。2.把内存中从buff单元开始存放的字符串显示在屏幕上。3.{刘玉年答}:datasegmentbuffdb50db?db50dup(?)dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetbuffmovah,0ahint21hmovbx,offsetbuffmovdx,[bx+1]movdh,0;movax,'$'addbx,dxmov[bx+2],axcallcrlfmovdx,offsetbuffadddx,2movah,09hint21hmovax,4c00hint21hcrlf:movdl,0dhmovah,02hint21hmovdl,0ahmovah,02hint21hretcodeendsendstart{崔文韬问}:习题11,编写程序实现,在显示器上显示全部 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 和扩展ASC码((00~FF)字符,参考p138页例4.33。{刘玉年答}:codesegmentassumecs:codestart:movcx,00ffha1:movbx,00ffhsubbx,cxmovdl,blmovah,2hint21hloopa1movax,4c00hint21hcodeendsendstart{崔文韬问}:习题12,编程实现,从键盘输入一个10进制数字0~9,查表求键入数字的七段代码,存入DL中,并在键入数字之前,显示提示信息“Pleaseinputanumber:"。参考P138页4.34。{刘玉年答}:datasegmenttabledb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90hlistdb'pleaseinputanumber:','$'dataends;共阳极codesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetlistmovah,9hint21hmovah,01hint21hmovbx,offsettablesubal,'0'andah,0addbx,axmovdl,[bx]movax,4c00hint21hcodeendsendstart{崔文韬问}:习题17,已知数A=9876,数B=6543,编程求两数之和。{杨本栋答}:datasegmenta0dw9876b0dw6543sumdw2dup(0);保存结果和进位dataendcodesegmentassumecs:code,ds:datamain:movax,datamovds,axmovax,a0addax,b0movsum,ax;保存结果到sum中jncstop;无进位跳转movsum[1],01h;有进位stop:movax,4c00hint21hcodeendendmain{崔文韬答}:源代码直接复制黏贴过来就可以了。你下面的代码有好几处明显错误:dataend,codeend。{崔文韬问}:习题13,某一个学生的英语成绩已经存放在BL中,如果低于60分,则显示F,如果高于或者等于85分,则显示G,否则显示P,试编写完整的汇编程序实现该功能。参考流程图图4.8。{杨本栋答}:源代码如下:datasegmentpassdb'P',0dh,0ah,'$'faildb'F',0dh,0ah,'$'gooddb'G',0dh,0ah,'$'dataendscodesegmentassumecs:code,ds:datamain:movbl,75cmpbl,60jbfail_getcmpbl,85jaegood_getmovax,segpassmovds,axmovdx,offsetpassjmpdisplayfail_get:movax,segfailmovds,axmovdx,offsetfailjmpdisplaygood_get:movax,seggoodmovds,axmovdx,offsetgooddisplay:movah,9int21hstop:movax,4c00hint21hcodeendsendmain已经进行过编译链接但在debug中遇到了问题:出现了Filenotfound的提示(见下图)。重新编译链接和建一个新文件都是这样。把代码拷进之前的一个文件中,重新编译链接再调试就没问题了,没想明白为什么?{崔文韬答}:是在虚拟机里进行的实验吧?我试验了一下,没有你说的现象?提示:debug之前先输入dir命令,查看当前文件夹下是否存在先前生成的可执行文件,例如displaygrades.exe。filenotfound说明当前目录下不存在该文件。上面程序有问题,我标记了一下。在检查一下。Dos文件系统中,文件名长度有显示,不能超过8个字符,你的文件名太长了,文件名长度小于等于8即可。{杨本栋答}:之前在AL中存的成绩,发上来之后发现要求是BL存成绩,改了一下没改全。那个问题还是没解决,dirdir命令显示有这个文件。我之前还是可以的,昨天晚上出现的问题,之前建立的没有问题,新建的都不行。{崔文韬问}:习题14,在table开始的内存字节单元中,存放了12个带符号数,试编写完整的汇编程序统计其中正数、负数和零的个数,分别存入plus,neg和zero单元中。参考例3.92。{刘玉年答}:datasegmenttabledb12h,78h,89h,13h,0f1h,00h,93h,32h,00h,0d3h,46h,0a1hplusdb?negedb?zerodb?dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovax,0movbx,0movcl,0chandch,00hmovsi,offsettablea0:moval,[si]cmpal,00hjea1testal,80hjza2incbhjmpa3a1:incbljmpa3a2:incahjmpa3a3:incsiloopa0mov[plus],ahmov[nege],bhmov[zero],blmovax,4c00hint21hcodeendsendstart{崔文韬问}:习题15,在内存buff开始的单元中,存有一串数据,58,75,36,42,89,试编写程序找出其中的最小值存入min单元,并将这个数显示在屏幕上。参考例4.38.。{杨本栋答}:stacksegmentstackdw64dup(?)stackendsdatasegmentbuffdb58,75,36,42,89mindb?;存最小值dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovcl,4;循环次数数字个数减1moval,buff;movbx,1loop1:cmpal,buff[bx];buff[bx]比当前最小值大?jlnext;是,转nextmoval,buff[bx];当前值为最小值next:incbxdeccljnzloop1movmin,al;最小值存入mindis_dec:;以十进制形式显示最小值movah,0movbl,10divbl;商存almovbl,ah;余数存bladdal,30h;商转换为ASCIImovdl,al;显示商,即十位数movah,2int21haddbl,30h;余数转换为ASCIImovdl,bl;显示余数,即个位数movah,2int21hmovax,4c00hint21hcodeendsendstart{崔文韬问}:习题16,内存中有一组无符号字节数据,要求编程按从小到大的顺序排列。参考例4.40。{崔文韬问}:习题18,某班有20个同学的微机原理成绩存放在list开始的单元中,要求编程先按从高到低的次序排列好,在求出总分和平均值,分别存放到sum和aver开始的单元中。{崔文韬问}:习题19,编程将后跟$符的字符串“Gotoschool.”中的小写字母都改成大写字母。提示:小写字母比大写字母的asc码大20h,如‘A’=41h,‘a’=61h。{杨本栋答}:stacksegmentstackdw64dup(?)stackendsdatasegmentbuffdb'GotoSchool'countequ$-buffdataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovcl,count;字符串长度movbx,0;基地址为0loop1:moval,buff[bx]cmpal,61h;<61hjlnext;不是小写字母cmpal,7ah;>7ah?jgnext;不是小写字母subal,20h;是小写字母,改为大写movbuff[bx],al;存入原位置next:incbx;基址加1deccl;字符长度减一jnzloop1movax,4c00hint21hcodeendsendstart{崔文韬问}:习题20,编程将存放在al中的无符号二进制数,转换为16进制数,再转换为asc码并显示在屏幕上。参考例4.43。{崔文韬问}:习题21,将bx中的16进制数(<9999)转换成4位压缩BCD数,存入cx中。参考例4.44。{陈志坤问}:老师,虚拟机正确编译链接完,运行后出现这一堆乱码乱码怎么回事?把你源代码贴上来我看看。ppt上的例子,能正常通过编译链接,代码应该没有问题,可能是虚拟机的原因?不是用dosbox——你的源代码有问题,自己好好看看,是不是漏了一行???编程是个细致活^_^。加油!!!分析一下,按照你上面写的源代码,程序打印的内容是否正确或者执行过程是怎样的?如何通过debug验证一下??我在虚拟机里实验了,没有问题。噢噢,好的我再看看。谢谢老师{陈志坤答:}示例验证:之前虚拟机乱码应该是我自己代码有问题。。。你上面贴的代码里少了一行,取字符串的偏移量movdx,offsetd1。{刘玉年问}:在定义堆栈段时:stacksegmentstack……后面这个组合类型stack,到底能不能省略呢?课本上一直在强调不能省略,但是没说为什么。而课件是又说可以省略,只是影响ss段寄存器值得装入。{崔文韬答}:可以省略。按照课本要求,不省略stack字段,代码更简洁,使用堆栈更方便,编译连接后也不会出现warning:nostacksegment。警告。实验代码如下:;加入stack字段,不需要需要在代码段中完成堆栈的初始化,即绑定ss:spassumecs:code,ss:stackstacksegmentstackdb16dup(255);为了清除地观察堆栈段位置,初始化为255.stackendscodesegmentstart:movax,12movbx,13movcx,14pushaxpushbxpushcxmovax,4c00hint21hcodeendsendstart编译连接后,debug该程序,使用dds:0120查看整个内存中程序的存在形式。截图如下:程序加载到内存后,ss:sp自动绑定到设定好的堆栈段中。如果不加stack字段,则需要在代码段中完成ss和sp的绑定,同时编译连接时会出现warning:nostacksegment警告信息。实验代码如下:;省略stack字段,需要在代码段中完成堆栈的初始化,即绑定ss:spassumecs:code,ss:stackstacksegmentdb16dup(255);给清楚看到堆栈位置,初始化为255stackendscodesegmentstart:movax,stack;完成ss和sp的绑定,如果没有这三行代码,将无法正确使用push和pop指令movss,axmovsp,16movax,12movbx,13movcx,14pushaxpushbxpushcxmovax,4c00hint21hcodeendsendstart编译连接程序后,会出现警告信息。实验截图如下:出现warning警告。使用debug加载调试程序,截图如下:程序加载后,ss:sp为076B:0000,并没有指向我们开辟的堆栈段中。使用t命令执行,代码段中的三条堆栈设置指令后,实验截图如下:经过三条指令完成对ss和sp的设置后,现在ss和sp指向了076c和0010h,是我们在系统中开辟的堆栈区域。{王浩问}:LOOPA0;MOV[DI],BL其中A0为某一代码段,DI为数据的指针,后面的MOV语句是循环的结束标志吗?是的话为什么能起到中断作用?谢谢老师o(^o^)o{崔文韬答}:mov指令不是循环结束标志,loop循环操作结束是受cx的数值控制的。循环结束与中断没有关系。我觉得你应该是有其他问题。你可以把你的问题完整的叙述以下。第五章存储器{崔文韬问}:课后习题15,在一个有20位地址线的系统中,采用2KX4的SRAM芯片构成容量为8KB的8位存储器,要求采用全译码方式,请画出该存储器系统的示意图,并回答:共需要(8)块RAM芯片,必须将地址(A0)~(A10)连接到每个存储器芯片上,并用地址线(A11)~(A19)作为地址译码器的输入,需要译码器产生(4)个片选信号。(参考图5.19和图5.21){郑颖改}:{崔文韬问}:74LS138译码器还有输入D引脚??
本文档为【微型计算机原理与接口技术(第5版)课后答案及问题墙】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
天山书童
暂无简介~
格式:pdf
大小:3MB
软件:PDF阅读器
页数:0
分类:高中语文
上传时间:2019-11-24
浏览量:1