ImageVerifierCode 换一换
格式:DOC , 页数:12 ,大小:56KB ,
资源ID:5374807      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/5374807.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(第5章-模块化程序设计.doc)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

第5章-模块化程序设计.doc

1、.第5章 模块化程序设计5.1 简答题(1)指令“CALL EBX”采用了指令的什么寻址方式?寄存器间接寻址(2)为什么MASM要求使用proc定义子程序?(这个问题不好回答,是不是作者写错了?我猜测可能的原因: 在汇编语言中,函数、子程序等都称为过程,所以使用proc定义子程序 )(3)为什么特别强调为子程序加上必要的注释?便于程序员调用时使用,而不必关注子程序的内部实现。(4)参数传递的“传值”和“传址”有什么区别?传值是传递参数的拷贝,传址是传递参数的地址(5)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题?保证正确返回;释放传递参数占用的堆栈空间,避免多次调用可能导致的堆栈溢出(

2、6)INCLUDE语句和INCLUDELIB有什么区别?INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件(7)什么是子程序库?子程序库就是子程序模块的集合,其中存放着各子程序的名称、目标代码以及有关定位信息,便于子程序的管理和调用(8)调用宏时没有为形参提供实参会怎样?缺少的实参,形参会做“空”处理。(9)宏定义体中的标号为什么要用local为指令声明?为了避免宏展开后出现标示符不唯一的情况,定义为局部。(10)条件汇编不成立的语句会出现在可执行文件中吗?不会。5.2 判断题(1)过程定义proc是一条处理器指令。错,proc是伪指令(2)

3、CALL指令的执行并不影响堆栈指针ESP。错,要改变,因为返回地址要压入堆栈(3)call指令本身不能包含子程序的参数。对。(4) call指令用在调用程序中,如果被调用程序中也有call指令,说明出现了嵌套。 对。(5)子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。错,不能保护传递出口参数的寄存器(6)利用INCLUDE包含的源文件实际上只是源程序的一部分。对(7)宏调用与子程序调用一样都要使用CALL指令实现。错,宏调用是通过宏展开实现的调用,不用CALL指令(8)宏定义与子程序一样一般书写与主程序之后。错,宏需要先定义后调用,一般在源程序开头部分。(9)重复汇编类似于

4、宏汇编,需要先定义后调用。错。(10)条件汇编并不像条件转移指令那样使用标志作为条件对。5.3 填空题(1)指令“RET i16”的功能相当于“RET”指令和“ADD ESP, _”组合。i16(2)例5-1程序中的ret指令,如果用pop ebp和jmp ebp指令替换,则ebp内容是( )0000000分(3)子程序的参数传递主要有3种,它们是( )、( )和( )。寄存器传递,共享变量传递,堆栈传递(4)数值10在计算机内部用二进制“1010”编码表示,用十六进制表达是:_。如果将该编码加37H,则为_,它是字符_的ASCII码值。A,41H,A(5)利用堆栈传递子程序参数的方法是固定的

5、,例如寻址堆栈段数据的寄存器是_。EBP(6)MASM汇编语言中,声明一个共用的变量应使用_伪指令;而使用外部变量要使用_伪指令声明。PUBLIC,EXTERN(7)过程定义开始是“TEST PROC”语句,则过程定义结束的语句是_。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是_。TEST ENDP,ENDM(8)一个宏定义开始语句“WriteChar MACRO CHAR:REQ”,则宏名是( ),参数有 ( ) 个,并且使用“:REQ”说明该参数( )。WriteChar, 1 , 不可缺少(9)实现“byte 20 dup(20h)”语句的功能也可以使用重复汇编,第1个

6、语句是( ),第2个语句是“ byte 20h”,第3个语句是( )。REPEAT 20, ENDM(10)条件汇编语言语句“IF NUM LT 100”中的LT 表示( ),该语句需要配合( )语句结束条件汇编小于, ENDIF习题5.4 如下子程序完成对ECX个元素的数组(由EBX指向其首地址)的求和,通过EDX和EAX返回结果,但是程序有错误,请改正。CrazyprocPusheaxXoreax,eaxXoredx,edxAgain:Addeax,ebxAdcedx,0Addebx,4LoopagainRetENDP Crazy答:CrazyprocXoreax,eaxXoredx,ed

7、xAgain:Addeax,ebxAdcedx,0Addebx,4LoopagainRetCrazy ENDP 习题5.5请按如下说明编写子程序:子程序功能:把用ASCII码表示的两位十进制数转换为压缩BCD码。入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码出口参数:AL=对应的BCD码答:asc2bcdprocshldh,4anddl,0fhordh,dlmoval,dhretasc2bcdendp习题5.6乘法的非压缩BCD码调整指令AAM执行的操作是:AH-AL/10的商,AL-AL/10的余数。利用AAM可以实现将AL中的100内数据转换为ASCII码,程序如下:Xo

