第4章-微机原理与接口技术答案欧青立编

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章8086CPU汇编语言程序设计习题4.1汇编语言有何特点?编写汇编语言源程序时,一般的组成原则和结构是什么?参考答案:汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序。编写汇编语言源程序时,一般的组成原则和结构如下:(1)完整的汇编语言源程序由段组成。(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列。(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内。(5)通常,程序还需要一个堆栈段。4.2简述助记符、汇编语言、汇编语言程序和汇编程序的基本概念及其异同。参考答案:助记符:人们采用便于记忆、并能描述指令功能的符号来表示机器指令操作码,该符号称为指令助记符。汇编语言:用助记符表示的指令以及使用它们编写程序的规则就形成汇编语言。汇编语言程序:用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序。汇编程序:汇编语言编写的程序不能由机器直接执行,而必须翻译成由机器代码组成的目标程序,这个过程称为汇编。用来把汇编语言编写的程序自动翻译成目标程序的软件称为汇编程序(Assembler)。常用的汇编程序是MASM.exe。4.3如何规定一个汇编语言程序执行的开始位置?主程序执行结束时应该如何返回DOS?源程序在什么位置停止汇编过程?参考答案:用标号指明规定一个汇编语言程序执行的开始位置。END伪指令后的标号所对应的地址即是程序开始位置。主程序执行结束时应该利用DOS功能调用的4CH子功能来实现返回DOS。在源程序的END伪指令处,停止汇编过程。·2·4.4汇编语言程序的开发有哪4个步骤?分别利用什么程序完成?各步骤完成后产生什么输出文件?参考答案:汇编语言的程序一般要经过编辑、汇编(MASM或ASM)、连接(LINK)和调试(DEBUG)4个步骤。1)建立源程序文件建立源程序文件用编辑软件完成,常用的编辑软件有操作系统自带的编辑软件EDIT、记事本软件、写字板软件,以及其他文字编辑处理软件,如Office、WPS等。源程序文件为“汇编语言程序.asm”。2)汇编(MASM或ASM)源程序汇编过程是指利用汇编程序MASM对源程序文件进行汇编的过程。汇编程序MASM的主要功能:找出源程序中指令格式的错误、标号变量定义错误(存在没有定义或重复定义标号变量);生成3个文件,即目标文件(myfile.obj,必须产生)、列表文件(myfile.lst)和交叉索引文件(myfile.crf)。3)程序连接连接程序LINK将目标程序连接成可执行文件。连接程序输出两个文件:可执行文件(扩展名为.exe)和内存分配文件(扩展名为.map)。4)调试程序源程序编写后,通过汇编和连接后,即可得到在计算机系统中直接执行的二进制代码文件,但程序执行的结果是否正确无法判断。利用MASM对源程序汇编时可以检测出程序的语法错误、指令用法错误,程序执行的情况需要通过程序调试来完成。汇编语言程序的调试可以借助于专门的调试工具软件DEBUG来实现。调试成功后生成应用程序文件。4.5设置一个数据段,按照如下要求定义变量。(1)STRING为字符串变量,表示字符串“SIEEOFHNUST”。(2)VARB为用十六进制数表示的字节变量,这个数的大小为100。(3)VARW为100个未赋值的字变量参考答案:DATASEGMENTSTRINGDB‘SIEEOFHNUST’VARBDB100HVARWDW100DUP(?)DATAENDS4.6给出下列语句,指令中立即数(数值表达式)的值分别是什么?(1)MOVAL,23HAND45HOR67H(2)MOVAX,1234H/16+10H(3)MOVAX,254HSHL4(4)MOVAL,‘A’AND(NOT(‘B’-‘B’))(5)MOVAX,(76543LT32768)XOR7654H·3·参考答案:(1)MOVAL,23HAND45HOR67H23HAND45HOR67H=67H(2)MOVAX,1234H/16+10H1234H/16+10H=133H(3)MOVAX,254HSHL4254HSHL4=0230H(4)MOVAL,‘A’AND(NOT(‘B’-‘B’))‘A’AND(NOT(‘B’-‘B’))=41H(5)MOVAX,(76543LT32768)XOR7654H(76543LT32768)XOR7654H=764H4.7过程定义的一般格式是什么?参考答案:过程名PROC[属性](NEAR/FAR)过程名ENDP子程序设计举例:编写一个延时子程序,其过程可定义如下。DLY1PROCPUSHBXPUSHCXMOVBL,05HDLY2:MOVCX,0FFFFHWAIT:LOOPWAITDECBLJNZDLY2POPCXPOPBXRETDLY1ENDP4.8子程序开始为什么常使用PUSH指令?子程序返回前为什么使用POP指令?参考答案:为了正确返回主程序,通常在子程序中PUSH指令和POP指令应该成对使用。PUSH指令和POP指令是用于压栈和弹栈指令,一般用于保护现场和恢复现场;所以一般这两个语句是用于子程序,在子程序的开始第一条语句就应该是PUSH指令,以保护断点(包括程序代码段IP值,寄存器AX的值)。在子程序返回之前必须用POP弹栈,将断点信息返回,主程序才能继续工作。4.9已知程序段如下:MOVAX,1234HMOVCL,4ROLAX,CLDECAXMOVCX,4MULCXINT20H·4·试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF、SF及ZF的值分别是什么?(3)程序运行结束后,AX及DX寄存器的值是什么?参考答案:MOVAX,1234H;AX寄存器的内容是1234H,不影响标志位。MOVCL,4;AX寄存器的内容是1234H,CL寄存器的内容是4,不影响标志位。ROLAX,CL;AX寄存器的内容是2341H,CF=1,不影响符号和零标志标志位。DECAX;AX寄存器的内容是2340H,SF=0,ZF=0,不影响进位标志位。MOVCX,4;AX寄存器的内容是2340H,CX寄存器的内容是4,不影响标志位。MULCX;AX寄存器的内容是8D00H,DX寄存器的内容是0,CF=0,不影响符号和零标志位。程序结束后,AX和DX的内容分别是8D00H和0000H。4.10在当前数据段1000H开始的128个单元中存放一组数据,试编程序将它们顺序移动到A000H开始的顺序排列的128个单元中。参考答案:DATASEGMENTORG1000HBEFFSDB128DUP(2AH)DATAENDSEDATASEGMENTORGA000HBEFFDDB128DUP(?)EDATAENDSSTACKSEGMENTDB100DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACK,ES:EDATAMAINPROCFARSTART:PUSHDSSUBAX,AX·5·PUSHAXMOVAX,STACKMOVSS,AXPUSHDSMOVAX,DATAMOVDX,AXMOVAX,EDATAMOVES,AXMOVCX,128CLDMOVSI,OFFSETBUFFSMOVDI,BUFFDREPMOVSBMOVCX,128RETMAINENDPCODEENDSENDSTART4.11编写一个程序,接收从键盘输入的10个数,输入回车符表示结束,将这些数保存在BUFF缓冲区中。参考答案:DATASEGMENTBUFFDB10DUP(?)DATAENDSSTACKSEGMENTDB100DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACK,ES:DATASTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXLEADI,BUFFMOVCX,10NEXT:MOVAH,01H·6·INT21H;从键盘上接收单个字符CMPAL,0DH;与0DH(回车符)比,判是否要结束JZEXITSUBAL,30H;否则,将0~9的ASCII码转换为十进制数MOV[DI],ALINCDILOOPNEXTEXIT:MOVAX,4C00H;退出并返回DOSINT21HCODEENDSENDSTART4.12在当前数据段(DS),偏移地址为CHJ1开始的顺序的80个单元中,存放着某班80个同学某课程的考试成绩。编写程序统计≥90分、80~89分、70~79分、60~69分、<60分的人数各为多少,并将结果放在同一数据段、偏移地址为CHJTJ开始的顺序单元中。参考答案:STACKSEGMENTSTACKDB256DUP(?)STACKENDSDATASEGMENTCHJ1DB80DUP(?)CHJTJDB5DUP(00H)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVSI,OFFSETCHJ1MOVDI,OFFSETCHJTJXORBX,BXXORDX,DXMOVCX,80NEXT:MOVAL,[SI]CMPAL,90·7·JBC80INCBH;≥90分的人数JMPAAAC80:CMPAL,80JBC70INCBL;≥80分的人数JMPAAAC70:CMPAL,70JBC60INCDH;≥70分的人数JMPAAAC60:CMPAL,60JBAAAINCDL;≥60分的人数JMPAAAAAA:INCSILOOPNEXTMOVAL,80SUBAL,BHSUBAL,BLSUBAL,DHSUBAL,DL;<60分的人数MOV[DI],BHMOV[DI]+1,BLMOV[DI]+2,DHMOV[DI]+3,DLMOV[DI]+4,ALMOVAH,4CHINT21HCODEENDSENDSTART4.13编写一个程序,先提示输入数字“InputNumber:0~9”,然后在下一行显示输入的数字并结束;如果未键入0~9,则提示错误“Error!YourInputisnot0~9.InputNumber:0~9”,继续等待输入数字。参考答案:DATASEGMENT;数据段INMSGDB‘INPUTNUMBER:0~9’,0DH,0AH,’$’ERMSGDB‘ERROR!YOURINPUTISNOT0~9.INPUTNUMBER:0~9’,’$’DATAENDSCODESEGMENT;代码段·8·START:PUSHDSSUBAX,AXPUSHAXMOVDX,OFFSETINMSGMOVAH,9INT21H;显示输入数字0~9AGAIN:MOVAH,1INT21H;接受一个字符CMPAL,’0’;判断是否输入的是数字0~9JBERDISPCMPAL,’9’JAERDISPMOVDL,ALMOVAH,2INT21H;显示输入的数字JMPDONE;结束ERDISP:MOVDX,OFFSETERMSGMOVAH,9INT21H;显示输入错误JMPAGAIN;继续输入DONE:MOVAX,4C00HINT21HCODEENDSENDSTART4.14编写一个程序,把一个16位二进制数用4位十六进制形式在屏幕上显示出来。参考答案:DATASEGMENTDAT16BDW1234HDATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE;DS:DATASTART:PUSHDSSUBAX,AXPUSHAXMOVCH,4·9·ROTATE:MOVBX,DAT16BMOVCL,4ROLBX,CLMOVAL,BLANDAL,0FHADDAL,3

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功