收藏 分享(赏)

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

上传人:精品资料 文档编号:8322442 上传时间:2019-06-20 格式:DOC 页数:13 大小:107.50KB
下载 相关 举报
第5章_模块化程序设计.doc_第1页
第1页 / 共13页
第5章_模块化程序设计.doc_第2页
第2页 / 共13页
第5章_模块化程序设计.doc_第3页
第3页 / 共13页
第5章_模块化程序设计.doc_第4页
第4页 / 共13页
第5章_模块化程序设计.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

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 是一条处理器

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

4、要先定义后调用,一般在源程序开头部分。(9)重复汇编类似于宏汇编,需要先定义后调用。错。(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”编码表示,用十六进制表达是:_。如果将该编码加 37

5、H,则为_ ,它是字符_的 ASCII 码值。A,41H,A(5)利用堆栈传递子程序参数的方法是固定的,例如寻址堆栈段数据的寄存器是_。EBP(6)MASM 汇编语言中,声明一个共用的变量应使用_伪指令;而使用外部变量要使用_伪指令声明。PUBLIC,EXTERN(7)过程定义开始是“TEST PROC”语句,则过程定义结束的语句是_。宏定义开始是“DISP MACRO ”语句,则宏定义结束的语句是_。TEST ENDP,ENDM(8)一个宏定义开始语句“WriteChar MACRO CHAR:REQ”,则宏名是( ) ,参数有 ( ) 个,并且使用“:REQ ”说明该参数( ) 。Writ

6、eChar, 1 , 不可缺少(9)实现“byte 20 dup(20h)”语句的功能也可以使用重复汇编,第 1 个语句是( ) ,第2 个语句是“ byte 20h” ,第 3 个语句是( ) 。REPEAT 20, ENDM(10)条件汇编语言语句“IF NUM LT 100”中的 LT 表示( ) ,该语句需要配合( )语句结束条件汇编小于, ENDIF习题 5.4 如下子程序完成对 ECX 个元素的数组(由 EBX 指向其首地址)的求和,通过 EDX 和EAX 返回结果,但是程序有错误,请改正。Crazy procPusheaxXor eax,eaxXor edx,edxAgain:A

7、dd eax,ebxAdc edx,0Add ebx,4Loop againRetENDP Crazy答:Crazy procXor eax,eaxXor edx,edxAgain:Add eax,ebxAdc edx,0Add ebx,4Loop againRetCrazy ENDP 习题 5.5请按如下说明编写子程序:子程序功能:把用 ASCII 码表示的两位十进制数转换为压缩 BCD 码。入口参数:DH=十位数的 ASCII 码,DL=个位数的 ASCII 码出口参数:AL=对应的 BCD 码答:asc2bcd procshl dh,4and dl,0fhor dh,dlmov al,d

8、hretasc2bcd endp习题 5.6乘法的非压缩 BCD 码调整指令 AAM 执行的操作是:AHop dstELSEop dst,srcENDIFENDMLOGICAL not,eax00000000 F7 D0 1 not eax习题 5.20有一个宏定义:Defstr macro name,num,stringName&num byte &string&,0Endm给出如下宏调用的宏展开:(1)defstr msg,4,(2)defstr msg,5,答:Msg4 byte Chapter 4:Program Structure,0Msg5 byte Chapter 5:Proce

9、dure Programming,0习题 5.21定义一个宏“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,sstrpushecxpushesipushedimov ecx,strNlea esi,s

10、strlea edi,dstrcldrep movsbpop edipop esipop ecxENDM习题 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 10ADD EAX,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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报