8、r ah,ahAamAddax,3030h利用这段程序,编写一个显示AL中数值(099)的子程序。答:subaprocaamaddax,3030hxchgah,alcalldispcxchgah,alcalldispcretsubaendp习题5.7编写一个源程序,在键盘上按一个键,将其返回的ASCII码值显示出来,如果按下退格键(对应ASCII码是08H)则程序退出。请调用书中的HTOASC子程序答:;代码段,主程序again:call readccmp al,08h;退格键BS=08Hjz donemov bl,almov al,:call dispcmov al,blrol al,4ca

9、ll htoasc;调用子程序call dispc;显示一个字符mov al,blcall htoasc;调用子程序call dispc;显示一个字符call dispcrlfjmp againdone:习题5.8编写一个子程序,它以二进制形式显示EAX中32位数据,并设计一个主程序验证。答:;代码段,主程序mov eax,8F98FF00Hcall dispbd;调用子程序;代码段,子程序dispbdproc;32位二进制数的输出push ecxmov ecx,32;要输出的字符个数dbd:rol eax,1;AL循环左移一位push eaxand al,01h;取AL最低位add al,3

10、0h;转化成相应的ASCLL码值call dispc;以二进制的形式显示pop eaxloop dbdpop ecxretdispbdendp习题5.9将例5-4的32位寄存器改用16位寄存器,仅实现输出-215 +215-1之间的数据。答:start:mov ecx,lengthof arraymov ebx,0again:mov ax,arrayebx call writecall dispcrlfinc ebxinc ebxloop againexit 0writeprocpush ebxpush ecxpush edxmov ebx,offset writebuftest ax,axj

11、nz write1mov byte ptr ebx,30hinc ebxjmp write5write1:jns write2mov byte ptr ebx,-inc ebxneg axwrite2:mov cx,10push cxwrite3:cmp ax,0jz write4 xor dx,dxdiv cxadd dx,30hpush dxjmp write3write4:pop dxcmp dx,cxje write5mov ebx,dlinc ebxjmp write4write5:mov byte ptr ebx,0mov eax,offset writebufcall dispm

12、sgpop edx;恢复寄存器pop ecxpop ebxret;子程序返回writeendp习题5.10参考例5-6,编写实现32位无符号整数输入的子程序,并设计一个主程序验证。答: include io32.inc.datacount= 5arraydword count dup(0)tempdword ?;共享变量readbufbyte 30 dup(0).codestart:mov ecx,countmov ebx,offset arrayagain:call read;调用子程序,输入一个数据mov eax,temp;获得出口参数mov ebx,eax;存放到数据缓冲区add ebx

13、,4dec ecxjnz againexit 0readprocpush eaxpush ebxpush ecxpush edxread0:mov eax,offset readbufcall readmsgtest eax,eaxjz readerrcmp eax,10ja readerrmov edx,offset readbufxor ebx,ebxread1:mov al,edxread2:incedxcmp al,0jb readerrcmp al,9ja readerrsub al,30himul ebx,10jc readerrmovzx eax,aladd ebx,eaxcmp

14、 ebx,0ffffffffhjareaderrdec cxjnzread1jmpread5readerr:mov eax,offset errmsgcall dispmsgjmp read0;read5:mov temp,ebxpop edxpop ecxpop ebxpop eaxreterrmsgbyte Input error, enter again: ,0readendpend start习题5.11编写一个计算字节校验和的子程序。(所谓“校验和”是指不记进位的累加,常用于检查信息的正确性。)主程序提供入口参数,包括数据个数和数据缓冲区的首地址。子程序回送求和结果这个出口参数。答:

15、;计算字节校验和的通用过程;入口参数:DS:EBX数组的段地址:偏移地址ECX元素个数;出口参数:AL校验和;说明:除EAX/EBX/ECX外,不影响其他寄存器checksumprocxor al,al;累加器清0sum:add al,ebx;求和inc ebx;指向下一个字节loop sumretchecksumendp习题5.12编制3个子程序把一个32位二进制数用8位十六进制形式在屏幕上显示出来,分别运用如下3种参数传递方法,并配合3个主程序验证它。(1)采用EAX寄存器传递这个32位二进制数。(2)采用temp变量传递这个32位二进制数。(3)采用堆栈方法传递这个32位二进制数。答:(

16、1).codestart:mov eax, 1234abcdh;假设一个要显示的数据callBin2Hexexit 0Bin2Hexprocpushecxmov ecx,8;8位十六进制数again:rol eax,4;高4位循环移位进入低4位push eax;子程序利用AL返回结果,所以需要保存EAX中的数据call htoasc;调用子程序pop eax;恢复保存的数据loop againpopecxrethtoascproc;将AL低4位表达的一位十六进制数转换为ASCII码and al,0fh;只取AL的低4位or al,30h;AL高4位变成3,实现加30Hcmp al,39h;是0

