zoukankan      html  css  js  c++  java
  • 第九章 转移指令的原理 其一

    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

  • 相关阅读:
    第八章 多线程编程
    Linked List Cycle II
    Swap Nodes in Pairs
    Container With Most Water
    Best Time to Buy and Sell Stock III
    Best Time to Buy and Sell Stock II
    Linked List Cycle
    4Sum
    3Sum
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/fate-/p/12942382.html
Copyright © 2011-2022 走看看