• 第十章.md


    第十章 call ret

    ret 与 retf

    ret 使用栈中的数据,修改 ip,进行程序跳转

    CPU执行ret时,进行以下步骤:

    1. (ip) = (ss * 16 + sp)
    2. (sp) = (sp) + 2

    retf 同ret,修改 ipcs

    1. (ip) = (ss * 16 + sp)
    2. (sp) = (sp) + 2
    3. (cs) = (ss * 16 + sp)
    4. (sp) = (sp) + 2

    call

    1567410682485

    1. call + 标号

      sp = sp -2
      ss*16+sp = ip
      ip = ip + 16位位移
      

      1567410897156

    2. call far ptr + 标号

      sp = sp - 2
      ss*16+sp = cs
      sp = sp -1
      ss*16 + sp = ip
      
      cs = 目的ds
      ip = 目的ip
      
    3. call + 16位寄存器

    4. call word ptr 内存单元地址

      push ip
      jmp word ptr 内存单元地址
      

      call dword ptr 内存单元地址

      push cs
      push ip
      jmp dword ptr 内存单元地址
      

      dword 双字型数据,32bits,可以同时保存cs与ip


    call与ret配合使用

    1567412538336


    mul指令

    位数 要操作的数据 结果
    8 × 8 al或内存单元 ax
    16 × 16 ax或内存单元 dx(高位)ax(低位)

    注意:只能是8 × 8 或 16 ×16


    批量数据返回

    当批量数据需要返回时,使用寄存器明显不现实,这时将批量数据存储到内存单元中,返回内存单元首地址即可。还可以使用栈进行参数传递

  • 相关阅读:
    python——数据库操作
    【笔试】T实习生2014 总结
    【JS】Intermediate6:jQuery
    【JS】Intermediate5:Scope
    【JS】Intermediate4:JSON
    【JS】Intermediate3:AJAX
    【JS】Intermediate2:Events and Callbacks
    【JS】Intermediate1:The DOM
    【JS】Beginner9:Arrays
    【JS】Beginner8:Objects
  • 原文地址:https://www.cnblogs.com/nsfoxer/p/14353813.html
Copyright © 2020-2023  润新知