zoukankan      html  css  js  c++  java
  • 8086汇编 call 指令

    8086汇编 call 指令

    字面意思:调用子程序
    实质:流程转移指令,它们都修改IP,或同时修改CS和IP
    call指令实现转移的方法和 jmp 指令的原理相似
    格式:call 标号

    返回指令:ret、retf

    call 指令说明

    CPU执行call指令,进行两步操作:
      (1)将当前的 IP 或 CS和IP 压入栈中;
      (2)转移到标号处执行指令。

    call 标号:

    • 16位位移=“标号”处的地址-call指令后的第一个字节的地址;
    • 16位位移的范围为 -32768~32767,用补码表示;
    • 16位位移由编译程序在编译时算出。

    CPU执行“call far ptr 标号”时的操作:

      (1) (sp) = (sp) – 2
           ((ss) ×16+(sp)) = (CS)
           (sp) = (sp) – 2
                ((ss) ×16+(sp)) = (IP)
          (2) (CS) = 标号所在的段地址
                (IP) = 标号所在的偏移地址

    CPU执行“call near ptr 标号”时的操作:

    “call 标号”类似”jmp near ptr 标号”,对应的机器指令中为相对于当前IP的转移位移,而不是转移的目的地址,实现段内转移。指令“call far ptr 标号”实现的是段间转移!

    ret、retf

    使用案例

    1、案例模板

    说明:在程序走到call s时会直接跳转到 s: add ax, 1 这里列处理返回值ret以上指令当遇到ret后会返回到 mov ax, 4c00h 行接着往下执行。

    复制代码
        mov ax, 0
        ; 使用主程序 s
        call s
        mov ax, 4c00h
        int 21h
    ; 创建主程序s
    s: add ax, 1
        ; 返回
        ret
    复制代码
  • 相关阅读:
    FPGA学习之基本结构
    凸优化和机器学习
    第6篇如何访问pod
    吉日嘎拉DotNet.BusinessV4.2中的一处bug,及我的修复和扩展
    吉日嘎拉C#快速开发平台V4.0到V4.2升级记
    布隆过滤器简介及实现-----源自数学之美
    poj [1753]
    Zookeeper Hello World
    获取用户真实IP,php实现
    mysql中engine=innodb和engine=myisam的区别
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12494260.html
Copyright © 2011-2022 走看看