上海新建设建筑设计有限公司网站,网站开发是什么意思啊,简书 wordpress 搭建,哈尔滨网站建设收费4.6 offset指令#xff0c;jmp short指令#xff0c;far#xff0c;dword ptr各种跳转指令
可以修改IP#xff0c;或同时修改CS和IP的指令统称为转移指令。概括的讲#xff0c;转移指令就是可以控制CPU执行内存中某处代码的指令
1. 转移指令
1.1 8086CPU的转移行为有以…4.6 offset指令jmp short指令fardword ptr各种跳转指令
可以修改IP或同时修改CS和IP的指令统称为转移指令。概括的讲转移指令就是可以控制CPU执行内存中某处代码的指令
1. 转移指令
1.1 8086CPU的转移行为有以下几类
只修改IP时称为段内转移比如jmp ax同时修改CS和IP时称为段间转移比如jmp 1000:0
1.2 段内转移又分为短转移和近转移
短转移IP的修改范围为-128-~127近转移IP的修改范围为-32768~32767
1.3 8086CPU的转移指令分为以下几类
无条件转移指令如jmp条件转移指令循环指令如loop过程中断
2. jmp short指令
jmp short 标号转到标号处执行指令这种格式的jmp指令实现的是段内短转移它对IP的修改范围为-128~127个字节转移指令结束后CSIP应该指向标号处的指令这里jmp存的不是目标地址而是位移距离
assume cs:codesg
codesg segmentstart:mov ax,0jmp short sadd ax,1s:inc axcodesg ends
end start3. jmp far ptr指令
当超出jmp short 范围时编译会报错 此时使用jmp far ptr指令即可
assume cs:codesg
codesg segmentstart:mov ax,0mov bx,0inc cxjmp far ptr sdb 256 dup(0)s:inc axcodesg ends
end start注意此时jmp记录的不是偏移量而是整个地址因为位移太大不好计算直接记录cs:ip地址 4. 转换地址在内存中的jmp指令有两种格式
4.1 jmp word ptr 内存单元地址段内转移
功能从内存单元地址处开始存放着一个字是转移的目的偏移地址就是把指定内存单元的地址的数据拿过来作为跳转的地址例如
assume cs:codesg
codesg segmentstart:mov ax,0123hmov ds:[0],ax jmp word ptr ds:[0] //ds为段地址[0]处的数据为偏移地址将ip改为该地址codesg ends
end start4.2 jmp dword ptr 内存单元地址段间转移
如果要csip同时更改可以用这个功能从内存单元地址处开始存放着两个字高地址处的字是转移的目的段地址低地址处是转移的目的偏移地址cs 内存单元地址 2ip 内存单元地址
assume cs:codesg
codesg segmentstart:mov ax,0123hmov ds:[0],ax //把ax的值赋给该地址的内存数据mov word ptr ds:[2],0 //把该地址处的内存数据改为0000jmp dword ptr ds:[0] //跳转到cs:ip即0000:0123这个位置codesg ends
end startcs为内存地址2即ds:[2]0000ip为内存地址即ds:[0]0123
5. jcxz指令 cx为0就跳转
6. 操作符offset指令
操作符offset在汇编语言中是由编译器处理的符号它的功能是取得标号的偏移地址
assume cs:codesg
codesg segmentstart:mov ax,offset startmov dx,offset ss:mov bx,cxinc bxcodesg ends
end startstart 标号是0所以offset取出start的偏移地址赋给axs 标号是6所以offset取出s的偏移地址赋给dx