8086汇编复习4 - int指令 - 使用emu8086

int指令
    中断信息可以来自CPU的内部和外部;int指令引发的中断是内中断;

    int n,n为中断类型码;
    CPU执行int n指令,相当于引发一个n号中断的中断过程;执行过程如下:
    1)取中断类型码n;
    2)标志寄存器入栈,IF=0, TF=0;
    3)CS、IP入栈;
    4)n*4赋值给IP寄存器;(n*4+2)赋值给CS寄存器;
    从此处转去执行n号中断的中断处理程序;

mov ax, 0b800h
mov es, ax
mov byte ptr es:[12*160 + 40 * 2], '!'
int 0
    此程序在Win2000中的DOS方式下执行,将在屏幕中间显示一个惊叹号,然后显示"Divide overflow"后返回到系统中。
    程序并没有做除法;CPU执行int 0指令,引发中断,执行0号中断处理程序,系统的0号中断处理程序的功能是显示"Divide overflow",然后返回到系统;
    int和call指令类似,都是调用一段程序;

    在emu8086中,int 0 中断例程位于仿真内存F4170处;程序执行完,自己弹出仿真屏幕,显示一个惊叹号;

    在系统板的ROM中存放着一套程序;称为BIOS;BIOS主要包含:
    1)硬件系统的检测和初始化程序;
    2)外部中断和内部中断的中断例程;
    3)用于对硬件设备进行I/O操作的中断例程;
    4)其他和硬件系统相关的中断例程;

    DOS操作系统也提供了中断例程,DOS的中断例程就是操作系统向程序员提供的编程资源;

    int 10h中断例程是BIOS提供的中断例程;其中包含了多个和屏幕输出相关的子程序;

    int 10h设置光标位置;
mov ah, 2    ;置光标
mov bh, 0   ;第0页
mov dh, 5   ;dh中放行号
mov dl, 12  ;dl中放列号
int 10h

    ah内容为2,后面再int 10h,就调用10h号中断例程的2号子程序;后面是参数;
    设置光标到第0页,第5行,第12列;

    在内存地址空间中,B8000H - BFFFFH 共32kB的空间,为80*25彩色字符模式的显示缓冲区;
    显示缓冲区分为8页;每页4KB,4000B;一般情况下,显示第0页内容,B8000H - B8F9FH的4000个字节;

    在emu8086中,int 10h 中断例程位于仿真内存F4190处;
    程序运行完,手动弹出仿真屏幕,看不到有内容;

    下面尝试在显示缓冲区手动输入内容;5行12列,要设置的位置大概在B8000后60个字节,即B803C处;在B803C手动输入99;原来它的仿真屏幕是即时处理的;手动修改了,马上自动弹出仿真屏幕,显示修改的内容;99的ASCII码大概是一个问号;在屏幕显示一个问号;


    


 

发布了475 篇原创文章 · 获赞 545 · 访问量 304万+

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/104603136
今日推荐