• 第十章 CALL和RET指令


    一、ret和retf

    ret:用栈中的数据修改IP的值,从而实现近转移。

    ret指令的两步操作:

    (IP)=((SS)*16+(SP));(SP)=(SP)+2。

    retf:用栈中的数据修改CS和IP的值,从而实现远转移。

    retf指令的四步操作:

    (IP)=((SS)*16+(SP));(SP)=(SP)+2;(CS)=((SS)*16+(SP));(SP)=(SP)+2。

    二、call指令

    两步操作:

    ①将当前的IP或CS和IP压入栈中。

    ②转移。

    call指令不能实现短转移。

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

    call  标号(将当前的IP压栈后,转移到标号处执行指令)(段内近转移)

    两步操作:(SP)=(SP)-2   ((SS)*16+(SP))=(IP);(IP)=(IP)+16位位移。

    call  标号=push IP 

                     jump  near ptr  标号

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

    call far ptr 标号(将当前的CS和IP压栈后,转移到标号处执行指令)(段间转移)

    四步操作:(SP)=(SP)-2   ;((SS)*16+(SP))=(CS);(SP)=(SP)-2   ;((SS)*16+(SP))=(IP)

    call far ptr 标号=push CS

                              push IP

                              jmp far ptr  标号

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

    call 16 位reg(16位寄存器)

    两步操作:(SP)=(SP)-2;((SS)*16+(SP))=(IP)=(16位reg)

    call  16位reg=push IP

                           jmp  16位reg

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

    call word ptr 内存单元地址

    call word ptr 内存单元地址=push IP

                                                 jmp word ptr 内存单元地址

    call dword ptr 内存单元地址

    call dword ptr 内存单元地址=push CS

                                                  push IP

                                                  jmp dword ptr 内存单元地址

    总结call格式:

    七、call和ret的配合使用(例题)

     

    八、mul指令

    ①两个数相乘:两个相乘的数必须都是8位或者都是16位。都是8位时:一个默认放在AL中,另一个放在8位reg或者内存字节单元;都是16位时:一个放在AX中,另一个放在16位reg或内存子单元中。

    ②结果:都是8位时:默认放在AX中;都是16位时:高位默认放在DX中存放,低位放在AX中。

    九、模块化程序设计(略)

    十、参数和结果传递的问题(例题)

     

    十一、批量数据的传送(例题)

     

    十二、寄存器冲突的问题

    寄存器用作参数传递时,由于寄存器个数有限,且有些寄存器在指令中有特殊用途,如cx在loop和jcxz指令中的"专用",al, ah, ax, dx在mul指令和div指令中的"专用"等。因此,在子程序和主程序中可能会出现寄存器使用冲突的问题,造成程序执行有误。

  • 相关阅读:
    html5+css3实现上拉和下拉刷新
    js求时间差
    screenX clientX pageX的区别
    HTML5实战与剖析之触摸事件(touchstart、touchmove和touchend)
    国内代码托管git-osc基础使用教程
    c# 实现获取汉字十六进制Unicode编码字符串
    C# 判断字符编码的六种方法
    UNICODE 区域对照表
    viewport
    Wingdings 2 符号编码对照表
  • 原文地址:https://www.cnblogs.com/Yangruzhang/p/10117576.html
Copyright © 2020-2023  润新知