• 736.00 KB
  • 2022-04-22 11:29:01 发布

汇编语言程序设计答案.doc

  • 55页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《汇编语言程序设计教程》人民邮电出版社2013习题及参考答案1.1什么是机器语言?什么是汇编语言?简述汇编语言的特点。机器语言就是用二进制编码组成的机器指令的集合和一组使用机器指令的规则。汇编语言是对机器指令中的操作码用英文单词的缩写描述,对操作数用标号、变量、常量描述。汇编语言的特点:(1)与机器有关:移植性差,但可直接控制硬件。(2)程序效率高。(3)局限性:受指令的限制,如考虑存储单元等。(4)调试困难。1.2汇编程序与汇编源程序的区别是什么?汇编源程序是指用汇编语言编写的程序,而汇编程序特指将汇编源程序汇编成目标文件的编译程序。1.3把下列十进制数转换为二进制数和十六进制数。(1)67(2)34(3)254(4)123答:(1)1000011,43(2)100010,22(3)11111101,FE(4)1111011,7B1.4把下列二进制数转换为十六进制数和十进制数。(1)01101101(2)10110010(3)111111答:(1)6D,109(2)B2,178,(3)3F,631.5作下列十六进制数的运算,并转换为十进制数校核。(1)5A+64(2)86-49(3)123-9A(4)43×2B答:(1)BE(2)3D(3)89(4)B411.6根据补码定义把下列十进制数表示为8位二进制补码。(1)64(2)-24答:(1)01000000(2)[10011000]原=[11101000]补1.7下列各数均为十进制数,请采用8位二进制补码运算,并回答标志寄存器FLAGS中CF和OF的值,运算结果所代表的十进制数是多少?如果用16位二进制补码运算,其结果所代表的十进制数是多少?FLAGS中CF和OF的值呢?(1)85+69(2)85+(-69)(3)85-(-69)(4)85-(69)答:85=55H,69=45H,-69=BBH,8位二进制补码运算:(1)85+69=55H+45H=9AH=154,CF=0,OF=1(2)85+(-69)=55H+BBH=10H=16,CF=1,OF=0(3)85-(-69)=55H-BBH=9AH=154,CF=1,OF=1(4)85-(69)=55H-45H=10H=16,CF=0,OF=0 16位二进制补码运算:85=0055H,69=0045H,-69=0FFBBH,(1)85+69=0055H+0045H=009AH=154,CF=0,OF=0(2)85+(-69)=0055H+0FFBBH=0010H=16,CF=1,OF=0(3)85-(-69)=0055H-0FFBBH=009AH=154,CF=1,OF=0(4)85-(69)=0055H-0045H=0010H=16,CF=0,OF=01.8简述计算机系统组成。答:计算机由中央处理器CPU,存储器,输入系统,输出系统组成,由系统总线连接在一起。CPU包括运算器和控制器,运算器执行指令,控制器负责计算机的控制。存储器是计算机的记忆部件,以二进制形式存放程序和数据。输入输出系统包括大容量存储器,如硬盘,以及其他外设,如鼠标,键盘,显示器等。1.9简述16位机的各类寄存器的主要作用。答:(1)数据寄存器:Ax,Bx,Cx,Dx;AX:作为累加器,是算术运算的主要寄存器。在乘除等指令中存放操作数,在I/O指令中使用它与外部设备传送信息。BX:当通用寄存器使用,在计算存储器地址时,作基址寄存器使用。CX:当通用寄存器使用,此外常用来保存计数值,当计数器使用。DX:当通用寄存器使用,一般在作双字长运算时把DX和AX组合使用,对某些I/O操作,DX用来存放I/O的端口地址。(2)地址寄存器:Sp,Bp,Si,Di(3)段寄存器:Cs,Ds,Es,Ss;段寄存器的作用是专用于存储器寻址,用来直接或间接地存放段地址。(4)专用寄存器:Ip,Flags;Ip寄存器专门存放下一条指令的地址,Flags标志寄存器,又称程序状态寄存器。它是存放条件码标志、控制标志和系统标志的寄存器。1.10实模式下,写出段地址和偏移地址为1234:2002、1430:0042、FF00:0FFF的物理地址。答:1234:2002=12340+2002=143421430:0042=14300+0042=14342FF00:0FFF=FF000+0FFF=FFFFF1.1152506=50000+2506,=52500+0006,基地址最大为5250,最小为5000.段地址取值范围:0000—FFFF。既65536个。1.12从物理地址为00100H开始到00103H单元中顺序存放的数据为:12H,34H,56H,78H。请画出数据存放示意图,并回答以下问题:(1)写出00101H字节单元的内容(2)写出00102H字单元的内容 答案:(1)(00101)=34H(2)(00102)=7856H习题22.1写出从汇编语言源程序的建立到产生可执行文件的步骤和上机操作命令。答:(1)用编辑程序EDIT建立.ASM源文件(2)用汇编程序MASM把.ASM文件原文件汇编成.OBJ文件(3)用连接程序LINK将.OBJ文件转换成.EXE文件(4)在DOS下直接运行.EXE文件或在DEBUG下调试该.EXE文件2.2列表文件.LST是在什么阶段产生的?列表文件.LST中有哪些内容?答:*.LST在汇编得到*.obj的同时得到,列表文件报告了汇编过程中产生的很多有价值的参考信息。主要包括源程序和机器语言清单、指令和变量的偏移地址等等。2.3写出定义一个代码段的语句,段名为MYPRG。答:MYPRGsegmentAssumecs:MYPRGstart:MYPRGendsEndstart2.4程序中用什么语句来结束程序的执行?用什么语句来表示程序的结束和指出程序执行的起点?答:程序的结束:movah,4chint21h程序的结束和指出执行的起点:Endstart2.5汇编语言源程序的文件扩展名是什么?把它改为.EXE扩展名后,可以认为是可执行程序吗?答:源程序的文件扩展名为*.asm,改扩展名不可以执行。2.6列出子目录C:YOUPRG下的扩展名为.ASM的所有文件,在D盘根目录下建立一个子目录MYPRG,并进入子目录MYPRG,再把C:YOUPRG下的文件YOU.ASM复制到D:MYPRG下。写出完成以上要求的DOS命令。答:(1)列出子目录:C:YOUPRG>dir*.asm(2)建立子目录:D:>MDMYPRG(3)复制:C:YOUPRG>copyYOU.asmD:MYPRG2.7下图为DEBUG调入的可执行程序,回答以下问题: (1)程序的起始物理地址是多少?结束地址是多少?(2)CS寄存器的值是什么?(3)程序的功能是什么?(4)写出查看DS:0处内容的DEBUG命令。(5)程序中2处的INT21指令执行后有什么结果?(6)如果要运行这个程序应该用什么DEBUG命令?(7)DEBUG命令-T=04之后,寄存器AX、DS、DX的值是多少?答:(1)0B63:0000(2)0B63(3)显示0B62:0000存储的字符串(4)-d0B62:0000(5)第一处显示字符串,第二处结束程序(6)-g(7)(AX)=0962,(DS)=0B62,(DX)=00002.8解释DEBUG程序中的如下调试命令。-D,-E,-T,-G,-A,-R答:-D显示内存内容-E修改内存单元内容-T跟踪命令-G运行命令-A汇编命令-R查看或修改寄存器内容2.9用DEBUG调入PROG.EXE后,若程序列出如下:1234:0100MOVBX,[4000]1234:0104MOVAX,[BP]1234:0106MOVAH,11234:0108INT211234:010AMOVDL,AL 1234:010CMOVAH,21234:010EINT211234:0110RET列出上面程序的DEBUG命令是()。寄存器CS的值为(),第一条指令的物理地址为()。如果要修改寄存器BX为1200H,应键入DEBUG命令()。若要修改第二条指令中的BP为BX,应键入DEBUG命令()。答:(1)U(2)1234H(3)12440H(4)RBX(5)A[0104]2.10简述DOS系统功能INT21H调用方法。答:(1)将调用功能的功能号存入AH寄存器。(2)如必要,设置该调用功能的入口参数。(3)执行INT21H指令。(4)如必要,按规定取得出口参数(返回参数)。2.11Debug命令调试含有“INT21H”命令的程序段时,如何实现单步执行,“-t”命令为何无法实现?答:“INT21H”指令是Dos的系统调用,如果使用“-t”跟踪,则进入DOS系统子程序。如果希望单步执行,可以通过P命令或“-g=xx+1”来实现。2.12有主存数据段存放情况如下图所示,请写出代码,输出数据段的字符串“inspireageneration!”。答:movax,145Bmovds,axmovah,09movdx,0int21h习题33.1何为段地址?何为有效地址?何为物理地址?答: 例如DS=6542H,指令movax,DS:[123A];123A为有效地址,6542H为段地址,65420H+0123AH=6665A即物理地址.3.2指出以下指令的寻址方式,array是变量。(1)movax,9(2)movbyteptr[bx],9(3)movbx,[di](4)movax,bx(5)mov[si+bx],9(6)movarray[bx],cx(7)movax,array+9(8)movax,array[bx+di]答:(1)立即数寻址(2)寄存器间接寻址(3)变址寻址(4)寄存器寻址(5)基址变址寻址(6)相对基址寻址(7)直接寻址(8)相对基址变址寻址3.3假定(DS)=1200H,(SS)=4400H,(BX)=463DH,(BP)=2006H,(SI)=6A00H,位移量D=4524H,以AX寄存器为目的操作数,试写出以下各种寻址方式下的传送指令,并确定源操作数的有效地址EA和物理地址。(1)立即寻址(2)直接寻址(3)使用BX的寄存器寻址;无EA(4)使用BX的间接寻址(5)使用BP的寄存器相对寻址(6)基址变址寻址(7)相对基址变址寻址答:(1)操作数在指令中无EA(2)直接寻址:EA=4524H,物理地址=DS:4524(3)使用BX的寄存器寻址:无EA(4)使用BX的间接寻址:EA=463DH,物理地址=DS:463D(5)使用BP的寄存器相对寻址:MOVAX,[BP+4524],EA=2006+4524,物理地址=SS:EA(6)基址变址寻址:MOVAX,[BX+SI],EA=BX+SI,物理地址=DS:EA(7)相对基址变址寻址:MOVAX,[4524+BX+SI],EA=4524+BX+SI,物理地址=DS:EA3.4在数据段定义了ARRAY数组,其中依次存储了五个字数据,ARRAY的起始地址(第一个数据的地址)为24H,请用不同寻址方式的指令,把第5个字送AX寄存器,指令条数不限。 答:(1)直接寻址MOVAX,ARRAY+8或MOVAX,[ARRAY+8](2)使用BX的间接寻址LEABX,ARRAY+8;MOVAX,[BX](3)使用BX的寄存器相对寻址LEABX,ARRAY;MOVAX,[BX+8](4)基址变址寻址LEABX,ARRAY;MOVSI,8;MOVAX,[BX+SI]习题44.1溢出标志OF与进位标志CF有何作用和区别?答:处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF。应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。4.2带符号数比较大小,当AX)Namedb‘INPUTNAME$’TELdb‘INPUTTELEPHONENUMBER$’numberdb‘INPUTSEQUENCENUMBER$’errdb‘NOTHISNUMB$’Dataendscodesegmentassumecs:code,ds:datamainprocfarpushdsxorax,axpushaxmovax,datamovds,axmovcx,0a:callinnamecallinteleinccxcmpcx,9jlacallprintretmainendpinnameprocnearpushcxleadx,namemovah,9int21hmoval,sizearraymulclmovbx,axaddbx,arraymov[bx].sn,clmovdi,0a:movah,1int21hmov[bx].name[di],alincdicmpdi,6jla popcxretinnameendpinteleprocnearpushcxleadx,telmovah,9int21hmoval,sizearraymulclmovbx,axaddbx,arraymovdi,0a:movah,1int21hmov[bx].telen[di],alincdicmpdi,13jlapopcxretinteleendpprintprocnearleadx,numbermovah,9int21hmovah,1int21hcmpal,0jlexcmpal,8jgexmovcl,almoval,sizearraymulclmovbx,axaddbx,arraymovdx,bxmovah,9int21hmovdl,13movah,2int21hmovdl,10 movah,2int21hleadx,[bx].telenmovah,9int21hjmprex:leadx,errmovah,9int21hr:retprintendpcodeendsendmain习题88.1宏定义:MSGMACROP1,P2,P3IN&P1P2P3ENDMK=1展开下列宏调用:MSG%K,DB,‘MYNAME’MSGC,AX答:1IN1DB‘MYNAME’2INCAX8.2使用宏指令,在数据段定义九条通讯录记录,宏展开后的数据段形如:DATASEGMENTDA1LABELBYTEDB1,‘NAME1’,‘TELE1’DB2,‘NAME2’,‘TELE2’…DB9,‘NAME9’,‘TELE9’DATAENDS答:DEFMACROIRPX,<1,2,3,4,5,6,7,8,9>DBX,’NAME&X&’,’TELE&X&’ENDMDATASEGMENTDA1LABELBYTEDEF DATASEGMENT8.3宏指令和指令的区别是什么?使用宏指令和使用子程序有何异同?宏指令的优点在哪里?答:宏指令只在汇编时起作用,指令汇编后继续执行。宏指令与子程序的区别如下:(1)空间的区别:宏指令大于子程序,多次调用宏指令,程序长度增加。(2)时间的区别:宏运行不需要额外的时间,子程序需要。(3)参数的区别:宏命令可实现多个参数的直接代换,方式简单灵活;而子程序参数传递麻烦。总之,代码不长和变元较多的功能段,使用宏命令比较合适。8.4在宏定义中有时需要LOCAL伪操作,为什么?答:在宏定义中,常常使用标号,当多次宏调用后,就会出现标号重复定义的错误。使用LOCAL伪操作,对标号说明为局部标号,这样每次调用,宏展开的标号是不同的。8.5宏定义在程序中的位置有何规定?宏调用是否一定放在代码段?答:宏定义在程序中的位置没有严格要求,可以写在某一段内,也可以不在段内。8.6用宏指令计算S=(A+B)*K/2,其中A,B,K为常量。答:mathmacroS,A,B,KS=(A+B)*K/2ENDM8.7编写宏定义,比较两个常量X和Y,如果X>Y,MAX=X,否则MAX=Y。答:COMPAREMACROMAX,X,YLOCALA,BCMPX,YJGEAMOVMAX,YJMPBA:MOVMAX,XB:ENDM8.8编写非递归的宏定义,计算K的阶乘,K为变元。答:FACMACROKMOVAX,1MOVCX,K+1A:SUBCX,1MULCXCMPCX,1JGAENDM 8.9在数据段中定义了三个有符号数A、B、C,使用宏指令,给三个数排序,三个变量作为参数。答:ORDERMACROA,B,CCMPA,BJGL1MOVAX,BMOVBX,AMOVA,AXMOVB,BXL1:CMPB,CJGL2MOVAX,BMOVBX,CMOVC,AXCMPA,BXJGL2MOVAX,AMOVA,BXMOVB,AXL2:ENDM8.10编写一个宏定义SCAN,完成在一个字符串中查找某个字符的工作。被查找的该字符,字符串首地址及其长度均为变元。答:SCANMACROA,STREE,NMOVAX,SEGSTREEMOVES,AXLEADI,STREEMOVCX,NMOVAL,ACLDREPNESCASBJZYESMOVDL,’N’JMPDISPYES:MOVDL,’Y’DISP:MOVAH,2INT21HENDM8.11编写宏指令COMPSS,比较2个同长度的字符串str1和str2是否相等,2个字符串的首地址和长度为变元。写出完整程序,在数据段中写出数据定义,在代码段中写出宏定义和宏调用。并处理若相等则显示‘MATCH’,否则显示‘NOT MATCH’.答:COMPSSMACROST1,ST2,NLEASI,ST1LEADI,ST2MOVCX,NCLDREPECMPSBJZYESMOVDX,LEAS2JMPDISPYES:MOVDX,LEAS1DISP:MOVAH,9INT21HENDMDATASEGMENTSTR1DB‘’NUMDB?S1DB‘MATCH$’S2DB‘NOTMATCH$’DATAENDSEXTSEGMENTSTR2DB‘’EXTENDSCODESEGMENTMAINPROCFARPUSHDSPUSHESMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVAX,EXTMOVES,AXMOVNUM,LENGTHSTR1COMPSSSTR1,STR2,NUMRETCODEENDSENDMAIN8.12编写宏定义程序,可以对任意字数组求元素之和,数组名称、元素个数和结果存放单元为宏定义的哑元。答:ADSMACROARRAY,N,SUMLeadi,ARRAY Movcx,NMovax,0Movsi,0Ad:addax,[di][si]Addsi,2LoopadMovSUM,axENDM8.13编写一个宏库文件,其中包括系统功能调用(INT21H)的00~0A号功能调用。并通过宏调用实现以下各项功能:从键盘输入一个字符串到BUFF;再输入一个单字符,然后在字符串BUFF中查找是否存在该字符;如果找到,显示发现的字符位置。答:宏库文件sysmacro.mac文件定义如下:INPUTMACROMOVAH,1INT21HENDMOUTPUTMACROCHAMOVDL,CHAMOVAH,2INT21HENDMINPUTNMACROMOVAH,7INT21HENDMOUTSTRMACROSTREEMOVDX,OFFSETSTREEMOVAH,9INT21HENDMINBUFFMACROBUFFMOVDX,OFFSETBUFFMOVAH,0AHINT21HENDMWFILEMACROFIL,NUM,COUNTMOVDX,OFFSETFILMOVBX,NUMMOVCX,COUNTMOVAH,40HINT21HENDM EXITMACROMOVAH,4CHINT21HENDM调用:includesysmacro.macDatasegmentBUFF1db16,?,16dup(?),13,10,"$"DataendsCodesegmentAssumecs:code,ds:dataMainprocfarPushdsXorax,axPushaxMovax,dataMovds,axMoves,axINBUFFBUFF1INPUTLeadi,BUFF1+2Movcl,BUFF1+1movch,0Movah,0RepnescasbJnzyedecdimovbx,diCallBTHYe:retMainendpBTHprocnearmovcx,4s:rolbx,1rolbx,1rolbx,1rolbx,1moval,blandal,0fhaddal,30hcmpal,39hjledaddal,7d:OUTPUTal loopsretBTHendpCodeendsEndmain习题99.1I/O数据传送控制方式有哪几种?答:无条件传送、查询传送、中断传送、直接存储器传送。9.2什么是I/O接口?什么是端口?接口部件在计算机主机一方还是在外设一方?答:I/O接口是INPUT/OUTPUT指输入/输出设备接口。CPU与外部设备的连接和数据交换都需要通过接口设备来实现,被称为I/O接口。计算机主机的CPU通过访问这些寄存器来实现与外部设备交换数据。把接口中的这些寄存器称为端口(PORT)。这些寄存器并不是在外部设备一方,而是属于计算机主机。9.3通过端口传递哪三种信息?答:CPU与I/O设备的通信有三种信息,即控制信息、状态信息和数据信息。9.4根据以下要求写出输入输出指令:(1)读61H端口(2)写20H端口(3)读3F8H端口(4)写3F9H端口答:(1)INal,61h(2)OUT20h,al(3)movdx,3F8HINal,dx(4)movdx,3F9HOUTdx,al9.5举例说明何为中断类型号,何为中断向量,何为中断向量表。对于INT8指令,中断向量存放的内存地址是多少?答:在实际的系统中,中断源有多个,需要给每个中断源编一个号,以便于识别。在执行软件中断指令INTn时,n就是中断类型号。我们把中断处理程序的起始地址称为中断向量。在存储器的最低1KB(地址从0000~3FFH)集中存放256种中断类型的中断向量,每个中断向量为四个字节,其中前两个字节是偏移地址,后两个字节是段地址。这个集中存放中断向量的存储区称为中断向量表。INT8对应中断向量存放的内存地址是00020H9.6举例说明何为内中断,何为外中断,何为硬件中断,何为可屏蔽中断。答:内中断:中断指令INT外中断:也称为硬件中断,如电源故障。可屏蔽中断:如定时器。 9.7何为开中断和关中断。关中断情况下,内中断能否被响应?不可屏蔽中断能否被响应?可屏蔽中断能否被响应?答:所谓开中断,是指程序在运行中,包括中断程序执行中,允许响应其他中断请求,再转去运行中断服务程序。关中断则是不允许系统打断连续的运行。内中断可以响应,不可屏蔽中断可以被相应。可屏蔽中断不能被响应。9.8写出仅使定时器、键盘、硬盘、打印机不被屏蔽,并开中断的指令序列。答:Moval,01011100OUT21h,alSTI9.9列出INT指令执行的操作,列出CPU响应外部中断时所做的工作。答:中断请求,中断优先级判定,中断响应,中断处理,中断返回。CPU响应外部中断自动完成下列工作:1.取中断内型号N;2.标志寄存器入栈;3.代码段寄存器和指令指针入栈;4.禁止硬件中断和单步中断;5.在中断向量表中的N*4开始的单元取两个字分别送IP和CS,获取中断处理程序入口地址。9.10中断处理程序中通常要做哪些工作?中断处理程序中是否一定要开中断?如果有开中断指令,意味着什么?答:中断处理程序一开始可以根据需要开中断,以允许中断嵌套。用入栈指令把中断处理程序中将要用到的寄存器内容压入堆栈,以保护现场,待中断处理完毕,退出中断处理程序之前再把寄存器的内容从堆栈中弹出,从而恢复现场。9.11为什么说程序员应尽可能使用层次较高的DOS功能,其次才是使用BIOS功能,最后才是使用输入输出指令。答:因为用户通过调用DOS或者BIOS例行程序来实现对外设的访问,可以降低程序设计的复杂程度,缩短开发周期。BIOS存放在机器的ROM中,层次比DOS低,更接近硬件;DOS功能调用是操作系统DOS的一个组成部分,开机时从外存装入内存,DOS可以完成比BIOS更高级的功能,因此DOS操作比使用相应功能的BIOS操作更简易,而且DOS对硬件的依赖性更少。9.12编写程序段,使用INT1CH指令调用首地址为MYINT的中断处理程序。用完后恢复INT1CH指令的原有功能。CodesegmentAssumecs:codeStart:Moval,1chMovah,35h Int21hPushesPushbxPushdsMovdx,offsetMYINTMovax,segMYINTMovds,axMoval,1chMovah,25hInt21h;;使用中断程序;PopdxPopdsMoval,1chMovah,25hInt21hMovah,4chInt21hCodeendsEndstart习题10(基本可在书中找到参考,省略)'