码迷,mamicode.com
首页 > 其他好文 > 详细

8086汇编 call 指令

时间:2020-03-14 21:40:50      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:copy   位移   目的   案例   pre   方法   inf   toolbar   das   

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
技术图片

 

8086汇编 call 指令

标签:copy   位移   目的   案例   pre   方法   inf   toolbar   das   

原文地址:https://www.cnblogs.com/liujunjun/p/12494260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!