第4章程序结构习题答案Word格式文档下载.docx
- 文档编号:16859348
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:16
- 大小:21.97KB
第4章程序结构习题答案Word格式文档下载.docx
《第4章程序结构习题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第4章程序结构习题答案Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
4.3填空题
(1)JMP指令根据目标地址的转移范围和寻址方式,可以分成4种类型:
段内转移、
(),段内转移、()以及段间转移、(),段间转移、()。
相对寻址,间接寻址,直接寻址,间接寻址
(2)MASM给短转移、近转移和远转移定义的类型名依次是___、___和___。
SHORT,NEAR,FAR
(3)假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMPEBX”后EIP=_______,执行指令“JMPTABLE[EBX]”后EIP=_______。
1256H,3280H
(4)“CMPEAX,3721H”指令之后是JZ指令,发生转移的条件是EAX=________,此时ZF=_______。
3721H,1
(5)执行“SHREBX,4”指令后,JNC发生转移,说明EBX的D3=_____。
(6)在EDX等于0时转移,可以使用指令“CMPEDX,____”、也可以使用“TESTEDX,_____”构成条件,然后使用JE指令实现转移。
0,EDX
(7)循环结构程序一般由三个部分组成,它们是()、循环体和()部分。
循环初始,循环控制
(8)JECXZ指令发生转移的条件是(),loop指令不发生转移的条件是()。
Ecx=0,ecx不等于0
(9)loop指令进行减1计数,实际应用中也常进行加1计数。
针对例4-14程序,如果删除其中的loop指令,则可以使用指令“cmp(),ecx”和“jb()”替代。
Ebx,jbagain
(10)小写字母“e”是英文当中出现频率最高的字母。
如果某个英文文档利用例4-16的异或方法进行简单加密,统计发现密文中字节数据“8FH”最多,则高程序采用的字节密码可能是()
0EAh
习题4.4
已知var1、var2、var3和var4是32位无符号整数,用汇编语言程序片段实现如下C++语句:
var4=(var1*6)/(var2-7)+var3
解答:
moveax,var1
movebx,6
mulebx;
var1*6
movebx,var2
subebx,7;
var2-7
divebx;
(var1*6)/(var2-7)
addeax,var3;
(var1*6)/(var2-7)+var3
movvar4,eax
习题4.5
已知var1、var2、var3和var4是32位有符号整数,用汇编语言程序片段实现如下C++语句:
Var1=(var2*var3)/(var4+8)-47
Moveax,var2
Imulvar3
Movebx,var4
Addebx,8
Idivebx
Subeax,47
Movvar1,eax
习题4.6
参看例4-1,假设N小于90000,这时求和结果只需要eax保存,edx为0。
修改例4-1使其可以从键盘输入一个数值N(用readuid子程序),最后显示累加和(用dispuid子程序)。
.data
Msgbyte‘Inputanumber(0~90000):
’,0
.code
Start:
Moveax,offsetmsg
Callreaduid
Calldispcrlf
Movebx,eax
Addebx,1
Imulebx
Shredx,1
Rcreax,1
Calldispuid
习题4.7
定义COUNT(假设为10)个元素的32位数组,输入元素编号(0~COUNT-1),利用DISPHD子程序输出其地址、利用DISPSID子程序输出其值。
;
数据段
count=10
arraydword0,1,2,3,4,5,6,7,8,9
代码段
callreaduid;
输入N,小于10
leaeax,array[eax*4];
EAX=地址
calldisphd;
显示地址
moveax,array[eax*4];
EAX=变量值
calldispsid;
显示数值
习题4.10
判断下列程序段跳转的条件
(1)xorax,1e1eh
Jeequal
(2)testal,10000001b
Jnzhere
(3)cmpcx,64h
Jbthere
答:
(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)cmpebx,edi
Jaabove
(2)cmpebx,esi
Jggreater
(3)cmpebx,0
Jezero
(4)cmpebx,esi
Jooverflow
(5)cmpesi,ebx
Jleless_eq
(6)cmpedi,edx
Jbebelow_eq
习题4.12
使用“shreax,2”将eax中的D1位移入CF标志,然后用JC/JNC指令替换JZ/JNZ指令完成例4-6程序的功能。
moveax,56h
Shreax,2
jncnom
moveax,offsetyes_msg
jmpdone
nom:
moveax,offsetno_msg
done:
calldispmsg
或
moveax,58h
jcyesm
moveax,offsetno_msg
jmpdone
yesm:
习题4.13
将例4-7程序修改为实现偶校验,并进一步增加显示有关提示信息的功能,使得程序具有更加良好的交互性.
答:
Msg1byte‘Pleaseinputachar:
”,0
Msg2byte‘Asciiis:
Msg3byte‘Partyis:
.code
start:
moveax,offsetmsg1
calldispmsg
callreadc
calldispcrlf
leaeax,msg2
calldispmsg
calldispbb
calldispcrlf
andal,7fh
jpnext
oral,80h
next:
pusheax
leaeax,msg3
calldispmsg3
popeax
calldispbb
exit0
endstart
习题4.14
在采用奇偶校验传输数据的接收端应该验证数据传输的正确性.例如,如果采用偶校验,那么在接受到的数据中,其包含“1”的个数应该为0或偶数个,否则说明出现传输错误。
现在,在接收端编写一个的程序,如果偶校验不正确显示错误信息,传输正确则继续。
假设传送字节数据、最高位作为校验位,接收到的数据已经保存在Rdata变量中。
Rdatabyte‘a’
Errmsgbyte‘DataError!
Testrdata,0
Jnperr
…
Err:
Leaeax,errmsg
Calldispmsg
习题4.15
IA-32处理器的指令CDQ将EAX符号扩展到EDX。
假若没有该指令,编程实现该指令功能。
(1)按照符号扩展的含义编程,即:
EAX最高为0,则EDX=0;
EAX最高为1,则EDX=FFFFFFFFH。
编程实现指令CDQ,将EAX符号扩展到EDX
(2)使用移位等指令进行优化编程。
(1)
testeax,8000h;
测试最高位
jznext1;
最高位为0,转移
movedx,0ffffffffh
最高位为1,设置EDX=FFFFFFFFH
jmpdone;
跳过另一个分支
next1:
movdx,0;
设置EDX=0
(2)
方法1:
movedx,eax
saredx,31
方法2:
roleax,1
rcredx,1
roreax,1
习题4.16
编写一个成旭,首先测试双字变量DVAR的最高位,如果为1,则显示字母“L”;
如果最高位不为1,则继续测试最低位,如果最低位为1则显示字母“R”,如果最低位也不为1,则显示字母“M”。
Dvardword80000000h
…
Testdvar,80000000h
JnzdispL
Testdvar,1
JzdispM
Moval,’R’
Jmpdisp
dispL:
moval,’L’
jmpdisp
dispM:
moval,’M’
disp:
calldispc
习题4.17
编写一个程序,先提示输入数字“InputNumber:
0~9”,然后在下一行显示输入的数字,结束;
如果不是键入了0~9数字,就提示错误“Error!
”,继续等待输入数字。
使用字符输入输出子程序
inmsgbyte'
Inputnumber(0~9):
'
0
ermsgbyte0dh,0ah,'
Error!
Inputagain:
moveax,offsetinmsg;
提示输入数字
again:
callreadc;
等待按键
cmpal,'
0'
;
数字<
0?
jberdisp
9'
数字>
9?
jaerdisp
calldispcrlf
calldispc
jmpdone
erdisp:
moveax,offsetermsg
jmpagain
使用数字输入输出子程序
callreaduid;
callreadsid
cmpeax,0;
jberdisp;
jlerdisp
cmpeax,9;
jaerdisp;
jgerdisp
calldispuid;
calldispsid
calldispmsg
jmpagain
习题4.18
有一个首地址为Array的20个双字的数据,说明下列程序段的功能。
Movecx,20
Moveax,0
Movesi,eax
Sum1p:
Addeax,array[esi]
Addesi,4
Loopsum1p
Movtotal,eax
累加Array数组,并将结果存入total变量
习题4.19
说明如下程序段的功能:
Movecx,16
Movbx,ax
Next:
Shrax,1
Rcredx,1
Shrbx,1
Loopnext
Moveax,edx
习题4.20
编程将一个64位数据逻辑左移3位,假设这个数据已经保存在EDX.EAX寄存器对中。
Movecx,3
shredx,1
Rcreax,1
Loopnext
习题4.21
编程中经常要记录某个字符出现的次数。
现编程记录某个字符串中空格出现的次数,结果保存在space单元。
spacedword0
stringbyte'
thisisateststring!
'
主程序
moveax,0
movebx,eax
movecx,lengthofstring
nextchar:
cmpstring[ebx],20h
jnznospace
inceax
nospace:
incebx
loopnextchar
movspace,eax
calldispuid
子程序
习题4.22
将一个已经按升序排列的数组(地1个元素最小,后面的逐个增大)改为按照降序排列。
编程实现该功能。
.data
数据定义
ArrayUpdword-1,0,2,3,20,23,36,100,2048
movecx,lengthofArrayUp
addecx,1
rcrecx,1
xoresi,esi
movedi,(lengthofArrayUp)-1
exchange:
moveax,ArrayUp[esi*TypeArrayUp]
xchgeax,ArrayUp[edi*TypeArrayUp]
xchgeax,ArrayUp[esi*typeArrayUp]
incesi
decedi
loopexchange
习题4.23
编写计算100个16位正整数之和的程序。
如果和不超过16位字的范围,则保存其和到wordsum,如果超过则显示“overflow!
”.
count=100
numwordcountdup(90)
wordsumword0
errmsgbyte'
Overflow!
xoreax,eax
movecx,count
sum:
addax,num[ebx]
jcover
loopsum
movwordsum,ax
calldispuiw
jmpquit
over:
moveax,offseterrmsg
quit:
习题4.27
在屏幕上显示ASCII表,现仅在数据段设置表格缓冲区,编程将ASCII代码值填入留出位置的表格,然后调用显示功能实现(需要利用双重循环)。
tablebyte'
|0123456789ABCDEF'
13,10
byte'
---+-------------------------------'
tab1byte6dup(36dup(?
),13,10)
byte0
movebx,offsettab1
movedx,'
|02'
movax,2020h
movesi,6
again0:
mov[ebx],edx
addebx,4
movecx,16
again1:
movwordptr[ebx],ax
addebx,2
incal
loopagain1
addebx,2
addedx,1
decesi
jnzagain0
moveax,offsettable
习题4.29素数判断程序
(1)采用直接简单的算法:
假设输入N,将其逐个除以2~N-1,只要能整除(余数为0)说明不是素数,只有都不能整除才是素数。
(2)采用只对奇数整除的算法:
1、2和3是素数,所有大于3的偶数不是素数,从5开始的数字只要除以从3开始的奇数,只有都不能整除才是素数。
提示:
排除4的情况,从3开始除,每次循环加2
(1)核心程序片段如下:
cmpeax,3
jbedoney;
小于等于3的都是素数
cdq
movesi,eax;
EDI.ESI=N>
3
movedi,edx
movebx,2;
EBX从2开始
divebx
testedx,edx
jzdonen
余数为0,能整除,不是素数
incebx
cmpebx,esi;
EBX到N-1结束
moveax,esi
movedx,edi
jbagain
movebx,3
……
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章程 结构 习题 答案