开发日记-20190915 关键词 汇编语言王爽版 第九章
第九章 转移指令的原理
可以修改IP或同事修改CS和IP和指令统称为转移指令.概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令.
8086CPU的转移行为有以下几类:
- 只修改IP时,称为段内转移,比如:jmp ax
- 同时修改CS和IP时,称为段内转移,比如:jmp: 1000:0
由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移
- 短转移IP的修改范围为-128~127
- 近转移IP的修改范围为-32768~32767
8086CPU的转移指令分为以下几类
- 无条件转移指令
- 条件转移指令
- 循环指令
- 过程
- 中断
9.1 操作符offset
操作符offset在汇编语言中是由编译器处理的符号,他的功能是取得标号的偏移地址.比如下面的程序:
assume cs:codeseg
codeseg segmentstart: mov ax,offset st arts:mov ax,offset s
codesg ends
end start
9.2 jump指令
jmp为无条件转移指令,可以只修改IP,也可以同时修改CS和IP
jmp指令要给出两种信息:
- 转移的目的地址
- 转移的距离(段间转移,段内短转移,段内近转移)
不同的给出的目的地址的方法,和不同的转移位置,对应有不同格式的jmp指令.
9.3 根据位移进行转移的jmp指令
jmp short 标号(转到标号处执行指令)
这种格式的jmp指令实现的是段内短转移,他对IP的修改范围为-128~127,也就说,它向前转移是可以最多越过128个字节,向后转移可以最多越过127个字节.jmp指令中的"short"符号,说明指令进行的是短转移.jmp指令中的"标号"是代码段中的标号,指明了指令要转移的目的地,转移指令结束后,CS:IP应该指向标号处的指令.
比如:
程序9.1
assume cs:codeseg
codeseg segment
start: mov ax,0jmp short sadd ax,1
s: inc axcodeseg ends
end start
CPU在执行jmp指令的时候并不需要转移目的地址.两个程序中的jmp指令的转移地址并不一样,一个是cs:0008,另一个是cs:000B,如果机器指令中包含了转移的目的地址的话,那么他们对应的机器码应该是不同的.可是他们对应的机器码都是EB03,这说明在机器指令中并不包含转移的目的地址.如果机器指令中不包含目的地址的话,那么也就是说,CPU不需要这个目的地址就可以实现对IP的修改.
CPU不是神仙,他只能处理你提供给他的东西,jmp指令的机器码中不包含转移的目的地址,那么,CPU如何知道将IP改为多少呢?所以,在jmp指令的机器码中,一定包含了某种信息,使得CPU可以将它当作修改IP的依据.
很简单,只需要知道两个指令所在段地址的差值即可!而EB03就是将IP平移3个字节的意思.
还有一种和"jmp short标号"功能相近的指令格式,jmp near ptr标号,它实现的是段内近转移.
"jmp near ptr标号"的功能为:(IP)=(IP)+16位位移
开发日记-20190915 关键词 汇编语言王爽版 第九章相关推荐
- 开发日记-20190915 关键词 汇编语言王爽版 第十一章
第十一章 标志寄存器 CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同)具有以下三种作用. (1)用来存储相关的指令的某些执行结果 (2)用来为CPU执行相关的指令提供 ...
- 开发日记-20190915 关键词 汇编语言王爽版 第十章
第十章 CALL和RET指令 call 和ret指令都是转移指令,他们都修改IP,或同时修改CS和IP.他们经常被共同用来实现子程序的设计. 10.1 ret和retf ret指令用栈中的数据,修改I ...
- 开发日记-20190915 关键词 汇编语言王爽版 第十三章
第十二章 内中断 任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部传送过来或内部产生的一种特殊信息,并且可以立即对所接收的信息进行处理.这种特 ...
- 开发日记-20190915 关键词 汇编语言王爽版 第十二章
第十二章 内中断 任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部传送过来或内部产生的一种特殊信息,并且可以立即对所接收的信息进行处理.这种特 ...
- 开发日记-20190913 关键词 汇编语言王爽版 第一章
Preface 最近手机坏了,感觉心里挺不是滋味的,在各种方面,特别是钱!直到今天,我才知道钱真的是一种很重要的东西,以及苹果公司到底有多恶心. 真的很奇怪,为什么世界上就没有任何一家公司能和苹果公司 ...
- 开发日记-20190914 关键词 汇编语言王爽版 第二章
第二章 寄存器 一个典型的CPU由运算器,控制器,寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连.前一章所说的总线,相对于CPU内部来说是外部总线.内部中心实现CPU内部各个器件之间的联系 ...
- 开发日记-20190914 关键词 汇编语言王爽版 第四章
第四章 第一个程序 4.1 一个源程序从写出到执行的过程 第一步:编写汇编源程序 使用文本编辑器,用汇编语言编写汇编源程序 这一步工作的结果是产生一个储存源程序的文本文件. 第二步:对源程序进行编译程 ...
- 开发日记-20190914 关键词 汇编语言王爽版 第七章第八章
第七章 更灵活的定位内存地址的方法 7.1 and和or指令 (1)and指令:逻辑与指令,按位进行与运算 (2)or指令:逻辑或指令,按位进行或运算 7.2 关于ASCII码 一个文本编辑过程中,就 ...
- 开发日记-20190914 关键词 汇编语言王爽版 第六章
第六章 包含多个段的程序 前面的程序中,只有一个代码段.现在有一个问题是,如果程序需要用其他空间来存放数据,使用哪里呢?在第五章中,我们说0:200~0:2FF是相对安全的,可这段空间的容量只有256 ...
最新文章
- cordova入门——cordova环境配置
- Rectangle Area
- Windows程序闪退Windows日志捕获Kernelbase模块错误
- 【Pytorch神经网络理论篇】 23 对抗神经网络:概述流程 + WGAN模型 + WGAN-gp模型 + 条件GAN + WGAN-div + W散度
- python消息中间件activemq_消息中间件ActiveMQ和JMS基础
- 1438. 绝对差不超过限制的最长连续子数组
- 8、技术分析fastJson使用
- 《机器学习Python实践》第6章——数据理解
- access通过身份证号提取性别_从身份证号码中提取出生年月,性别等都不掌握,那就真的Out了...
- 手机电脑投屏软件_手机投屏电脑,电脑控制手机,推荐这款良心免费的软件
- 3.3 神策数据分析平台
- 医院his系统机房服务器,医院 HIS系统建设项目 硬件部署方案.docx
- 功能测试Ⅲ——缺陷及缺陷管理
- Java模拟Http请求封装工具类
- Redis 微博微信场景使用案例
- LTSPICE使用教程:入门指导
- Prometheus 告警配置以及抑制规则inhibit_rules 说明
- 半加器 全加器 Verilog描述
- 记录使用Elasticsearch报错:FORBIDDEN/12/index read-only / allow delete (api)];]; nested exception is Elasti
- 为什么点开桌面计算机那这么慢,电脑桌面刷新反应很慢怎么办?电脑桌面刷新很慢解决方法...
热门文章
- strings 命令——ELF文件格式与“链接和装载”
- gdb coredump
- nginx 常见参数以及重定向参数配置
- 电子班牌系统服务器,电子班牌管理系统
- aho-corasick php,GitHub - coralh/php-akm: Ahocorasick keyword match. Supports php7 and php5
- c# mysql 触发器 实时,C#-.Net SqlDataAdapter和SQL Server中的触发器
- linux注册硬盘中断,基于Linux底层硬盘中断辅助代码的分析与设计
- linux mysql5.7.11安装_centos 7 安装mysql 5.7.11
- 华为正式发布鸿蒙智慧屏,华为正式发布鸿蒙OS操作系统 智慧屏将率先使用
- 论述Linux文件系统,linux文件系统概述