欢迎来到天天文库
浏览记录
ID:15725462
大小:33.00 KB
页数:4页
时间:2018-08-05
《汇编语言学习笔记9》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、转移指令的原理刚开始的时候就学了转移指令,例如jmpbx。现在就系统的学习一下。首先转移分为短转移和近转移,短转移修改ip的范围是-128--127近转移的范围--32768--32767.这说的是段内转移的情况,而按照专一的类型又分为:无条件转移(jmp转移)条件转移指令循环指令中断等。首先认识一个操作符offset这是一个由编译器处理的符号,它能够取得标号处的偏移地址。例如以下程序assumecs:codecodesegmentstart:MOVax,offsetstarts:MOVax,offsetscodeendsENDstartoffset分别取得
2、了start和s的偏移地址0和3movax,offsetstart相当于指令movax,0start是代码段中的标号,呵呵由于offset取得的是偏移地址而不是短地址所以就是0了呗,同理解释sjmp转移指令应用到程序中jmpshort标号(转到标号处执行指令)由于有short这个转移是短转移,例如下面的程序。assumecs:codecodesegmentstart:MOVax,0JMPshortsADDax,1s:INCaxMOVax,4c00hint21hcodeendsENDstart由debug看出我们直接执行了incax而没有执行addax,1由此
3、可知转移成功。。其实就是改变了IP的内容,来进行转移。当然我们使用的jmp指令不仅能在标号处进行转移,以前我们也是用debug进行过jmp寄存器的操作。这就是进行-32768--32766(16)的转移了,另外我们还可以在内从中进行转移,例如下边的指令movax,0123hmovds:[0],axjmpwordptrds:[0]我们看出了此几条语句中我们用到了段超越前缀,单位操作符ptrjcxz指令有条件转移,所有的有条件转移都是短转移,指令格式jcxz标号转移的条件是cx==0档cx不为零时继续向下执行程序举例利用jcxz指令,实现在内存2000h段中查找
4、第一个值为零的字节,找到后将他的偏移地址存到dx中。程序如下assumecs:codecodesegmentstart:MOVax,2000hMOVds,axMOVbx,0MOVch,0s:MOVal,byteptr[bx]MOVcl,aljcxzokINCbxJMPshortsok:MOVdx,bxMOVax,4c00hint21hcodeendsENDstart呵呵本课结束了,敬请期待续集,精彩内容更在http://sela365.com/space.php?do=blog&view=me
此文档下载收益归作者所有