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

    第十三章:int指令03

     

    让编程改变世界

    Change the world by program


     

    BIOS中断例程应用

      下面我们举几个例子,来看一下BIOS中断例程的应用。 int 10h中断例程是BIOS提供的中断例程,其中包含了多个和屏幕输出相关的子程序。   一般来说,一个供程序员调用的中断例程中往往包括多个子程序,中断例程内部用传递进来的参数来决定执行哪个子程序。 BIOS 和 DOS 提供的中断例程,都用ah来传递内部子程序的编号。   我们看一下int 10h中断例程的设置光标位置功能。

    mov ah,2

    mov bh,0

    mov dh,5

    mov dl,12

    int 10h

    (ah)=2表示调用第 10h号中断例程的 2号子程序,功能为设置光标位置,可以提供光标所在的行号(80*25字符模式下:0~24)、列号(80*25字符模式下:0~79),和页号作为参数。 (bh)=0,(dh)=5,(dl)=12,设置光标到第0页,第5行,第12列。  

    记忆点滴

      bh中页号的含义:内存地址空间中,B8000h~BFFFFh共 32K的空间,为80*25 彩色字符模式的显示缓冲区。 一屏的内容在显示缓冲区中共占4000个字节。 也就是说,通常情况下,B8000~B8F9F中的4000个字节的内容将出现在显示器上。 一般情况下,显示第 0 页的内容。 再看一下int 10h中断例程的在光标位置显示字符功能。

    mov ah,9 ;置光标

    mov al,‘a’ ;字符

    mov bl,7 ;颜色属性

    mov bh,0 ;第0页

    mov cx,3 ;字符重复个数

    int 10h

    (ah)=9 表示调用第10h号中断例程的9号子程序 功能为在光标位置显示字符,可以提供要显示的字符、颜色属性、页号、字符重复个数作为参数。   (bh)中的颜色属性格式如下: [caption id="attachment_406" align="aligncenter" width="300"] (bh)中的颜色属性格式[/caption]   可以看出,和显存中的属性字节的格式相同。  

    课堂练习

      编程:在屏幕的5行12列显示3个红底高亮闪烁绿色的‘a’。 注意:闪烁的效果必须在全屏DOS 方式下才能看到。   程序源码:相关代码下载    

    DOS中断例程应用

    int 21h 中断例程是DOS提供的中断例程,其中包含了DOS提供给程序员在编程时调用的子程序。   我们从前一直使用的是 int 21中断例程的4ch号功能,即程序返回功能,如下:

    mov ah,4ch ;程序返回

    mov al,0 ;返回值

    int 21h

    (ah)=4ch表示调用第21h号中断例程的 4ch号子程序,功能为程序返回,可以提供返回值作为参数。   我们前面使用这个功能的时候经常写作:

    mov ax,4c00h

    int 21h

      我们看一下int 21h中断例程的在光标位置显示字符串的功能:

    ds:dx指向字符串    ;要显示的字符串需用“$”作为结束符

    mov ah ,9                ;功能号9,表示在光标位置显示字符串

    int 21h

    (ah)=9 表示调用第21h号中断例程的 9号子程序,功能为在光标位置显示字符串,可以提供要显示字符串的地址作为参数。  

    编程:在屏幕的5列12行显示字符串“I love Fishc.com!”

    上述程序在屏幕的5列12行显示字符串“I love Fishc.com!”,直到遇见“$”(“$” 本身并不显示,只起到边界的作用)。   程序源码:相关代码下载   如果字符串比较长,遇到行尾,程序会自动转到下一行开头处继续显示;如果到了最后一行,还能自动上卷一行。 DOS为程序员提供了许多可以调用的子程序,都包含在 int 21h 中断例程中。 我们这里只对原理进行了讲解,对于DOS提供的所有可调用子程序的情况,读者可以参考相关的书籍。  

    实验13 编写、应用中断程序亲各位亲测。

      程序源码:相关代码下载 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LLLJHACVMMJE']视频下载[/Downlink]
  • 相关阅读:
    树的直径 poj 2631
    hdu 3954 Level up(线段树)
    [Java Web]Struts2解决中文乱码问题
    怎样为virtualbox添加新的分辨率
    本人的cocos2d-x之路
    php 中利用json_encode和json_decode传递包括特殊字符的数据
    【设计模式】—— 创建者模式Builder
    【设计模式】——工厂方法FactoryMethod
    【Apache开源软件基金会项目】
    【设计模式】——抽象工厂Abstract Factory
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3846086.html
Copyright © 2011-2022 走看看