zoukankan      html  css  js  c++  java
  • 【笔记】【汇编语言】第10章 CALL和RET指令

    10.0 概述
      call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被用来共同实现子程序的设计。
     
    10.1 ret和retf
      ret指令用栈中的数据,修改IP的内容,即相当于
      pop IP
      retf指令用栈中的数据,修改CS和IP的内容,即相当于
      pop IP
      pop CS
     
    10.2 call指令
      CPU执行call指令时,进行两步操作
      1) 将当前的IP或CS和IP压入栈中
      2) 转移
      call指令不能实现短转移,除此之外,call指令实现转移的方式与jmp指令的原理相同。
     
    10.3 依据位移进行转移的call指令
      call 标号 ;(将当前IP压栈,转到标号处开始执行)
      此操作相当于:
      push IP
      jmp near ptr 标号
     
    10.4 转移的目的地址在指令中的call指令
      call far ptr 标号 ;(实现段间转移)
      此操作相当于:
      push CS
      push IP
      jmp far ptr 标号
     
    10.5 转移地址在寄存器中的call指令
      call reg16
      相当于:
      push IP
      jmp reg16
     
    10.6 转移地址在内存中的call指令
      1) call word ptr 内存单元地址
      相当于:
      push IP
      jmp word ptr 内存单元地址;(段内转移)
      2) call dword ptr 内存单元地址
      相当于:
      push CS
      push IP
      jmp dword ptr 内存单元地址;(段间转移)
     
    10.7 call和ret的配合使用
      可以利用call和ret来实现子程序的机制。
     
    10.8 mul指令
      mul指令是乘法指令,使用时应注意:
      (1) 两个相乘的数:要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认放在AX中,另一个放在16位reg或内存字单元中。
      (2) 结果:如果是8位乘法,结果默认存放在AX中;如果是16位乘法,结果高位默认在DX中存放,低位在AX中存放。

    10.9 模块化程序设计
      call和ret指令共同支持了汇编语言编程中的模块化设计。
     
    10.10 参数和结果传递的问题
      用寄存器来存储参数和结果是最常用的方法。调用者将参数送入参数寄存器,从结果寄存器中取到返回值。子程序的读写动作正好相反。
     
    10.11 批量数据的传递
      对于批量数据,可以将批量数据存放到内存中,然后将它们所在的内存空间首地址放在寄存器中,传递给需要的子程序。
      对于具有批量数据的返回结果,也可以用此方法。
      注:除了用寄存器传递参数外,还可以使用栈传递参数。参见附注4
     
    10.12 寄存器冲突的问题
      编写子程序时,可先将子程序用到的寄存器入栈,过程结束后,再将这些寄存器出栈恢复。
     
    实验10 编写子程序
      1.显示字符串
      2.解决除法溢出的问题
      3.数值显示
     
    课程设计1
      略

  • 相关阅读:
    Ansible 简单使用
    修改Elasticsearch的settings
    Nginx ssl证书部署
    配置 Haproxy 防范 DDOS 攻击
    Sort命令使用
    Haproxy ssl 配置方式
    MySQL连接线程kill利器之pt-kill
    percona-toolkit工具包的安装和使用
    Centos7 禁止firewalld并使用iptables 作默认防火墙以及忘记root密码的处理方法
    pt-query-digest查询日志分析工具
  • 原文地址:https://www.cnblogs.com/AzikPhil/p/note_asm2_10.html
Copyright © 2011-2022 走看看