【汇编】控制转移指令

文章目录

一、无条件转移指令 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 带符号数(-128~127),无符号数(0~255)

三、循环指令

类型

  • 循环指令 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 指令执行完,标志位由堆栈中取出的值确定
相关推荐
星迹日1 小时前
数据结构:包装类和泛型
java·开发语言·数据结构·笔记·泛型·通配符·包装类
一只码代码的章鱼2 小时前
计算机网络 笔记 第一章
笔记·计算机网络
矮油0_o7 小时前
30天开发操作系统 第 12 天 -- 定时器
c语言·汇编·算法·操作系统
libra69567 小时前
esp32开发笔记之一:esp32开发环境搭建vscode+ubuntu
笔记·vscode·ubuntu
Chrikk7 小时前
NCCL学习笔记-概念全解
笔记·学习
三次元1117 小时前
JS中函数基础知识之查漏补缺(写给小白的学习笔记)
开发语言·前端·javascript·笔记·ecmascript·原型模式
Pandaconda8 小时前
【Golang 面试题】每日 3 题(二十二)
开发语言·笔记·后端·面试·golang·go·channel
Jackilina_Stone11 小时前
【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 第五章 自然语言处理原理与应用(2 自然语言处理关键技术) | 学习笔记
人工智能·笔记·学习·自然语言处理·hcip·huawei
垂杨有暮鸦⊙_⊙11 小时前
2024年6月英语六级CET6听力原文与解析
笔记·学习·六级
油炸自行车12 小时前
【阅读】认知觉醒
笔记·阅读·读书