• 汇编语言:第九章 转移指令的原理


    可以修改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

  • 相关阅读:
    搭建springCloud网关zuul
    springboot添加https
    SpringBoot上传文件,经过spingCloud-Zuul,中文文件名乱码解决办法
    springboot mongodb jpa常用方法整理
    springboot拦截中自动注入的组件为null问题解决方法
    springboot JPA mysql
    转载Spring Data JPA 指南——整理自官方参考文档
    springboot带有进度条的上传
    HTTP请求示例
    http的N种请求
  • 原文地址:https://www.cnblogs.com/superzhao/p/4666781.html
Copyright © 2020-2023  润新知