zoukankan      html  css  js  c++  java
  • int指令02 零基础入门学习汇编语言65

    第十三章:int指令02

     

    让编程改变世界

    Change the world by program


     

    对int、iret和栈的深入理解

     

    问题:用7ch中断例程完成 loop指令的功能。

    loop  s的执行需要两个信息:循环次数和到s的位移 所以,7ch中断例程要完成loop指令的功能,也需要这两个信息作为参数。 我们用cx存放循环次数,用bx存放位移。  

    应用举例:在屏幕中间显示80个‘!’。

      认识框架代码:相关代码下载   在上面的程序中,用int 7ch调用7ch中断例程进行转移,用 bx 传递转移的位移。

    分析,为了模拟loop指令,7ch中断例程应具备下面的功能:

    (1)dec cx (2)如果(cx)≠0,转到标号s 处执行,否则向下执行。  

    下面我们分析7ch中断例程如何实现到目的地址的转移:

    (1)转到标号s显然应设(CS)=标号s的段地址,(IP)=标号s的偏移地址; (2)那么,中断例程如何得到标号s的段地址和偏移地址呢? (3)现在知道,可以从栈中直接和间接地得到标号s的段地址和偏移地址,那么如何用它们设置CS:IP呢?   int 7ch引发中断过程后,进入 7ch 中断例程,在中断过程中,当前的标志寄存器、CS和IP都要压栈。   此时压入的CS和IP中的内容,分别是调用程序的段地址(可以认为是标号 s 的段地址)和int 7ch后一条指令的偏移地址(即标号se的偏移地址)。 可见,在中断例程中,可以从栈里取得标号s 的段地址和标号 se的偏移地址,而用标号se的偏移地址加上bx中存放的转移位移就可以得到标号s的偏移地址。 可以利用iret指令,我们将栈中的se的偏移地址加上 bx 中的转移位移,则栈中的se的偏移地址就变为了s的偏移地址。 我们再使用iret指令,用栈中的内容设置CS、IP,从而实现转移到标号s处。  

    7ch中断例程如下:

    lp:

    push bp

    mov bp,sp

    dec cx

    jcxz lpret

    add [bp+2],bx

    lpret:

    pop bp

    iret

     

    检测点13.1

      相关代码下载  

    BIOS和DOS中断例程的安装过程

    前边的课程中,我们都是自己编写中断例程,将他们放在安装程序中,然后通过运行安装程序,将他们安装到指定的内存区中。 此后,别的应用程序才可以调用。  

    BIOS和DOS提供的中断例程是如何安装到内存中的呢?

    我们下面讲解它们的安装过程。 (1) 开机后,CPU 一加电,初始化(CS)=0FFFFH,(IP)=0,自动从FFFF:0单元开始执行程序。FFFF:0处有一条转跳指令,CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序。 (2)初始化程序将建立BIOS 所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。 (3)硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导。从此将计算机交由操作系统控制。 (4)DOS 启动后,除完成其它工作外,还将它所提供的中断例程装入内存,并建立相应的中断向量。  

    检测点13.2

    [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LTAROXYTTXXG']视频下载[/Downlink]
  • 相关阅读:
    LeetCode Merge Two Sorted Lists 归并排序
    LeetCode Add Binary 两个二进制数相加
    LeetCode Climbing Stairs 爬楼梯
    034 Search for a Range 搜索范围
    033 Search in Rotated Sorted Array 搜索旋转排序数组
    032 Longest Valid Parentheses 最长有效括号
    031 Next Permutation 下一个排列
    030 Substring with Concatenation of All Words 与所有单词相关联的字串
    029 Divide Two Integers 两数相除
    028 Implement strStr() 实现 strStr()
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3846085.html
Copyright © 2011-2022 走看看