书签 分享 收藏 举报 版权申诉 / 11
上传文档赚钱

类型第4章-程序结构习题答案.docx

  • 上传人(卖家):最好的沉淀
  • 文档编号:5947985
  • 上传时间:2023-05-17
  • 格式:DOCX
  • 页数:11
  • 大小:24.21KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第4章-程序结构习题答案.docx》由用户(最好的沉淀)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    程序结构 习题 答案
    资源描述:

    1、4.1 简答题第 4 章 程序结构(1) CPUID 指令返回识别字符串的首字符“G”在哪个寄存器中?EBX 的高 8 位(2) 数据的直接寻址和指令的直接寻址有什么区别?数据的直接寻址给出数据所在的存储器地址,指令的直接寻址给出指令所在的存储器地址。(3) 是什么特点决定了目标地址的相对寻址方式应用最多?指令代码中提供目标地址相对于当前指令指针寄存器EIP 的位移量,使得同一个程序被操作系统安排在不同的存储区时,指令间的位移并没有变化的特点。(4) Jcc 指令能跳转到代码段之外吗? 不能,Jcc 指令采用段内相对寻址方式(5) 什么是奇偶校验?数据通信时,数据的某一位用做传输数据的奇偶校验

    2、位,数据中包括校验位在内的“1” 的个数恒为奇数,就是奇校验;恒为偶数,就是偶校验(6) 助记符JZ 和JE 为什么表达同一条指令?两个数相减,差值为 0(JZ)与两个数相等(JE)是一个含义(7) 为什么判断无符号数大小和有符号大小的条件转移指令不同?判断两个无符号数的大小和判断两个有符号数大小关系要利用不同的标志组合。判断有符号数的大小需要组合SF 和 OF 标志,并利用ZF 标志确定相等与否。判断无符号数的高低利用CF 标志,利用ZF 标志确定相等。(8) 双分支结构中两个分支体之间的JMP 指令有什么作用? 用于跳过分支体 2,避免进入分支体 2 而出现错误。(9) 如果循环体的代码量

    3、远超过128 个字节,还能用 LOOP 指令实现计数控制循环吗?不能,因为 LOOP 指令的目标地址采用相对短转移,只能在128127 字节之间循环(10) 什么是“先循环、后判断”循环结构?指先执行循环体,然后判断是否继续循环的结构,这种结构通常至少执行一次循环体4.2 判断题(1) 指令指针或者号包括代码段寄存器值的改变将引起程序流程的改变。对(2) 指令的相对寻址都是近转移。对(3) 采用指令的寄存器间接寻址,目标地址来自存储单元。错,(4) JMP 指令对应高级语言的GOTO 语句,所以不能使用错,需要使用(5) 因为条件转移指令Jcc 要利用标志作为条件, 所以也影响标志。错(6)

    4、JA 和JG 指令的条件都是“大于”,所以是同一个指令的两个助记符。错,JA 针对无符号数,JG 针对有符号数(7) JC 和 JB 的条件都是CF1,所以是同一条指令。对。无符号小于(JB)必然借位(JC)(8) 控制循环是否结束只能在一次循环结束之后进行错(9) 介绍 loop 指令时,常说它相当于 dec ecx 和 jnz 两条指令。但是考虑对状态标志的影响,它们有差别。Loop 指令不影响标志,而 dec 指令却影响除 cf 之外的其他状态标志。对(10) 若 ECX0,则 LOOP 指令和 JECX 指令都发生转移。对4.3 填空题(1) JMP 指令根据目标地址的转移范围和寻址方

    5、式,可以分成4 种类型:段内转移、(),段内转移、()以及段间转移、(),段间转移、()。相对寻址,间接寻址,直接寻址,间接寻址(2) MASM 给短转移、近转移和远转移定义的类型名依次是 、 和 。SHORT,NEAR,FAR(3) 假设在平展存储模型下,EBX1256H,双字变量 TABLE 的偏移地址是 20A1H, 线性地址 32F7H 处存放 3280H,执行指令“JMP EBX” 后 EIP ,执行指令“JMP TABLEEBX”后 EIP 。1256H,3280H(4) “CMP EAX,3721H”指令之后是 JZ 指令,发生转移的条件是 EAX , 此时 ZF 。3721H,

    6、1(5) 执行“SHR EBX,4”指令后,JNC 发生转移,说明 EBX 的 D3 。0(6) 在 EDX 等于 0 时转移,可以使用指令“CMP EDX, ”、也可以使用“TEST EDX, ”构成条件,然后使用 JE 指令实现转移。0,EDX(7) 循环结构程序一般由三个部分组成,它们是( )、循环体和 ()部分。循环初始,循环控制(8) JECXZ 指令发生转移的条件是( ),loop 指令不发生转移的条件是( )。Ecx=0, ecx 不等于 0(9) loop 指令进行减 1 计数,实际应用中也常进行加1 计数。针对例4-14 程序,如果删除其中的 loop 指令,则可以使用指令“

    7、cmp( ),ecx”和“jb ( ) ”替代。Ebx, jb again(10) 小写字母“e”是英文当中出现频率最高的字母。如果某个英文文档利用例4-16 的异或方法进行简单加密, 统计发现密文中字节数据“8FH”最多, 则高程序采用的字节密码可能是( )0EAh习题 4.4已知 var1、var2、var3 和 var4 是 32 位无符号整数,用汇编语言程序片段实现如下C+语句:解答:var4=(var1*6)/( var2-7)+var3mov eax,var1 mov ebx,6mul ebx ;var1*6mov ebx,var2 sub ebx,7 ;var2-7div ebx

    8、;(var1*6)/( var2-7)add eax,var3 ;(var1*6)/( var2-7)+var3 mov var4,eax习题 4.5已知 var1、var2、var3 和 var4 是 32 位有符号整数,用汇编语言程序片段实现如下C+语句:解答:Mov Imul Mov Add Idiv SubMovVar1=(var2*var3)/( var4+8)-47eax,var2 var3 ebx,var4 ebx,8 ebx eax,47var1,eax习题 4.6参看例 4-1,假设 N 小于 90000,这时求和结果只需要 eax 保存,edx 为 0。修改例 4-1 使其

    9、可以从键盘输入一个数值 N(用 readuid 子程序),最后显示累加和(用dispuid 子程序)。解答:.dataMsg byte Input a number(090000):,0.code Start:Moveax,offset msg Call readuidCall dispcrlf Movebx,eax Add ebx,1 ImulebxShredx,1Rcreax,1 Call dispuid习题 4.7定义 COUNT(假设为 10)个元素的 32 位数组,输入元素编号(0COUNT-1),利用 DISPHD 子程序输出其地址、利用 DISPSID 子程序输出其值。解答:;数

    10、据段count= 10arraydword 0,1,2,3,4,5,6,7,8,9;代码段call readuid;输入 N,小于 10习题 4.10lea eax,arrayeax*4;EAX地址call disphd;显示地址mov eax,arrayeax*4;EAX变量值call dispsid;显示数值判断下列程序段跳转的条件(1)xor ax,1e1eh Je equal(2)test al,10000001b Jnz here(3)cmpcx,64hJbthere答:(1)zf= 1(2)zf= 0 (3) cf =1习题 4.11假设 EBX 和 ESI 存放的是有符号数,ED

    11、X 和 EDI 存放的是无符号数,请用比较指令和条件转移指令实现以下判断:(1) 若 EDX EDI ,转到 above 执行(2) 若 EBX ESI ,转到 greater 执行(3) 若 EBX = 0 ,转到 zero 执行(4) 若 EBX - ESI 产生溢出 ,转到 overflow 执行(5) 若 ESI = EBX ,转到 less_eq 执行(6) 若 EDI= EDX ,转到 below_eq 执行答:(1) cmp ebx,edi Ja above(2) cmp ebx,esi Jggreater(3) cmp ebx ,0 Je zero(4) cmp ebx,esi

    12、 Jooverflow(5) cmp esi,ebx Jle less_eq(6) cmp edi,edx Jbe below_eq习题 4.12使用“shr eax,2”将 eax 中的 D1 位移入 CF 标志,然后用 JC /JNC 指令替换 JZ /JNZ 指令完成例 4-6 程序的功能。答:mov eax,56h Shr eax,2 jnc nommov eax,offset yes_msg jmp donenom:mov eax,offset no_msg done:call dispmsg或mov eax,58hShr eax,2 jc yesmmov eax,offset no

    13、_msg jmp doneyesm:mov eax,offset yes_msg done:call dispmsg习题 4.13将例 4-7 程序修改为实现偶校验,并进一步增加显示有关提示信息的功能,使得程序具有更加良好的交互性.答:.dataMsg1byte Please input a char:”,0 Msg2byte Ascii is :,0Msg3byte Party is :,0.code start:mov eax,offset msg1 call dispmsgcall readc call dispcrlflea eax,msg2 calldispmsg call disp

    14、bbcall dispcrlf and al,7fh jp nextor al,80h next:pusheaxlea eax,msg3 call dispmsg3 pop eaxcall dispbb exit 0end start习题 4.14在采用奇偶校验传输数据的接收端应该验证数据传输的正确性 .例如,如果采用偶校验,那么在接受到的数据中,其包含“1”的个数应该为 0 或偶数个, 否则说明出现传输错误。现在,在接收端编写一个的程序,如果偶校验不正确显示错误信息,传输正确则继续。假设传送字节数据、最高位作为校验位,接收到的数据已经保存在Rdata 变量中。答:.dataRdatabyte

    15、 aErrmsgbyte Data Error!,0.code Start:Test rdata,0 Jnp errErr:Lea eax,errmsg Call dispmsg习题 4.15IA-32 处理器的指令 CDQ 将 EAX 符号扩展到 EDX。假若没有该指令,编程实现该指令功能。(1) 按照符号扩展的含义编程,即:EAX 最高为 0,则 EDX0;EAX 最高为 1,则EDXFFFFFFFFH。编程实现指令 CDQ,将 EAX 符号扩展到 EDX(2) 使用移位等指令进行优化编程。答: (1)test eax,8000h ;测试最高位jz next1 ;最高位为 0,转移mov

    16、edx,0ffffffffh;最高位为 1,设置 EDXFFFFFFFFH jmp done ;跳过另一个分支next1:mov dx,0 ;设置 EDX0 done:(2)方法 1:mov edx,eax sar edx,31方法 2:rol eax,1 rcr edx,1 sar edx,31 ror eax,1习题 4.16编写一个成旭,首先测试双字变量DVAR 的最高位,如果为1,则显示字母“L”;如果最高位不为 1,则继续测试最低位,如果最低位为 1 则显示字母“R”,如果最低位也不为 1,则显示字母“M”。答:.dataDvardword 80000000h.codeTestdva

    17、r,80000000hJnzdispLTestdvar,1JzdispM Moval,RJmp disp dispL:mov al,L jmpdispdispM:mov al,Mdisp:calldispc习题 4.17编写一个程序,先提示输入数字“Input Number:09”,然后在下一行显示输入的数字,结束;如果不是键入了 09 数字,就提示错误“Error!”,继续等待输入数字。方法 1:使用字符输入输出子程序;数据段inmsgbyte Input number(09): ,0ermsgbyte 0dh,0ah,Error! Input again: ,0;代码段mov eax,of

    18、fset inmsg;提示输入数字call dispmsg方法 1:使用字符输入输出子程序again:call readc ;等待按键cmp al,0 ;数字 9? ja erdispcall dispcrlf call dispc jmp doneerdisp:mov eax,offset ermsg call dispmsgjmp again done:方法 2:使用数字输入输出子程序again:call readuid;call readsid cmp eax,0;数字 9? ja erdisp ;jg erdispcall dispuid;call dispsid jmp donemo

    19、v eax,offset ermsg call dispmsgjmp again有一个首地址为 Array 的 20 个双字的数据,说明下列程序段的功能。Movecx,20 Moveax,0 Movesi,eax Sum1p:Add eax,arrayesi Add esi,4Loopsum1p Movtotal,eax 答:累加 Array 数组,并将结果存入 total 变量习题 4.19说明如下程序段的功能:Movecx,16 Movbx,axNext:Shr ax,1 Rcr edx,1 Shr bx,1 Rcr edx,1Loopnext Moveax,edx答:习题 4.20编程将

    20、一个 64 位数据逻辑左移 3 位,假设这个数据已经保存在 EDX.EAX 寄存器对中。答:Movecx,3Next:shr edx,1 Rcr eax,1Loopnext习题 4.21编程中经常要记录某个字符出现的次数。现编程记录某个字符串中空格出现的次数,结果保存在 space 单元。答:spacedword0stringbyte this is a test string !.code start:; 主程序mov eax,0 mov ebx,eaxmov ecx,lengthof string nextchar:cmp stringebx,20h jnz nospaceinc eax

    21、nospace:inc ebxloop nextchar mov space,eax call dispuid exit 0; 子程序end start习题 4.22将一个已经按升序排列的数组(地 1 个元素最小,后面的逐个增大)改为按照降序排列。编程实现该功能。答:.data; 数据定义ArrayUp dword-1,0,2,3,20,23,36,100,2048.code start:; 主程序movecx,lengthof ArrayUp addecx,1rcrecx,1xoresi,esimovedi,(lengthof ArrayUp) -1 exchange:moveax,Arra

    22、yUpesi* Type ArrayUp xchgeax,ArrayUpedi* Type ArrayUp xchgeax,ArrayUpesi* type ArrayUpinc esi dec ediloop exchangeexit 0; 子程序end start习题 4.23编写计算 100 个 16 位正整数之和的程序。如果和不超过 16 位字的范围,则保存其和到wordsum,如果超过则显示“overflow !”.答:.datacount = 100num wordcount dup(90) wordsum word0errmsgbyte Overflow!; 数据定义.code

    23、start:sum:; 主程序xor eax,eax mov ebx,eax mov ecx,countadd ax,numebx jcoverinc ebxinc ebx loop summov wordsum,ax call dispuiw jmp quitover:mov eax,offset errmsg call dispmsgquit:exit 0; 子程序end start习题 4.27在屏幕上显示 ASCII 表,现仅在数据段设置表格缓冲区,编程将 ASCII 代码值填入留出位置的表格,然后调用显示功能实现(需要利用双重循环)。答:tablebyte |0 1 2 3 4 5

    24、6 7 8 9 A B C D E F,13,10byte -+,13,10tab1 byte 6 dup(36 dup(?),13,10)byte 0 mov ebx,offset tab1mov edx,| 02mov ax,2020h mov esi,6again0:mov ebx,edxadd ebx,4 mov ecx,16again1:mov word ptr ebx,axadd ebx,2 inc alloop again1add ebx,2add edx,1 dec esi jnz again0mov eax,offset table call dispmsg习题 4.29 素

    25、数判断程序(1) 采用直接简单的算法:假设输入N,将其逐个除以 2N-1,只要能整除(余数为0)说明不是素数,只有都不能整除才是素数。(2) 采用只对奇数整除的算法:1、2 和 3 是素数,所有大于 3 的偶数不是素数,从 5开始的数字只要除以从 3 开始的奇数,只有都不能整除才是素数。提示:排除 4 的情况,从 3 开始除,每次循环加 2答:(1)核心程序片段如下:cmp eax,3jbe doney;小于等于 3 的都是素数cdqmov esi,eax;EDI.ESI=N3 mov edi,edxmov ebx,2;EBX 从 2 开始again:div ebxtest edx,edx jz donen;余数为 0,能整除,不是素数inc ebxcmp ebx,esi;EBX 到 N-1 结束mov eax,esimov edx,edi jb again(2)mov ebx,3add ebx,2

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第4章-程序结构习题答案.docx
    链接地址:https://www.163wenku.com/p-5947985.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库