汇编语言-第13章

第十三章 int指令
*int n引发n号中断过程,执行过程如下:
(1)取得中断类型码n
(2)pushf,TF=0,IF=0
(3)push cs,push ip
(4)(cs)=(0000:(4n+2)),(ip)=(0000:(4n))
*用int 7ch实现loop指令功能的分析
(1)loop实现的是指令跳转,属于短转移,即位移量在-128~127之间;同时,需要获得cx以确定循环次数;通过判断cx是否为0来决定是否执行跳转。
(2)cx值可从调用程序中获得;7ch中断例程依据判断cx=0?来确定跳转,可以想到用jmp指令实现(?未深入细想)或者按书上用iret,修改栈顶元素的值,使其指向跳转目的偏移地址即可。
(3)实现如下:
;参数cx:循环次数,bx:跳转位移量
loopint:
       push bp
       dec cx
       jcxz loopintend
       mov bp,sp
       add [bp+2],bx
loopintend:
       pop bp
       iret
为什么要选用bp,为什么不能直接add ss:[sp+2],bx?,这是一个疑惑。

*基本输入输出系统(BIOS)
BIOS存放于ROM中,主要包括:
(1)硬件系统的检测和初始化程序
(2)外部中断和内部中断的例程
(3)用于对硬件设备进行I/O操作的中断例程
(4)其他和硬件系统相关的中断例程

*BIOS和DOS提供的中断例程安装过程:
(1)开机CPU加电,初始化cs=0ffffh,ip=0;0ffff:0000处有一条跳转指令,转去执行BIOS中的硬件系统检测和初始化程序;
(2)初始化程序建立BIOS所支持的中断向量,即在中断向量表中登记BIOS提供的中断例程的入口地址;BIOS的中断例程固化在ROM中无需安装;
(3)硬件系统检测和初始化完成后,调用int 19h引导操作系统,从而将计算机交由操作系统控制;
(4)DOS启动后,安装其提供的中断例程,并登记例程入口地址。

*BIOS和DOS中断例程应用
BIOS和int提供的中断例程,都用ah来传递其内部子程序的编号
(1)设置光标位置;10h中断例程的2号子程序
mov ah,2     ;设置子程序编号
mov bh,0     ;设置页码
mov dh,5    ;设置行号
mov dl,12    ;设置列号
int 10h
(2)在光标位置现实字符;10h中断例程的9号子程序
mov ah,9     ;设置子程序编号
mov al,'a'     ;设置字符
mov bl,5    ;设置字符属性
mov bh,5    ;设置页码
mov cx,3    ;设置字符重复个数
int 10h
(3)程序返回;21h中断例程的4ch号子程序
mov ah,4ch     ;设置子程序编号
mov al,0        ;设置返回值
int 21h
(4)在光标位置显示字符串;21h中断例程的9号子程序;

原文地址:https://www.cnblogs.com/tsembrace/p/3267172.html