【汇编】控制转移指令

文章目录

一、无条件转移指令 JMP

无条件跳转指令JMP跳转至地址 CS:[IP]

段内寻址只修改IP,段间寻址既修改IP也修改CS

  • 段内直接短转移
    • 格式JMP SHORT OPR
    • 执行操作(IP) ← (IP)+8位位移量
  • 段内直接近转移
    • 格式JMP NEAR PTR OPR
    • 执行操作(IP) ← (IP)+16位位移量
  • 段内间接转移
    • 格式JMP WORD PTR OPR
    • 执行操作(IP) ← (EA)
  • 段间直接远转移
    • 格式JMP FAR PTR OPR
    • 执行操作(IP) ← OPR的段内偏移地址(CS) ← OPR所在段的段地址
  • 段间间接转移
    • 格式JMP DWORD PTR OPR
    • 执行操作(IP) ← (EA)(CS) ← (EA+2)

二、条件转移指令

只能使用段内直接寻址的8位位移量

  1. 根据单个条件标志的设置情况转移

  2. 比较两个无符号数,根据比较结果转移

    适用于地址双精度数低位字的比较

  3. 比较两个带符号数,根据比较结果转移

    适用于带符号数的比较

举例 :n=8 bit 带符号数(-128127),无符号数(0255)

三、循环指令

类型

  • 循环指令 LOOP

    LOOP OPR

    测试条件:(CX)≠0

  • 为零/相等时循环指令 LOOPZ/LOOPE

    LOOPZ(LOOPE) OPR

    测试条件:ZF=1 且 (CX)≠0

  • 不为零/不相等时循环指令 LOOPNZ/LOOPNE

    LOOPNZ(LOOPNE) OPR

    测试条件:ZF=0 且 (CX)≠0

执行的操作

  1. (CX) ← (CX)-1CX中存放循环次数
  2. 检查是否满足测试条件
    如满足则:(IP) ← (IP)+8位位移量,实行循环
    不满足则: IP 不变,退出循环

只能使用段内直接寻址的8位位移量

四、子程序调用返回指令

(一)调用指令 CALL

(1)段内近调用

  • 格式CALL DST

  • 执行操作

    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (IP)
    (IP) ← (IP)+16位位移量

(2)段内间接近调用

  • 格式CALL DST

  • 执行操作

    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (IP)
    (IP) ← (EA)

(3)段间直接远调用

  • 格式CALL DST

  • 执行操作

    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (CS)
    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (IP)
    (IP) ← 偏移地址
    (CS) ← 段地址

(4)段间间接远调用

  • 格式CALL DST

  • 执行操作

    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (CS)
    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (IP)
    (IP) ← (EA)
    (CS) ← (EA+2)

(二)返回指令 RET

(1)段内近返回

  • 格式RET

  • 执行操作

    (IP) ← ((SP)+1,(SP))
    (SP) ← (SP)+2

(2)段内带立即数近返回

  • 格式RET EXP

(3)段间远返回

  • 格式RET

  • 执行操作

    (IP) ← ((SP)+1,(SP))
    (SP) ← (SP)+2
    (CS) ← ((SP)+1,(SP))
    (SP) ← (SP)+2

(4)段间带立即数远返回

  • 格式RET EXP

五、中断与中断返回指令

(一)中断指令 INT & INTO

(1)中断指令 INT

  • 格式INT TYPEINT

  • 执行操作

    (SP) ← (SP-2)
    ((SP)+1,(SP)) ← (FLAGS)
    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (CS)
    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (IP)
    (IP) ← (TYPE*4)
    (CS) ← (TYPE*4+2)

(2)溢出中断指令 INTO

  • 格式INTO

  • 执行操作

    若 OF=1(即溢出)

    (SP) ← (SP-2)
    ((SP)+1,(SP)) ← (FLAGS)
    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (CS)
    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (IP)
    (IP) ← (10H)
    (CS) ← (12H)

(二)中断返回指令 IRET

  • 格式INTO

  • 执行操作

    (IP)←((SP)+1,(SP))
    (SP)←(SP)+2
    (CS)←((SP)+1,(SP))
    (SP)←(SP)+2
    (FLAGS)←((SP)+1,(SP))
    (SP)←(SP)+2

注意

  • TYPE(0~255)是中断类型号,隐含的类型号为 3
  • INT 指令还把 IF 和 TF 置 0,但不影响其它标志位
  • IRET 指令执行完,标志位由堆栈中取出的值确定
相关推荐
GlueNa2SiO38 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
Capricorn198810 小时前
解决全网抄 Karpathy 导致的 LLM Wiki 污染?基于知芽 Notebook Skill 的 raw/ 笔记法排障指南
大数据·论文阅读·人工智能·笔记·论文笔记
壹玖玖肆10 小时前
openGauss使用笔记
笔记
宵时待雨10 小时前
linux笔记归纳17:传输层协议UDP
linux·笔记·udp
噜~噜~噜~12 小时前
操作系统笔记-2.3.2.1 进程互斥的软件实现方法
笔记·操作系统
云贝教育-郑老师12 小时前
【麒麟服务器系统交付:一个DBA的六年信创实战笔记】
服务器·笔记·dba
玖玥拾13 小时前
LeetCode 392 判断子序列
笔记·算法·leetcode
摇滚侠14 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 15
java·spring boot·笔记
摇滚侠14 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 14
spring boot·笔记·后端
陈年老古董17 小时前
OpenCV图像处理笔记:图像拼接、答题卡识别与目标提取
人工智能·笔记·python·opencv·计算机视觉