17、9,还是AFjbe htoendadd al,7;是AF,其ASCII码再加上7htoend:calldispcret;子程序返回htoascendpBin2Hexendpend start习题5.13利用十六进制字节显示子程序DISPHB设计一个从低地址到高地址逐个字节显示某个主存区域内容的子程序DISPMEM。其入口参数:EAX主存偏移地址,ECX字节个数(主存区域的长度)。同时编写一个主程序进行验证。答:;数据段varbyte This is a test!;主程序mov eax,offset varmov ecx,sizeof varcall dispmem;子程序dispmempro

18、cpush ebxmov ebx,eaxdispm1:cmp ecx,0jz dispm2mov al,ebxcall disphb mov al, call dispcinc ebxdec ecxjmp dispm1dispm2:pop ebxretdispmemendp习题5.14数据输入输出程序。使用有符号十进制数据输入(例5-6)、求平均值(例5-7)以及输出子程序(例5-4),编程实现从键盘输入10个数据,并输出它们的平均值。(1)编写主程序文件:定义必要的变量和交互信息,调用子程序输入10个数据,求平均值然后输出。 (2)编写子程序文件:包括3个子程序的过程定义。(3)说明进行模块

19、连接的开发过程,并上机实现。(4)将子程序文件形成一个子程序库,说明开发过程并上机实现。答:.data; 数据定义count= 10arraydword count dup(0)tempdword ?;共享变量readbufbyte 30 dup(0)writebufbyte 12 dup(0);显示缓冲区.code; 主程序start:mov ecx,countmov ebx,offset arrayagain:call read;调用子程序,输入一个数据mov eax,temp;获得出口参数mov ebx,eax;存放到数据缓冲区add ebx,4dec ecxjnz againpush

20、lengthof array;压入数据个数push offset array;压数组的偏移地址call mean;调用求平均值子程序,出口参数:EAX平均值(整数部分)add esp,8;平衡堆栈(压入了8个字节数据)callwriteexit 0习题5.18编写一个宏swap,参数是两个32位寄存器或存储器操作数,宏定义体实现两个操作数位置交换,包括两个都是存储器操作数的情况。答:SWAP MACROop1,op2PUSHOP1PUSHOP2POPOP1POPOP2ENDM习题5.19定义一个使用逻辑指令的宏LOGICAL。(1)用它代表4条逻辑运算指令:AND/OR/XOR/TEST,可以

21、使用3个形式参数,并给出一个宏调用以及对应宏展开的例子。(2)必要时做一点修改,使该宏能够把NOT指令包括进去,给出一个使用NOT指令的宏调用以及对应宏展开的例子。答:(1)LOGICALMACROop,dst,srcopdst,srcENDMLOGICAL and,eax,1 00000000 83 E0 01 1andeax,1LOGICAL or,eax,1 00000003 83 C8 01 1oreax,1LOGICAL xor,eax,1 00000006 83 F0 01 1xoreax,1LOGICAL test,eax,1 00000009 A9 00000001 1test

22、eax,1(2)LOGICALMACROop,dst,srcIFB opdstELSEopdst,srcENDIFENDMLOGICAL not,eax 00000000 F7 D0 1noteax习题5.20有一个宏定义:Defstr macro name,num,stringName&numbyte&string&,0Endm给出如下宏调用的宏展开:(1)defstr msg,4,(2)defstr msg,5,答:Msg4 byte Chapter 4:Program Structure,0Msg5 byte Chapter 5:Procedure Programming,0习题5.21

23、定义一个宏“movestr strN,dstr,sstr”,它将strN个字符从一个字符区sstr传送到另一个字符区dstr。假设数据段定义如下缓冲区,请使用上述宏的调用实现STRING1到STRING2的传送。 String1 byte In a major matter,no detail are small.,0String2 byte sizeof string1 dup(0)答:movestr MACRO strN,dstr,sstrpushecxpushesipushedimovecx,strNleaesi,sstrleaedi,dstrcldrepmovsbpopedipopes

24、ipopecxENDM习题5.22利用重复汇编定义一个数据区,数据区有100个双字,每个双子的高字部分依次是2,4,6,.,200,低字部分都是0。答:num = 0REPEAT 100num = num +2word 0,numENDM习题5.23利用宏结构完成以下功能:如果名为count的数大于5,指令“ADD EAX,EAX”将汇编10次,否则什么也不汇编。答:IF count GT 5REPEAT 10ADDEAX,EAXENDMENDIF习题5.24用宏结构实现宏指令FINSUM,它比较两个数varx和vary,若varx=vary,则执行sum=varx+8*vary,否则执行sum=4*varx+vary。答:FINSUM MACRO varx,varyIF varx GE varysum = varx + 8 * varyELSEsum = 4*varx+varyENDIFENDM精选范本

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服