第4章_程序结构习题答案

第4章 程序结构
4.1 简答题
(1)CPUID指令返回识别字符串的首字符“G”在哪个寄存器中?
EBX的高8位
(2)数据的直接寻址和指令的直接寻址有什么区别?
数据的直接寻址给出数据所在的存储器地址,指令的直接寻址给出指令所在的存储器地址。
(3)是什么特点决定了目标地址的相对寻址方式应用最多?
指令代码中提供目标地址相对于当前指令指针寄存器EIP的位移量,使得同一个程序被操作系统安排在不同的存储区时,指令间的位移并没有变化的特点。
(4)Jcc指令能跳转到代码段之外吗?
不能,Jcc指令采用段内相对寻址方式
(5)什么是奇偶校验?
数据通信时,数据的某一位用做传输数据的奇偶校验位,数据中包括校验位在内的“1”的个数恒为奇数,就是奇校验;恒为偶数,就是偶校验
(6)助记符JZ和JE为什么表达同一条指令?
两个数相减,差值为0(JZ)与两个数相等(JE)是一个含义
(7)为什么判断无符号数大小和有符号大小的条件转移指令不同?
判断两个无符号数的大小和判断两个有符号数大小关系要利用不同的标志组合。
判断有符号数的大小需要组合SF和OF标志,并利用ZF标志确定相等与否。
判断无符号数的高低利用CF标志,利用ZF标志确定相等。
(8)双分支结构中两个分支体之间的JMP指令有什么作用?
用于跳过分支体2,避免进入分支体2而出现错误。
(9)如果循环体的代码量远超过128个字节,还能用LOOP指令实现计数控制循环吗?
不能,因为LOOP指令的目标地址采用相对短转移,只能在-128~+127字节之间循环
(10)什么是“先循环、后判断”循环结构?
指先执行循环体,然后判断是否继续循环的结构,这种结构通常至少执行一次循环体
4.2 判断题
(1)指令指针或者号包括代码段寄存器值的改变将引起程序流程的改变。
机器人避障问题(2)指令的相对寻址都是近转移。
(3)采用指令的寄存器间接寻址,目标地址来自存储单元。
(4)JMP指令对应高级语言的GOTO语句,所以不能使用
错,需要使用
(5)因为条件转移指令Jcc要利用标志作为条件, 所以也影响标志。
(6)JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。
错,JA针对无符号数,JG针对有符号数
(7)JC和JB的条件都是CF=1,所以是同一条指令。
对。无符号小于(JB)必然借位(JC)
(8)控制循环是否结束只能在一次循环结束之后进行
(9)介绍loop指令时,常说它相当于dec ecx和jnz两条指令。但是考虑对状态标志的影响,它们有差别。Loop指令不影响标志,而dec指令却影响除cf之外的其他状态标志。
(10)若ECX=0,则LOOP指令和JECX指令都发生转移。
4.3 填空题
(1)JMP指令根据目标地址的转移范围和寻址方式,可以分成4种类型:段内转移、
(  ),段内转移、(  )以及段间转移、(  ),段间转移、(  )。
相对寻址,间接寻址,直接寻址,间接寻址
(2)MASM给短转移、近转移和远转移定义的类型名依次是___、___和___。
SHORT,NEAR,FAR
(3)假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP=_______,执行指令“JMP TABLE[EBX]”后EIP=_______。
1256H,3280H
(4)“CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX=________,此时ZF=_______。
3721H,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指令,则可以使用指令“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)+var3
解答:
mov eax,var1
    mov ebx,6
    mul ebx    ;var1*6
    mov ebx,var2
    sub ebx,7    ;var2-7
    div ebx    ;(var1*6)/( var2-7)
    add eax,var3    ;(var1*6)/( var2-7)+var3
    mov var4,eax
习题4.5
已知var1、var2、var3和var4是32位有符号整数,用汇编语言程序片段实现如下C++语句:
    Var1=(var2*var3)/( var4+8)-47
解答:
Mov        eax,var2
Imul        var3
Mov        ebx,var4
Add        ebx,8
Idiv        ebx
Sub        eax,47
Mov        var1,eax
习题4.6
参看例4-1,假设N小于90000,这时求和结果只需要eax保存,edx为0。修改例4-1使其可以从键盘输入一个数值N(用readuid子程序),最后显示累加和(用dispuid子程序)。
解答:
.data
Msg    byte Input a number(0~90000):,0
.code
Start:
Mov    eax,offset msg
Call    readuid
钢水脱氧
Call    dispcrlf
Mov    ebx,eax
Add    ebx,1
Imul    ebx
Shr        edx,1
Rcr        eax,1
Call    dispuid
习题4.7
定义COUNT(假设为10)个元素的32位数组,输入元素编号(0~COUNT-1),利用DISPHD子程序输出其地址、利用DISPSID子程序输出其值。
解答:
        ;数据段
count    = 10
array    dword 0,1,2,3,4,5,6,7,8,9
        ;代码段
        call readuid    ;输入N,小于10
        lea eax,array[eax*4]    ;EAX=地址
        call disphd    ;显示地址
        mov eax,array[eax*4]    ;EAX=变量值
        call dispsid    ;显示数值
习题4.10
判断下列程序段跳转的条件
(1)xor ax,1e1eh
    Je equal
(2)test al,10000001b
    Jnz here
(3)cmp  cx,64h
      Jb  there
something的用法答:
(1)  zf= 1  (2)  zf= 0 (3) cf =1
江阴市卫生局习题4.11
假设EBX和ESI存放的是有符号数,EDX和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
Jg    greater
(3) cmp    ebx ,0
Je zero
(4) cmp ebx,esi
中成药抗生素
Jo    overflow
(5) cmp    esi,ebx
Jle    less_eq
(6) cmp    edi,edx
Jbe    below_eq

本文发布于:2024-09-24 18:16:06,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/230809.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指令   转移   地址   寻址
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议