• 第九章 转移指令的原理 其一


    8086cpu的转移指令分为以下几类:

    无条件转移指令(如:jmp)

    条件转移指令

    循环指令

    过程

    中断

    9.1  操作符0ffset

    操作符offset在汇编语言中是由编译器处理的符号,他的功能是取得标号的偏移地址。

    9.2  jmp指令

    jmp为无条件转移,可以只修改ip,也可以同时修改cs和ip

    jmp指令给出两种信息:

    1.转移的目的地址

    2.转移的距离(段间距离、段内段转移,段内近转移)

    9.3依据位移进行转移的jmp指令

    jmp  short  标号(转到标号处执行指令)

    这种格式的jmp指令实现的是段内段转移,他对ip的修改范围为-128~127,也就是说,它向前转移时可以最多越过128个字节,向后转移可以最多越过127个字节。

    我们先来复习一下CPU执行指令的过程:

    1)从cs:ip指向内存单元读取指令,读取的指令进入指令缓冲区。

    2)(ip)=(ip)+所读取指令的长度,从而指向下一条指令。

    3)在指令缓冲区执行指令。转到1,重复这个过程。

    在jmp  short  指令所对应的机器码中,并不包含转移的目的地址,而包含的是转移的位移。

    这个位移,使编译器根据汇编指令中的标号计算出来的。

    实际上,指令jmp  short标号的功能为ip=ip+8位位移。

    1)8位位移=标号处的地址-jmp指令后的第一个字节的地址。

    2)short指明此处的位移为8位位移

    3)8位位移的范围为-128~127,用补码表示

    4)8位位移由编译程序在编译时算出。

    还有一种和指令jmp  short  标号功能相近的指令格式:

    jmp  near   ptr  标号

    它实现的是段内近转移。

    指令jmp  near  ptr  标号的功能为:

    ip=ip+16;

    指令jmp  near  ptr标号的说明:

    1)16位位移=标号处的地址-jmp指令后的第一个字节的地址。

    2)near  ptr指明此处的位移为16位位移,进行的是段内近转移。

    3)16位转移的范围为:-32768~32767,用补码表示。

    4)16位位移由编译器程序在编译时算出。

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

    前面讲的jmp指令,其对应的机器码中并没有转移的目的地址,而是相对于当前ip的转移位移。

    指令jmp  far  ptr  标号

    实现的是段间转移,又称为远转移。

    指令jmp  far   ptr  标号功能如下:

    cs=标号所在段的段地址

    ip=标号所在段中的偏移地址

    far  ptr  指明了指令用标号的段地址和偏移地址修改cs和ip

    9.5  转移地址在寄存器中的jmp指令

    指令格式:jmp16位寄存器

    功能:ip=(16位寄存器)

     

    9.6转移地址在内存中的jmp指令

    转移地址在内存中的jmp指令有两种格式:

    1)jmp  word  ptr 内存单元地址(段内转移)

    功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址。

    内存单元地址可用寻址方式的任一格式给出

    示例:

    mov  ax,0123h

    mov ds:[0],ax

    jmp  word ptr  ds:[0]

    执行后,ip=0123h

    mov ax,0123h

    mov [bx],ax

    jmp word ptr  [bx]

    执行后,ip=0123h

    转移地址在内存中的jmp指令的第二种格式:

    2)jmp  dword  ptr   内存单元地址(段间转移)

    功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处的是转移的目的偏移地址。

    cs=(内存单元地址+2)

    ip=(内存单元地址)

    示例:

    mov ax,0123h

    mov ds:[0],ax

    mov word ptr  ds:[2],0

    jmp dword ptr ds:[0]

    执行后,

    cs=0

    ip=0123h

    cs:ip指向0000:0123

    mov  ax,0123h

    mov [bx],ax

    mov word ptr [bx+2],0

    jmp dword ptr [bx]

    执行后:

    cs=0

    ip=0123h

    cs:ip指向0000:0123

  • 相关阅读:
    logstash日志分析的配置和使用
    实现跨浏览器html5表单验证
    CSS常见居中讨论
    centos7 初始化脚本
    elasticsearch+logstash+redis+kibana 实时分析nginx日志
    centos7 系统优化
    cAdvisor+InfluxDB+Grafana 监控Docker
    Docker三剑客之Docker Swarm
    Docker三剑客之常用命令
    Docker三剑客之Docker Compose
  • 原文地址:https://www.cnblogs.com/fate-/p/12942382.html
Copyright © 2020-2023  润新知