• 8086 汇编笔记(八):转移指令的原理


    一、操作符 offset

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

    1. codesg segment
    2. start: mov ax,offset start ;相当于 mv ax,0
    3. s: mov ax,offset s ;相当于 mv ax,3
    4. codesg ends
    5. end start

    二、jmp 指令

    jmp为无条件转移指令,可以只修改IP,也可以同时修改CS和IP

    jmp指令要给出两种信息:

    (1)转移的目的地址
    (2)转移的距离(段间转移、段内短转移、段内近转移) 

    三、依据位移进行转移的 jmp 指令

    主要用于在同一代码段内进行较短距离的跳转(不超过127字节)

    jmp short 标号    ;(IP) = (IP) + 8 位位移
    1. codesg segment
    2. start: mov ax,0
    3. jmp short s
    4. add ax,1
    5. s: inc ax
    6. codesg ends
    7. end start

    直接跳转到了 s 处,略过了 add ax,1  

    16 位位移的范围为 -32768~32767 

    jmp near ptr 标号    ;(IP) = (IP) + 16 位位移

    四、转移的目的地址在指令中的 jmp 指令 

    jmp far ptr 标号

    实现的是段间转移,又称为远转移。功能如下:

    (CS)=标号所在段的段地址;(IP)=标号所在段中的偏移地址。

    far ptr 指明了指令用标号的段地址和偏移地址修改CS和IP。

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

    jmp 16 位的 reg

    功能:(IP) = (16 位 reg) 

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

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

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

    1. mov ax,0123H
    2. mov ds:[0],ax
    3. jmp word ptr ds:[0] ;IP = 0123H
    4. mov ax,0123H
    5. mov [bx],ax
    6. jmp word ptr [bx] ;IP = 0123H
    jmp dword ptr 内存单元地址(段间转移)

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

    1. mov ax,0123H
    2. mov ds:[0],ax
    3. mov word ptr ds:[2],0
    4. jmp dword ptr ds:[0] ;(CS)=0,(IP)=0123H,CS:IP 指向 0000:0123

    七、jcxz 指令

    jcxz 标号

    功能:如果(cx)=0,则转移到标号处执行。如果(cx)≠ 0,则程序继续向下执行 

    八、loop 指令

    loop 标号

    功能:(cx)=(cx)-1,如果(cx)≠ 0,则转移到标号处执行 

  • 相关阅读:
    UAT 深入指南(用户验收测试)
    Swift学习内容精选(一)
    OSPF高等特性——Forwarding Address
    Centos7安装jdk8以及mysql5.7以及Navicat连接虚拟机mysql的出错以及解决方法(附mysql下载出错解决办法)
    现在健身耳机哪个牌子好、2023年最好的健身房耳机推荐
    STM32 CAN过滤器标识符学习笔记
    swift 天气
    JAVA基础——day06
    Win10, vscode 调试go代码时,安装dlv失败
    【reverse IDA使用技巧】IDA动态调试Linux_ELF配置+例题:SCUCTF新生赛2021-DebugMe
  • 原文地址:https://blog.csdn.net/2302_82189125/article/details/139411368