微机原理、汇编语言与接口技术-第四章-习题答案-人民邮电出版社-(周杰英-张萍-郭雪梅-著).doc_第1页
微机原理、汇编语言与接口技术-第四章-习题答案-人民邮电出版社-(周杰英-张萍-郭雪梅-著).doc_第2页
微机原理、汇编语言与接口技术-第四章-习题答案-人民邮电出版社-(周杰英-张萍-郭雪梅-著).doc_第3页
微机原理、汇编语言与接口技术-第四章-习题答案-人民邮电出版社-(周杰英-张萍-郭雪梅-著).doc_第4页
微机原理、汇编语言与接口技术-第四章-习题答案-人民邮电出版社-(周杰英-张萍-郭雪梅-著).doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

第4章 汇编语言程序设计习题与参考答案1、指出以下数据定义伪指令所分配的字节数(8086系统)。(1)DATA1DB10,?,A(2)DATA2DW10 DUP(2,3 DUP(?),1)(3)DATA3DBHELLO,WORLD!,$(4)DATA4DWDATA4解:(1)3字节;(2)100字节;(3)13字节;(4)2字节。2、指出以下数据定义伪指令所分配的字节数(80386系统)。(1)DATA1DF12,34,56(2)DATA2DFDATA2(3)DATA3DQ0,10 DUP(?)(4)DATA4DT0,1,2解:(1)18字节;(3)6字节;(3)88字节;(4)30字节。3、指出以下指令中哪些是无效的,并说明原因。(1)ADDRDB$(2)DATADBF0H,12H(3)1_DATADW1234H(4)VARDWVAR1;VAR1为一个字节变量(5)MOVAX,10-VAR1;VAR1为一个字变量(6)MOVBX,VAR2*2+1;VAR2为一个字变量解:(1)非法,地址计数器$是32位数;(2)非法,以字母开头的16进制数应在前面加“0”,即应为“0F0H”;(3)非法,变量名非法,不能以数字开头;(4)合法;(5)非法,地址表达式不能是“常数-地址”;(6)非法,地址表达式不能出现乘法。4、假设已定义数据段如下:DATASEGMENTORG100HDATA1DB10 DUP(1,2,3)DATA2DWDATA1,$DATAENDS且段寄存器DS已初始化为该数据段的段基址(假设段基址为1234H)。请指出以下指令执行后,相应的寄存器中的内容。(1)MOVAX,WORD PTR DATA1;(AX)=?(2)MOVBX,DATA2;(BX)=?(3)MOVCX,DATA2+2;(CX)=?(4)MOVDX,OFFSETDATA2;(DX)=?(5)MOVSI,SEGDATA1;(SI)=?(6)MOVDI,LENGTHDATA1;(DI)=?(7)MOVSP,TYPE DATA1;(SP)=?(8)MOVBP,SIZE DATA2;(BP)=?解:(注意是16进制,算的时候要转换)(1)(AX)=0201H;(2)(BX)=0100H;(3)(CX)=0120H;(4)(DX)=011EH;(5)(SI)=1234H;(6)(DI)=000AH;(7)(SP)=0001H;(8)(BP)=0002H。5、在8086系统下,编写完整程序,实现从键盘上输入8位二进制数,从显示器上显示相应的16进制数,例如从键盘上输入“00010010”,应在显示器上显示“12H”。解:参考程序:DATASEGMENTMSG1DBInput binary number(ESC to exit):,$MSG2DB0AH,0DH,Input error!,0AH,0DH,$DATAENDSOUTPUTMACROASC;定义输出一个字符的宏MOVDL, ASCMOVAH, 2INT21HENDMCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXAGAIN:LEADX, MSG1MOVAH, 9INT21H;提示输入信息MOVCX, 8;输入8位二进制数MOVBL, 0L:MOVAH, 1INT21HSHLBL, 1CMPAL, 1BH;ESC键退出JZDONECMPAL, 0;输入“0”JZNEXTCMPAL, 1;输入“1”JNZERROR;输入其他则出错INCBLNEXT:LOOPLOUTPUT0AHOUTPUT0DHPUSHBXMOVCL, 4SHRBL, CLCALLTRAN;显示高4位对应的16进制数POPBXANDBL, 0FHCALLTRAN;显示低4位对应的16进制数OUTPUTHOUTPUT0AHOUTPUT0DHJMPAGAINERROR:LEADX, MSG2MOVAH, 9INT21HJMPAGAINDONE:RETMAINENDPTRANPROCFARCMPBL, 0AHJBBELOWADDBL, 7BELOW:ADDBL, 30HOUTPUTBLRETTRANENDPCODEENDSENDMAIN6、在8086系统下,编写完整程序,实现从键盘上输入两个4位十进制数,从显示器上显示这两个数之和,例如输入“1234”、“5678”,应在显示器上显示“6912”。解:参考程序:DATASEGMENTMSG1DB Input the first number(ESC to exit):,$MSG2DB Input the second number(ESC to exit):,$MSG3DB0AH,0DH,Input error!Input again:,$DATAENDSOUTPUTMACROASC;定义输出一个字符的宏MOVDL, ASCMOVAH, 2INT21HENDMCODESEGMENTASSUMECS:CODE, DS:DATAMAIN:MOVAX, DATAMOVDS, AXAGAIN:LEADX, MSG1MOVAH, 9INT21H;提示输入第一个数CALLINPUT;输入过程PUSHBXOUTPUT0AHOUTPUT0DHLEADX, MSG2 MOVAH, 9INT21H;提示输入第二个数CALLINPUT;输入过程OUTPUT0AHOUTPUT0DHPOPAX;实现两个4位组合BCD码相加ADDAL, BL;低8位相加DAA;校正MOVCL, AL;保存至CLADCAH, BH;高8位相加MOVAL, AH;移至ALDAA;校正MOVAH, ALMOVAL, CLMOVBX, AX;最后结果放在BX中JNCNEXTOUTPUT 1;如果相加结果大于9999,则显示进位“1”NEXT:PUSHBXMOVCL, 4SHRBH, CLADDBH, 30HOUTPUTBH;显示千位数POPBXPUSHBXANDBH, 0FHADDBH, 30HOUTPUTBH;显示百位数POPBXPUSHBXMOVCL, 4SHRBL, CLADDBL, 30HOUTPUTBL;显示十位数POPBXANDBL, 0FHADDBL, 30HOUTPUTBL;显示个位数OUTPUT0AHOUTPUT0DHJMPAGAININPUTPROCFAR;输入一个4位十进制数的过程BEGIN:MOVCX, 4MOVBX, 0L:SHLBX, 1SHLBX, 1SHLBX, 1SHLBX, 1;BX的值乘以16MOVAH, 1INT21H;输入CMPAL, 1BH;ESC键退出JZDONECMPAL, 0JBERROR;非数字,出错CMPAL, 9JAERROR;非数字,出错SUBAL, 30HXORAH, AHADDBX, AX;将输入加到BX中LOOPLRETERROR:LEADX, MSG3MOVAH, 9INT21HJMPBEGINDONE:MOVAH, 4CHINT21HINPUTENDPCODEENDSENDMAIN7、在8086系统下,编写完整程序,实现两个32位带符号数相乘。假设被乘数存放在以字变量MUL1开始的连续4个字节中,乘数存放在以字变量MUL2开始的连续4个字节中中,相乘结果存放在以字变量RES开始的连续8个字节中。解:参考程序:DATASEGMENTMUL1DW0FFFFH,0FFFFH;被乘数MUL2DW5678H,1234H;乘数RESDW4 DUP(0);结果DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXMOVCX, MUL1MOVBP, MUL1+2MOVSI, MUL2MOVDI, MUL2+2TESTBP, 8000H;被乘数是否为负数JZNEXT1NOTBP;为负数,则取反加1NOTCXADDCX, 1ADCBP, 0NEXT1:TESTDI, 8000H;乘数是否为负数JZNEXT2NOTSI;为负数,则取反加1NOTDIADDSI, 1ADCDI, 0NEXT2:MOVAX, SI;相乘过程MULCXMOVRES, AXMOVRES+2, DXMOVAX, SIMULBPADDRES+2, AXADCRES+4, DXMOVAX, DIMULCXADDRES+2, AXADCRES+4, DXMOVAX, DIMULBPADDRES+4, AXADCRES+6, DXMOVAX, MUL1+2XORAX, MUL2+2;判断被乘数和乘数是否同号JNSDONE;同号,则结果为正数,无须修改结果NOTRES;不同号,则结果为负数,须取反加1NOTRES+2NOTRES+4NOTRES+6ADDRES, 1ADCRES+2, 0ADCRES+4, 0ADCRES+6, 0DONE:RETMAINENDPCODEENDSENDMAIN8、在8086系统下,编写完整程序,找出字节数组ARRAY中的最大值和最小值。假设ARRAY的长度为100个字节,每个字节为一个无符号数,程序执行后最大值将存放到字节变量MAX中,最小值则存放到字节变量MIN中。解:参考程序:DATASEGMENTARRAYDB100 DUP(?);字节数组MAXDB?;最大值MINDB?;最小值DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXLEASI, ARRAYCLDMOVBH, 0;存放临时最大值的寄存器MOVBL, 0FFH;存放临时最小值的寄存器MOVCX, 100AGAIN:LODSBCMPAL, BHJNANEXT1MOVBH, AL;如果当前数值比临时最大值大,则代替NEXT1:CMPAL, BLJNBNEXT2MOVBL, AL;如果当前数值比临时最小值小,则代替NEXT2:LOOPAGAINMOVMAX, BHMOVMIN, BLRETMAINENDPCODEENDSENDMAIN9、在8086系统下,编写完整程序,将字节数组ARRAY中的所有数据往高地址的方向移动一位,即原来存放在ARRAY中的字节移动到ARRAY+1中,原来存放在ARRAY+1中的字节移动到ARRAY+2中,依此类推。假设ARRAY的长度为100个字节。解:可利用MOVSB指令实现移位,但应该注意,必须从串尾开始移动,因为假如直接从串头开始,将串头移到第二个数,那么第二个数将被覆盖。为使程序能从串尾开始移动,可令方向标志位DF=1。参考程序:DATASEGMENTARRAYDB100 DUP(?), ?DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXMOVES, AXLEASI, ARRAY+99;SI指向源串尾LEADI, ARRAY+100;DI指向新串尾STD;DF=1,串尾先移动MOVCX, 100REPMOVSB;循环移动RETMAINENDPCODEENDSENDMAIN10、在8086系统下,编写在长字符串L_STR中查找短字符串S_STR的完整程序,如果找到匹配的字符串,则将字节变量RES置0FFH,否则置0。例如,在字符串“ABABCD”中可找到字符串“ABC”,则RES=0FFH。解:参考程序:DATASEGMENTL_STRDBABDABABCD;长串L_LTHDW$-L_STR;长串长度S_STRDB ABC;短串S_LTHDW$-S_STR;短串长度RESDB?;存放结果DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXMOVES, AXLEASI, L_STRLEADI, S_STRCLDMOVCX, L_LTHSUBCX, S_LTHINCCX;作串比较的次数AGAIN:CALLCOMP;进行串比较INCSILOOPAGAINMOVRES, 0RETMAINENDPCOMPPROCFARPUSHCXPUSHSIPUSHDIMOVCX, S_LTHREPZCMPSBJZYES;如果两个串相同,则说明找到POPDIPOPSIPOPCXRETYES:MOVRES, 0FFHMOVAH, 4CH INT21HCOMPENDPCODEENDSENDMAIN11、在80386系统下,编程实现两个64位无符号数相乘。解:参考程序:.386. MODELSMALL.DATAMUL1DD3456789AH, 12345678H;被乘数MUL2DD789ABCD

温馨提示

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

评论

0/150

提交评论