汇编编译器(masm.exe)对jmp的相关处理
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(2n){background-color: #f8f8f8;}
|
s: :
:
:
jmp s ( jmp short s、jmp near ptr s、jmp far ptr s )
|
|
(1)如果disp ∈[128,127 ],则不管汇编指令格式是:
jmp s
jmp short s
jmp near ptr s
jmp far ptr s
中的哪一种,都将它转变为jmp short s 所对应的机器码。
jmp sbort s 所对应的机器码格式为:EB disp(占两个字节)
编译,连接以下程序,用Debug 进行反汇编查看。
assume cs : code
code segment
s: jmp s
jmp short s
jmp near ptr s
jmp far ptr s
code ends
end s
|
(2)如果disp∈[32765,32767],则:
对于jmp short s 将产生编译错误;
对于jmp s、jmp near ptr s 将产生 jmp near ptr s 所对应的机器码;
jmp near ptr s 所对应的机器码格式为;E9 disp (占3 个字节)
对于jmp far ptr s 将产生相应的编码;
jmp far ptr s 所对应的机器码格式为:EA 偏移地址 : 段地址(占5 个字节)
编译,连接以一下程序:
assume cs : code
code segment
s: db 100 dup (0b8h , 0 , 0 ) ; db 100 dup (0 , 0 , 0 )
;jmp short s ; 超过short能表示的8位范围
start:
jmp s
jmp near ptr s
jmp far ptr s
code ends
end s
编译中将产生错误,错误是由jmp short s 引起的,去掉jmp short s 后再编译就可通过。用Debug 进行反汇编查看。
|
//db 100 dup (0 , 0 , 0 )
| //100 dup (0b8h , 0 , 0 )
|
|
jmp s (jmp short s、jmp near ptr s、jmp far ptr s)
:
:
s: :
|
|
对于jmp short s ,编译器生成EB 和1 个nop 指令(相当于预留1 个字节的空间,存放8位disp );
对于jmp s 和jmp near ptr s ,编译器生成EB 和两个nop指令(相当于预留两个字节的空问,存放16 位disp ) ;
对十jmp far ptr s ,编译器生成EB 和4 个nop 指令(相当于预留4 个字节的空间,存放段地址和偏移地址)。
|
|
(1)当disp ∈[ –128 ,127]时,不管指令格式是:
jmp short s
jmp s
jmp near ptr s
jmp far ptr s
中的哪一种,都在前面记下的jmp … s 指令位置处添上jmp short s 对应的机器码(格式为:EB disp)。
注意:此时,对于jmp s 和jmp near ptr s 格式,在机器码EB disp后还有1 条nop 指令;对于jmp far ptr s 格式,在机器码 EB disp 后还有3 条nop 指令。
编译,连接以下程序,用Debug 进行反汇编查看。 assume cs : code
code segment
begin:
jmp short s
jmp s
jmp near ptr s
jmp far ptr s
s:
mov ax,0
code ends
end begin |
(2)当disp ∈[ –32768 ,32767]时,则:
对于jmp short s ,将产生编译错误;
对于jmp s 、jmp near ptr s ,在前面记下的jmp … s 指令位置处添上 jmp near ptr s 所对应的机器码(格式为:E9 disp)。
对于 jmp far ptr s 在前面记下的jmp … s 指令位置处添上对应的代码。
编译,连接以下程序:
assume cs : code
code segment
begin:
;jmp short s ; 超过short能表示的8位范围
jmp s
jmp near ptr s
jmp far ptr s
db 100 dup ( 0b8h , 0 , 0 )
s:
mov ax,2
code ends
end begin
在编译中将产生错误,错误是由jmp short s 引起的,去掉jmp short s 后再编译就可通过。用Debug 进行反汇编查看。
|
汇编编译器(masm.exe)对jmp的相关处理的更多相关文章
- Debug和汇编编译器masm对指令的不同处理
我们在Debug和源程序中写入同样形式的指令 : "mov al,[0]","mov bl,[1]","mov cl,[2]"," ...
- 工具分享1:文本编辑器EditPlus、汇编编译器masm、Dos盒子
工具已打包好,需要即下载 链接 https://pan.baidu.com/s/1dvMyvW 密码 mic4
- 解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析
许可证编译器 (Lc.exe) 的作用是读取包含授权信息的文本文件,并产生一个可作为资源嵌入到公用语言运行库可执行文件中的 .licenses 文件. 在使用第三方类库时,经常会看到它自带的演示程序中 ...
- REACTOS(193)与汇编编译器(69)的高人
REACTOS(193)与汇编编译器(69)的高人http://blog.csdn.net/caimouse ReactOS编译成VS工程1: 首先从https://www.reactos.org/w ...
- 16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS
;以下是16位汇编 创建静态库,并调用静态库中的函数 ;多文件汇编格式 ;编译方法(此处用的是masm 5.0,如果是其他的编译器,有可能不能编译) ;第一种,编译方法 ;1.masm main.as ...
- Win10(64位)安装汇编环境(MASM)
1:需要的文件 需要的安装包:这些百度都能下载找到 1).DOSBox 链接: 2) .MASM5.0 链接: 3).DEBUG 链接: 下面给出我们打包的环境 直接可用: (汇编我并不需要关注安装这 ...
- 预处理、编译、汇编、链接、启动代码、相关command
被忽略的过程 对于C这种编译性语言,我们平时编译时,不管是通过IDE图形界面,还是通过命令行,总感觉编译一下就完成了,然后就得到了针对某OS和某CPU的二进制可执行文件(机器指令的文件).但是实际上在 ...
- 在64位windows 7上安装汇编调试工具debug.exe的方法
最近我在研究汇编,书中介绍的调试工具还是基于WinXP 32bit时代中自带debug.exe进行调试,但是64bit的Windows XP.Vista.Win7.Win8都已经不自带这个工具了,网上 ...
- 深入探究VC —— 资源编译器rc.exe(3)
Windows应用程序中,图标.菜单.畏途.图标.工具条.对话框等是以资源的形式存在的.开发人员也可以自定义资源类型.如果一个程序使用了资源,那么它在构建时需要对资源进行编译.程序所使用的资源会在资源 ...
随机推荐
- Python玩转硬件:TPYBoard-Micropython开发板大盘点
学习python能做什么? 可以快速搭建一个漂亮的网站 可以写爬虫 实现微信机器人助手 可以实现很多自动化的任务 -- IEEE发布2017年编程语言排行榜:Python更是高居首位,那么Python ...
- Redis学习之一VMWare Pro虚拟机安装和Linux系统的安装
一.引言 设计模式写完了,相当于重新学了一遍,每次学习都会有不同的感受,对设计模式的理解又加深了,理解的更加透彻了.还差一篇关于设计模式的总结的文章了,写完这篇总结性的文章,设计模式的文章就暂时要告一 ...
- Java学习笔记3(数组)
1.数组的定义: 第一种: public class ArrayDemo{ public static void main(String[] args){ //定义数组 int [] arr = ne ...
- Appium 命令行模式下遇到的问题总结及解决方案 npm ERR! tar.unpack unzip(或者untar) error
安装了GUI Appium后,卸载删除问题后,使用命令行模式安装. 一. 遇到问题: nalideMacBook-Pro:~ nali$ npm install -g appium npm ERR! ...
- 【读书笔记】【深入理解ES6】#3-函数
函数形参的默认值 ES6中的默认参数值 function makeRequest(url, timeout = 2000, callback = function() {}) { } 可以为任意参数指 ...
- 记录:使用rpm安装JDK
从这个地址下载rpm文件http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.ht ...
- 微信跳一跳辅助Demo
[原创] 前几天没事干看别人一直在玩微信上线的那一个跳一跳小游戏,玩着玩着老是掉下去,闲着没事呗 就想了想做一个辅助程序的呗.不过先做的手动版的.自动版的有点麻烦.就不发了.用的Java写的,也就一个 ...
- 如何迭代输出某文件夹下的所有文件的路径?(os.walk用法)
查看目录结构: tree 查看文件结构: os.walk 查看os.walk用法: help(os.walk) For each directory in the directory tree roo ...
- centos 6 网卡名称修改
centos6 中网卡的名字有时不是eth0,这时就会带来诸多不便,为此需要修改网卡的名称. 修改网卡名称vim /etc/sysconfig/network-scripts/ifcfg-eno167 ...
- jQuery选择器ID、CLASS、标签获取对象值、属性、设置css样式
jQuery是继prototype之后又一个优秀的Javascrīpt框架.它是轻量级的js库(压缩后只有21k) , 它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safa ...