微型计算机原理与接口技术(第5版)课后习题答案及问题墙_第1页
微型计算机原理与接口技术(第5版)课后习题答案及问题墙_第2页
微型计算机原理与接口技术(第5版)课后习题答案及问题墙_第3页
微型计算机原理与接口技术(第5版)课后习题答案及问题墙_第4页
微型计算机原理与接口技术(第5版)课后习题答案及问题墙_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微型计算机原理与接口技术(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),高级语言的定义{沙猛答}:机器码:计算机只认得二进制数码,计算机中的所有指令都必须用二进制表示,这种用二进制表示的指令称为机器码。汇编语言:用助记符来代替二进制的机器码的符号语言高级语言:相对于机器语言,接近人们使用习惯的程序设计语言。{崔文韬问}:课后习题第10题{崔文韬答}:参考课本16页图1.4{崔文韬问}:课后习题第11题{崔文韬答}:参考课本11页图1.2{杨艺答}:微处理器、存储器、I/O接口,I/O设备和总线。6{崔文韬问}:课后习题第12题{崔文韬答}:ALU:ArithmeticLogicUnit,CPU:CentralProcessingUnit,PC:PersonalComputer,DOS:DiskOperationSystem{崔文韬问}:8086和80386各有多少根地址线,可直接寻址的内存空间是多少,他们的数据线各有多少根?{}:808620根地址线A19~A02^2016322^3232{崔文韬问}:什么是二进制编码,常用的二进制编码有哪两种?{杨艺答}:采用若干特定的二进制码的组合来表示各种数字、英文字母、运算符号等的编码方式叫做二进制编码,常见的二进制编码有BCD码和ASCII码两种。{崔文韬问}:解释位,字节,字,字长的含义?{沙猛答}:位bit01字节byte:81Byte=8Bits。字word16字长wordlength:决定计算机内部一次可以处理的二进制代码位数。{刘玉年问}:存在计算机中的数都是以有符号数存储的,还是以无符号数存储的呢?{崔文韬答}:刘玉年同学,你能先自己尝试回答一下这个问题,或者说你自己的理解是什么?{刘玉年答}:应该是两者都不是吧,因为在运算的时候仅仅就是二进制数的运算,而判断结果的意义(是什么样的数)是通过标志为判断的。{}第二章8086CPU{崔文韬问}:8086/8088可直接寻址多少内存(字节)单元?多少IO端口?外部数据线各有多少?{}:8086/80881MB64K个I/O8086有16根,80888根。{崔文韬问}: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内部包含哪些寄存器?各有什么用途?{俞楠答}:16SP,BP,SI,DIBX(数据寄存器和地址指针和变址寄存器则被称为通用寄存器。)(段基地址和段内偏移地址Offset组合起来就可形成20位物理地址)5.标志寄存器:6个状态标志CF,PF,AF,ZF,SF,OF用来表示指令执行后的结果或状态特征,根据这些特征,由转移指令控制程序的走向。3个控制标志,TF,IF,DF,可以根据需要用程序设置或清除。{}10110100B11000111B{崔文韬答}:二进制数所有位都参与运算10110100+11000111101111011OFSFZFAFPFCF1 0 00 1 1程序员将该数看做有符号数,因此SF,OF,ZF,PF有意义。如果将该数看做无符号数,计算过程一样,标志位结果相同,CF,ZF,PF有意义。利用debug程序验证结果:运行dosbox,输入debug,r命令查看初始寄存器数值,a命令输入汇编指令,t命令执行查看结果,过程如下图所示:debug中,flags中的NV,UP等表示什么含义,请查看百度网盘中共享的debug教程,下图为该教程中的截图:{崔文韬问}:课后习题第七题,段地址:偏移地址与物理地址的关系(原理在书中31-32页){俞楠答}:20位的物理地址=段基地址*16+16位的偏移量1200H*16+3500H=15500H(1200H*161200H12000H)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 283A2001H5628。{罗小东补充}:如下表,如果从2000H取出一个字数据,则执行一次操作直接取出一个字283AH2001H——2000H28H3AH2002H4F56H56H,然2001H——5628H。原理就是:8086CPU对存储器进行存取操作时,都是从偶地址体开始的。20003A20012820025620034F{罗东问}:个含有16个节数的变,它逻辑址为1000:0100H,么该量的后一字节数的物地址是 可不以答再加简单析呀){崔文韬问}:设定SS:SP后形成的堆栈占据一定的物理地址范围,是否可无限次执行PUSH或者POP指令?为什么?{}push8086CPU{}:8086201M8086{崔文韬答}:8086的内存寻址空间真的只有1M,这1M空间分配给内存使用(包含显存,主内存,BIOS的ROM)808664k的IOIO还有啊,如果真的是内存空间的大小m和地址总线的数目n是:m=2^n的关系的话,那么现在的片子运存是4g的话,那要32根地址总线的,相应的地址输入输出端口也要有32个,这是不是又有些浪费?{崔文韬答}:内存空间大小和地址数目的关系就是如此。32根地址线对应4g内存,这个是必须的,不存在浪费问题。第三章8086寻址方式和指令系统{崔文韬问}:习题1中题目,分别说明源操作数和目的操作数各采用的寻址方式movax,2408hmovcl,0ffhmovbx,[si]mov5[bx],bl{沙猛答}:1.立即数,寄存器2.立即数,寄存器3.寄存器间接,寄存器4.寄存器,寄存相对{崔文韬问}:习题1中题目,分别说明源操作数和目的操作数各采用的寻址方式mov[bp+100],axmov[bx+di],'$'movdx,es:[bx+si]movval[bp+di],dx{俞楠答}:1.寄存器寻址,寄存器相对寻址2.立即数寻址,基址变址寻址3.基址变址寻址,寄存器寻址4.寄存器寻址,相对基址变址寻址。{崔文韬问}:习题1中题目,分别说明源操作数和目的操作数各采用的寻址方式inal,05movds,ax{姚胜答}1.寄存器,立即数。2.寄存器,寄存器{}2DS=1000h,bx=0200h,si=02h10200h~10205hax1.movax,0200h2.movax,[200]{沙猛答}:1.为0200h2.为2a10h{}2DS=1000h,bx=0200h,si=02h10200h~10205haxmovax,bxmovax,3[bx]{于刚答}:执行指令1后,ax为10h;执行2后,ax为46h{俞楠改}:1.0200H2.5946H{}2DS=1000h,bx=0200h,si=02h10200h~10205haxmovax,[bx+si]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,下列源操作数字段的寻址方式是什么?物理地址是多少?movax,[100h]movax,valmovax,[bx]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,下列源操作数字段的寻址方式是什么?物理地址是多少?movax,[si]movax,[bx+10h]movax,[bp]movax,val[bp+si]{}:1.100A0H2.10110H3.35200H4.{崔文韬问}:习题3中题目,设ds=100h,es=200h,ss=3500h,si=00a0h,di=0024h,bx=0100h,bp=0200h,数据段中变量名为val的偏移地址为0030h,下列源操作数字段的寻址方式是什么?物理地址是多少?movax,val[bx+di]movax,[bp+di]{俞楠答}:1.相对基址变址寻址10154H2.基址变址寻址35224H{}4debug88c8movdx,cx机器码在内存中从低到高存放为:89camovwordptr[bx+100h],3150h机器码在内存中从低到高存放为:c78700015031通过debug中的a命令输入以上指令,通过d命令查看对应的二进制机器码,过程及结果如下:{崔文韬问}:习题6,指出指令错误movdl,axmov8650h,axmovds,0200h4.mov[bx],[1200]movip,0ffhmov[bx+si+3],ipmovax,[bx+bp]{刘玉年答}:1.数据长度不一致2.立即数不能做目的操作数3.立即数不能向段寄存器传送数据5.IP6.IP7.bx和bp[]中。{崔文韬问}:习题6,指出指令错误moval,es:[bp]movdl,[si+di]movax,offset0a20hmoval,offsettablexchgal,50inbl,05houtal,offeh{}:1.2.si和di[]3.offset4.符号table165.xchg6.ax或al7.0ffeh大于ff,应用dx表示{崔文韬问}:习题5,已知程序的数据段为:datasegmentadb'$',10hdb'COMPUTER'dwddb5dup(?)edd1200459ahdataends请画出上述数据变量在内存中的数据的位置示意图,假设数据段段地址为X。参考课本P122页,图4.2。{俞楠答}:{崔文韬答}:程序参考实验代码如下,请同学们编译后使用debug调试执行,观察结果,验证答案。assumecs:code,ds:datadatasegmentadb'$',10hbdb'COMPUTER'c1dw1234h,0ffhc及Cddb5dup(?)edddataendscodesegmentmain:movax,datamovds,axdsmoval,a;al=24hmovdx,c1xchgdl,a;dl=24h,变量a34h,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=0000hds1200h,而e,所以执行les1200:0013hdi,es,0000h。(不知道是不是这样)。观察很仔细,基本原因就是这样的!赞一个!。你之前的代码执行也没有问题。按照我后面给你的提示,再尝试一下,就知道以前你的程序也没问题了。{}lesdi,e这条指令后,使用debug的d1200:00134个字节的内容,看看是否一致?或者从debuglesdi,ee1200: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,下列指令完成什么功能addal,dhadcbx,cxsubax,2710hdecbx{}:1.al与dh相加存到al中;2.bx与cx与cf当前值相加存到bx中;{胡玲答}:3.减法指令将ax寄存器的内容减去2710h再存在ax中4.减量指令,将bx寄存器的内容减一再存在bx中{崔文韬问}:习题9,下列指令完成什么功能negcxincblmulbxdivcl{}:1.对cxcx;2.bl1bl;3.bx*ax32高位字放在dx,低位字放在ax4.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=0notax}:ax中存的数是DAF7h,无进位cf=0xorcx,0fff0h}:0004h和fff0h异或得fff4h,cf=0{崔文韬问}:习题10,已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每条指令执行后的结果是什么?标志位cf等于什么?1.testdh,0fh{}:查dh的D31cf=02.cmpcx,00h}:0004h-00h=0004h即cx=0004hcf=0shrdx,cl}:1864h4h得dx0186h,cf=0saral,1}:算数右移得ax2504hcf=0{崔文韬问}:习题10,已知ax=2508h,bx=0f36h,cx=0004h,dx=1864h,求下列每条指令执行后的结果是什么?标志位cf等于什么?1.shlbh,cl}:36h04h得bx=f036h,cf=0,指令中写成bx=0f036h2.salax,1}:2508h0100101000010000B=4A10h即ax=4A10h,cf=03.rclbx,1{胡玲答}:0000111100110110B通过进位循环左移1位得0001111001101100B=1E6Chcf=04.rordx,cl}:1864h4h位可得dx=4186h,cf=0且cf{崔文韬答}:有两处错误,请胡玲同学改正。(已改正){崔文韬问}:习题11,假设数据段定义如下:datasegmentstringdb'ThePersonalComputer&TV'dataends试用字符串操作等指令完成以下功能:参考字符串处理指令例子:把该字符串传送到附加段中偏移量为GET_CHAR{}notepad++ml件,通过debugassumecs:code,ds:data,es:extradatasegment;string'$'dataendsextrasegmentget_chardb32extraendscodesegmentstart:movax,datamovds,ax数据段与dsmovax,extramoves,ax附加段与esleasi,string;源串偏移地址设定movsi,offsetstringleadi,get_charmovdi,offsetget_charmovcx,offsetstr_end-stringcldrepmovsbmovint21hcodeendsendstart{}11,segmentstringdb'ThePersonalComputer&TV'dataendsCMPS,(2):“TheComputer”al1次数送到BL{崔文韬问}:习题11,假设数据段定义如下:datasegmentstringdb'ThePersonalComputer&TV'dataends试用字符串操作等指令完成以下功能:参考字符串处理指令SCAS例子,编写参考程序,调试并验证(3):检查该字符串中是否有“&”符,如果有则用空格将其替换。{}12题,编程将AXDXAX{崔文韬答}:参考程序;习题P111页习题12参考程序assumecs:codecodesegmentstart:movax,1234h;0001001000110100Bmovdx,0;程序执行完成后dx=0010110001001000B=2c48hmovcx,16srolax,11位,将最高位移入cf中rcrdx,1;通过CF1位loops;通过循环,将cx倒序移入dx中。movax,4c00hint21hcodeendsendstart{崔文韬问}:请同学根据上述程序,修改代码,使程序在完成倒序传入的基础上,还能统计DX寄存器中1的个数是多少?1的个数可以存在某个通用寄存器中。{}141AX,BX,CX,DXdebug{崔文韬答}:因为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;loopnextmovint21hcodeendsendstart利用debug加载编译好的程序,利用r命令查看寄存器初始值,例如u命令查看反汇编结果,确定程序退出返回dos的地址,利用g命令,连续执行程序,并查看最终寄存器中的内容。过程如下:{}142AX,BX,CX,DXdebug(案)。start:movax,01hmovbx,02hmovdx,03hmovcx,04hnext:incaddbx,axshrdx,1loopenext{}143AX,BX,CX,DXdebug)。start:movax,01hmovbx,02hmovdx,03hmovcx,04hnext:incaxaddbx,axshrdx,1loopnenext{崔文韬问}:习题15,7名同学英语成绩低于80分,分数存在array数组中,试编写程序给每名同学成绩加5分,结果保存到new数组中。(参考P193页例3.93){崔文韬答}:参考程序如下,请同学们编译链接后,利用debug调试,验证程序功能。;习题P11215segmentarraydb66,67,68,76,77,78,79;原始成绩newdb7dup(0);修改后成绩dataendscodesegmentstart:movax,data;数据段绑定到dsmovds,axmovbx,0;cx,7add5:moval,array[bx]addal,5movnew[bx],alincbxloopadd5movint21hcodeendsendstart123{}16INTn中n的含义是什么?取值范围是多少?当n=0~4INTO{胡玲答}:n是中断类型码,是八位二进制数,取值范围是0-255=0-FFh,软件中断指令也叫陷进中断。INT0定义除法错中断,INT1定义单步中断,INT2定义不可屏蔽中断,INT3定义断电中断,INT4定义溢出中断在带符号数进行加减法运算之后必须安排一条INTO指令{}17,那些指令可以使CF,DF和IF1?{刘瑾答}:执行STC指令可以使CF(进位标志)置1;执行CLC指令可以使CF清零。执行CLD指令可以使DF(方向标志)清零;执行STD指令可以使DF置1。执行STI指令可以使IF(中断标志)置1;执行CLI指令可以使IF清零。第四章汇编语言程序设计{崔文韬问}:习题1,简述从汇编语言源程序到生成可执行文件*.exe,需要经过哪些步骤?{}:编辑程序生成源程序后,经汇编程序MASM.OBJ序LINK{崔文韬问}:伪指令和指令语句各由那几个字段组成?那些字段是必不可少的?{李聪聪答}:指令语句由4部分组成,格式为:标号:指令助记符操作数;注释其中指令助记符必不可少。伪指令语句由4部分组成,格式为:名字伪指令指示符操作数;注释其中伪指令指示符必不可少。{崔文韬}:伪指令语句的作用是什么?他与指令语句的主要区别是什么?{李聪聪答}:伪指令语句的作用:在汇编过程中完成某些特定的功能,如数据定义、分配存储区、指示程序结束等。主要区别:伪指令语句经汇编后不产生机器码,不能让CPU执行,其所指示的操作在程序汇编时完成,而指令语句汇编后有对应的机器码,其操作是在程序运行时完成。{崔文韬问}:下列指令完成什么功能:moval,not10001110B}:71h存到al中movcx,8GT00011000B}:818hcx=0000hmovdl,27/55D=05h即dl=05hmovbx,$-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,增加stackss:spdb64dup(0)stackendscodesegment;代码段start:movax,datamovds,axmovmoves,ax;代码段中需要完成数据段扩展段与对应段寄存器的绑定codeendsendstart{崔文韬问}:从汇编语言程序返回dos有哪几种方法?最常用的是哪一种?{}DOS:(1)。(2)4CH号DOS(3)(.COM文件),用INT20H指令可以直接返回DOS{崔文韬问}:DOS功能调用和BIOS中断调用各分那几个步骤?{}:1.DOS:(1)功能调用号送到AHAH=00—(3)执行INT21H(4)CRT上。BIOS(1)功能号送到AH(2)(3)执行INTn指(4){崔文韬问}:习题10,编写汇编程序,完成如下功能:参考p132页,例4.21和例4.23“Pleaseinputanumber:",存入buff把内存中从buff{}:databuffdb50db?db50dup(?)dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetbuffmovah,0ahint21hmovbx,offsetbuffmovdx,[bx+1]movdh,0;movax,'$'addbx,dxmovcallcrlfmovdx,offsetbuffadddx,2movint21hmovint21hcrlf:movdl,0dhmovah,02hint21hmovmovint21hretcodeendsendstart{崔文韬问}:习题11,编写程序实现,在显示器上显示全部标准和扩展ASC码((00~FF)字符,参考p138页例4.33。{刘玉年答}:codesegmentassumecs:codestart:mova1:movbx,00ffhsubbx,cxmovdl,blmovah,2hint21hloopa1movax,4c00hint21hcodeendsendstart{}12100~9“Pleaseinputanumber:"。参考P1384.34。{刘玉年答}:datasegmenttabledb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90hlistdb'pleaseinputanumber:','$'dataends;共阳极codesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetmovah,9hint21hmovint21hmovbx,offsettablesubal,'0'andah,0addbx,axmovdl,[bx]movint21hcodeendsendstart{崔文韬问}:习题17,已知数A=9876,数B=6543,编程求两数之和。{}:dataa0dw9876b0dw6543sumdw2dup(0);保存结果和进位dataendcodeassumecs: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,85jaemovax,segmovds,axmovdx,offsetjmpdisplayfail_get:movax,segmovds,axmovdx,offsetfailjmpdisplaygood_get:movax,segmovds,axmovdx,offsetgooddisplay:movah,9int21hstop:movint21hcodeendsendmaindebug中遇到了问题:出现了Filenotfound({}debug之前先输入dirdisplaygrades.exefilenotfound上面程序有问题,我标记了一下。在检查一下。Dos88即可。{杨本栋答}:之前在AL中存的成绩,发上来之后发现要求是BL存成绩,改了一下没改全。那个问题还是没解决,dirdir命令显示有这个文件。我之前还是可以的,昨天晚上出现的问题,之前建立的没有问题,新建的都不行。{}14,在table12plus,neg和zero3.92。{刘玉年答}:datasegmenttabledb12h,78h,89h,13h,0f1h,00h,93h,32h,00h,0d3h,46h,0a1hplusdb?negedb?zerodb?dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovax,0movbx,0movandmovsi,offseta0:moval,[si]cmpal,00hjea1testjza2incbhjmpa3a1:incjmpa3a2:incjmpa3a3:incloopa0movmovmovmovax,4c00hint21hcodeendsendstart{崔文韬问}:习题15,在内存buff开始的单元中,存有一串数据,58,75,36,42,89,试编写程序找出其中的最小值存入min单元,并将这个数显示在屏幕上。参考例4.38.。{杨本栋答}:stacksegmentdw64dup(?)stackendsdatabuffdb58,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:incbxdeccljnzmovmin,al;最小值存入mindis_dec:;以十进制形式显示最小值movah,0movbl,10divbl;商存almovbl,ah;余数存bladdal,30h;商转换为ASCIImovdl,al;显示商,即十位数movah,2int21haddbl,30h;余数转换为ASCIImovdl,bl;显示余数,即个位数movah,2int21hmovint21hcodeendsendstart{崔文韬问}:习题16,内存中有一组无符号字节数据,要求编程按从小到大的顺序排列。参考例4.40。{}1820listsum和aver{崔文韬问}:习题19,编程将后跟$符的字符串“Gotoschool.”中的小写字母都改成大写字母。提示:小写字母比大写字母的asc码大20h,如‘A’=41h,‘a’=61h。{杨本栋答}:stacksegmentdw64dup(?)stackendsdatabuffdb'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,编程将存放在al16asc4.43。{崔文韬问}:习题21,将bx中的16进制数(<9999)转换成4位压缩BCD数,存入cx中。参考例4.44。{陈志坤问}:老师,虚拟机正确编译链接完,运行后出现这一堆乱码乱码怎么回事?把你源代码贴上来我看看。ppt上的例子,能正常通过编译链接,代码应该没有问题,可能是虚拟机的原因?不是用dosbox——^_^debug噢噢,好的我再看看。谢谢老师{陈志坤答:}示例验证:之前虚拟机乱码应该是我自己代码有问题。。。你上面贴的代码里少了一行,取字符串的偏移量movdx,offsetd1。{刘玉年问}:在定义堆栈段时:stacksegmentstack……后面这个组合类型stack,到底能不能省略呢?课本上一直在强调不能省略,但是没说为什么。而课件是又说可以省略,只是影响ss段寄存器值得装入。{崔文韬答}:可以省略。按照课本要求,不省略stack字段,代码更简洁,使用堆栈更方便,编译连接后也不会出现warning:nostacksegment。警告。实验代码如下:;加入stackss:spassumecs:code,ss:stackstacksegmentstackdb16dup(255);为了清除地观察堆栈段位置,初始化为255.stackendscodesegmentstart:movax,12movbx,13movcx,14pushaxpushbxpushcxmovint21hcodeendsendstart编译连接后,debug该程序,使用dds:0120查看整个内存中程序的存在形式。截图如下:程序加载到内存后,ss:sp自动绑定到设定好的堆栈段中。如果不加stack字段,则需要在代码段中完成ss和spwarning:nostacksegment;省略stackss:spassumecs:code,ss:stackstacksegmentdb16dup(255);给清楚看到堆栈位置,初始化为255stackendscodesegmentstart:movax,stack;完成ss和sppush和pop指令movss,axmovsp,16movax,12movbx,13movcx,14pushaxpushbxpushcxmovint21hcodeendsendstart编译连接程序后,会出现警告信息。实验截图如下:出现warning警告。使用debug加载调试程序,截图如下:程序加载后,ss:sp为076B:0000,并没有指向我们开辟的堆栈段中。使用t命令执行,代码段中的三条堆栈设置指令后,实验截图如下:ss和sp的设置后,现在ss和sp076c0010h{王浩问}:LOOPA0;MOV[DI],BL其中A0为某一代码段,DI为数据的指针,后面的MOV语句是循环的结束标志吗?是的话为什么能起到中断作用?谢谢老师o(^o^)o{崔文韬答}:mov指令不是循环结束标志,loop循环操作结束是受cx的数值控制的。循环结束与中断没有关系。我觉得你应该是有其他问题。你可以把你的问题完整的叙述以下。第五章存储器{}15202KX4的SRAM8KB的8(8)块RAM(A0)~(A10)(A11)~(A19)(4)5.195.21){郑颖改}:{崔文韬问}:74LS138译码器还有输入D引脚???{}:2K211SRAM地址线为A0~A10,A11~A19{}165.228KX86264EPROM74LS138,参与译码的地址线仍是A0~A17{郑颖改}:{崔文韬答}:请重新做这题,仔细看清题目要求,参与地址译码的是A17~A0{李万里答}:{}172KX8的RAM8KX85.3。{郑颖答}:{}188KX8的RAM32KX874LS138作为译码器,系统中只用到了地址总线A18~A05.7.{郑颖答}:{崔文韬答}:请重新做一下这题,好像不正确呀???{郑颖改}:第六章IO接口和并行接口芯片8255A{崔文韬问}:课后习题第2题{刘一萱答}:(1)在接口电路中,CPU与外设传送的信息(包括数据信息,状态信息和控制信息)分别进入不同的寄存器,这些寄存器和它们的控制逻辑统称为I/O端口。存储器映象寻址方式和I/O(4)8086/8088CPU常用I/O指令寻址方式。{崔文韬问}:课后习题第3题{刘一萱答}:CPU与外设间的数据传送方式主要有三种:程序控制方式,中断方式,DMA方式。{崔文韬问}:课后习题第6题{郑颖改}:{崔文韬答}:A8A9后接的逻辑电路正确吗?其输出在A9A8=11时能是1?{崔文韬问}:课后习题第8题{刘一萱答}:8255A具有三种基本的工作方式方式0:基本输入输出方式,适用场合:不需要用应答信号的简单输入输出场合。方式1:选通输入/输出方式,适用场合:A,B口作为数据口,均可工作于输入或输出方式。方式2:双向选通传送方式,适用场合:在主机和软盘驱动器交换数据时可采用。A口可工作于:方式0,方式1,方式2。B口可工作于:方式0,方式1.C口可工作于:方式0.{崔文韬问}:课后习题第9题{}D7D71/复位控制字的D7位0。{崔文韬问}:课后习题第10题{何林松答}:A口地址为0F8H,B口地址为0FAH,C口地址为0FCH,控制字寄存器端口地址为0FEH。当A7A6A5111,A4A3A0110时,(Y6非)=08255A{崔文韬问}:课后习题第11题{张多睿答}:MOVDX,86HMOVAL,10001010BOUTDX,AL{崔文韬问}:课后习题第12题{}:MOVAL,00001001BOUT86H,AL置PC4AL,00001010BOUT86H,AL置PC5AL,00001101BOUT86H,AL置PC6AL,00001100BOUT86H,AL置PC6{}15题{于刚答}:MOVAL,90HOUT83H,AL;A0B0INAL,80H读A口NEGAL;取反,使合上开关led亮OUT81H,AL;输出到B口MOVCX,16EAHDELAY_20S:LOOPDELAY_20SJMPTEST_LE{崔文韬问}:课后习题第16题{李万里答}:DATASEGMENTTABLEDB3fH,06H,5bH,4fH,66H,6dH,7dH,07HDB7fH,6fH,77H,7cH,39H,5eH,79H,71HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMOVEAL,90HOUT63H,ALIN_PORTA:INAL,60HANDAL,0FHMOVBF,OFFSETTABLEXLATOUT61H,ALCALLDELAYJMPIN_PORTADELAY:MOVAH,4CHINT21HCODE:ENDSENDSTART第七章可编程计数器定时器及应用{崔文韬问}:课后习题第一题{梁皓答}:一-8253具有3个独立的16位计数器通道,每个计数通道均可以工作于6种工作方式{崔文韬问}:课后习题第三题{梁皓答}:(1)写入控制字(2)写入计数初值{崔文韬问}:课后习题第四题{王金鑫答}:将图7-9中的74LS138中的Y4改为Y0即可。;0MOVAL,00110111B3,BCD2000OUT306H,ALMOVAL,00HOUTMOVAL,20HOUT;1MOVAL,01110100B220000MOV306H,ALMOVAL,20HOUTMOVAL,4EHOUT;2MOVAL,101100111,BCD800OUT306H,ALMOVAL,00HOUTMOVAL,08HOUT{崔文韬问}:课后习题第五题{王金鑫问}:如何分频?{王金鑫答}:假设时钟五分频时钟信号频率为1MHz。;通道0初始化MOVAL,00110111B3,BCD1000OUT43H,ALMOVAL,00HOUT40H,ALkMOVOUT40H,AL;通道1初始化MOVAL,01110111B3,BCD8000MOV43

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论