博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言:第九章 转移指令的原理
阅读量:5160 次
发布时间:2019-06-13

本文共 1507 字,大约阅读时间需要 5 分钟。

可以修改IP或者CS:IP的指令叫做转移指令.

只修改IP,称为段内转移如jmp ax,根据对IP修改的范围不同分为短转移和近转移,范围分别为-128到127和-32768到32767

同时修改CS和IP的指令称为段间转移,如jmp 1000:0

9.1 offset

offset 标号,用于取标号的偏移地址,如mov ax,offset start 相当于mov ax,0   start为代码段的标号

9.2 jmp指令

jmp是无条件转移指令,可以修改IP或者CS:IP都修改

jmp指令给出以下两种信息之一:

(1)转移目的地址

(2)转移位移

9.3 根据位移进行转移

jmp short 标号  表示段内短转移,8个字节长度表示位移量,因此可以表示范围是:向前转移128字节到向后转移127字节

      即 IP=IP+8位位移,8位位移=标号偏移地址 - jmp的下一条指令的偏移地址

jmp near ptr 标号   表示段内近转移,IP=IP+16位位移

这两种转移 在编译器编译后给出目标地址,但是机器码会给出位移地址

9.4 转移的目的地址在指令中

jmp far ptr 标号,实现段间转移也叫远转移,将标号的段地址和偏移地址放入CS:IP中

这种转移 编译器编译后给出目标地址,机器码也指定转移的目标地址

9.5 转移地址在jmp中

jmp 16位reg

IP = 16位reg值

9.6 转移地址在内存中

jmp word ptr 内存单元地址: 将内存单元处字单元作为IP的值

jmp dword ptr 内存单元地址: 将内存单元处第一个字单元作为IP值,第二个字单元作为CS值

 

检测点9.1

(1) 程序如下:

assume cs:code

data segment

?

data ends

code segment

start:

mov ax,data

mov ds,ax

mov bx,0

jmp word ptr [bx+1]

code ends

end start

要使jmp执行后CS:IP指向程度第一条指令,data中应该怎么填?

分析:  jmp word ptr [1] 就是把1地址字单元值放入IP,即让CS:IP指向CS:0,所以让1地址字单元值为0

     所以data里应该是db 0,0,0

 

(2)程序如下

assume cs:code

data segment

dd 12345678H

data ends

code segment

start:

mov ax,data

mov ds,ax

mov bx,0

mov [bx],

mov [bx+2],

jmp dword ptr ds:[0]

code ends

end start

补全程序使jmp执行后CS:IP指向程序第一条指令

分析: jmp dword ptr ds:[0] 表示让0地址字单元放入IP2地址字单元放入CS中

所以让0地址字单元变成0,2地址字单元变成CS,

所以: mov [bx],bx   此处不可以用 mov [bx],0 因为需要确定指令数据长度

      mov [bx+2],cs

(3)用Debug 查看内存,结果如下:

2000:1000 BE 00 06 00 00 00 .....

则此时,CPU执行指令

mov ax,2000H

mov es,ax

jmp dword ptr es:[1000H]

后 CS = 0006H,  IP = 00BEH

 

9.7

转载于:https://www.cnblogs.com/superzhao/p/4666781.html

你可能感兴趣的文章
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
ObjectiveC基础教程(第2版)
查看>>
centos 引导盘
查看>>
Notes of Daily Scrum Meeting(12.8)
查看>>
Apriori算法
查看>>
onlevelwasloaded的调用时机
查看>>
求出斐波那契数组
查看>>
lr_start_transaction/lr_end_transaction事物组合
查看>>
CodeIgniter学习笔记(四)——CI超级对象中的load装载器
查看>>
.NET CLR基本术语
查看>>
ubuntu的home目录下,Desktop等目录消失不见
查看>>
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
2017.3.24上午
查看>>