136 lines
3.6 KiB
HTML
136 lines
3.6 KiB
HTML
<!doctype HTML public "-//W3O//DTD W3 HTML 3.0//EN">
|
||
<HTML>
|
||
|
||
<HEAD>
|
||
|
||
<TITLE>8086 Assembler Tutorial for Beginners (Part 4)</TITLE>
|
||
|
||
<META name="description" content="Interrupts - 8086 Assembler">
|
||
|
||
<META name="keywords" content="interrupts, 8086, tutorial, programming, assembler tutorial, tutorial for begginers">
|
||
|
||
<META name="robots" content="nofollow">
|
||
|
||
</HEAD>
|
||
|
||
<BODY bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#007099" alink="#FF0000">
|
||
|
||
<TABLE WIDTH=80%>
|
||
<TR><TD>
|
||
|
||
<FONT FACE="Verdana" SIZE=3>
|
||
|
||
<FONT SIZE=+1>
|
||
<B>8086 Assembler Tutorial for Beginners (Part 4)</B>
|
||
</FONT>
|
||
|
||
|
||
|
||
|
||
<BR><BR>
|
||
|
||
<FONT SIZE=+2><B>中断</B></FONT>
|
||
<BR> </FONT><p><font face="Verdana">中断是一系列功能调用。这些功能调用使得编程更加容易。<br>
|
||
<br>
|
||
比如,你想在打印机上输出一个字符,你只需要简单的调用<br>
|
||
<br>
|
||
中断,它将帮你完成所有的事情。另外还有控制磁盘和其他<br>
|
||
<br>
|
||
硬件工作的中断。我们将这些功能调用称作软件中断。<br>
|
||
<br>
|
||
不同的硬件同样可以触发中断,这些中断称作硬件中断。<span lang="zh-cn">这里</span>,<br>
|
||
<br>
|
||
我们只介绍<b>软件中断(</b></font><FONT FACE="Verdana" SIZE=3><B>software interrupts</B></FONT><font face="Verdana">)。</font><FONT FACE="Verdana" SIZE=3><BR>
|
||
|
||
</FONT></p>
|
||
<p><font face="Verdana">触发一个<b>软件中断</b>,需要使用</font><FONT FACE="Verdana" SIZE=3><B>INT</B></FONT><font face="Verdana">指令,它的使用方式非常简单<span lang="zh-cn">:</span></font><FONT FACE="Verdana" SIZE=3><BR>
|
||
</p>
|
||
<BLOCKQUOTE>
|
||
<B>INT value</B>
|
||
</BLOCKQUOTE>
|
||
<br>
|
||
上面<b>value</b>的取值范围是从<span lang="zh-cn"> </span>0<span lang="zh-cn"> </span>到<span lang="zh-cn">
|
||
</span>255<span lang="zh-cn"> </span>(或者0到0ffh),通常我们<br>
|
||
<br>
|
||
使用十六进制。<p>你也许猜测只有256个中断调用,但是这是不正确的。因为每一<br>
|
||
<br>
|
||
个中断都有子功能。</p>
|
||
<p>在调用一个中断的子功能之前,需要设置<B>AH</B>寄存器。</p>
|
||
<p><br>
|
||
每一个中断最多可以拥有256个子功能(于是,我们有<br>
|
||
<br>
|
||
256*256=65536个功能调用)。一般情况下使用<B>AH</B>寄存器,但是<br>
|
||
<br>
|
||
一些情况下可能使用另外的寄存器。通常,其他的寄存器<br>
|
||
<br>
|
||
是用来传递数据和参数的。</p>
|
||
<p>下面的例子调用了 <B>INT 10h</B>中断<B>0Eh</B>子功能输出字符串‘Hello!'。<br>
|
||
<br>
|
||
这个功能作用是在屏幕上显示一个字符,然后光标进一,如果<br>
|
||
<br>
|
||
需要还滚屏。<BR>
|
||
|
||
</p>
|
||
|
||
<TABLE BORDER=1 CELLPADDING=10 WIDTH=50%><TR><TD>
|
||
<PRE><FONT FACE="Fixedsys">#MAKE_COM# ; 生成com文件的指令</FONT></PRE>
|
||
<PRE><FONT FACE="Fixedsys">ORG 100h</FONT></PRE>
|
||
<PRE><FONT FACE="Fixedsys">;我们使用的这个子功能没有返回值,
|
||
;所以我们只用设置就可以了。
|
||
|
||
MOV AH, 0Eh ; 选择子功能</FONT></PRE>
|
||
<PRE><FONT FACE="Fixedsys">;int 10h/0eh 子功能,输出放在
|
||
;<span lang="zh-cn">AL</span>寄存器中的<span lang="zh-cn">ASCII</span>码对应的字符
|
||
|
||
MOV AL, 'H' ; ASCII码: 72
|
||
INT 10h ; 输出
|
||
|
||
MOV AL, 'e' ; ASCII 码: 101
|
||
INT 10h ; 输出
|
||
|
||
MOV AL, 'l' ; ASCII 码: 108
|
||
INT 10h ; 输出
|
||
|
||
MOV AL, 'l' ; ASCII 码: 108
|
||
INT 10h ; 输出
|
||
|
||
MOV AL, 'o' ; ASCII 码: 111
|
||
INT 10h ; 输出
|
||
|
||
MOV AL, '!' ; ASCII 码: 33
|
||
INT 10h ; 输出
|
||
|
||
RET ; 返回操作系统</FONT></PRE>
|
||
</TD></TR></TABLE>
|
||
|
||
<BR>将上述程序拷贝粘贴到<I>Emu8086</I>代码编辑器,点击<p>[<B>Compile and Emulate</B>]<span lang="zh-cn">
|
||
</span>按钮,运行!</p>
|
||
<p> 关于中断更多的知识,请查阅</p>
|
||
|
||
<p><span lang="zh-cn"> </span><A HREF="supported_interrupts.html"><B>支持中断列表
|
||
(list of supported interrupts)</B></A><BR>
|
||
|
||
</p>
|
||
|
||
<HR>
|
||
<CENTER>
|
||
<A HREF="asm_tutorial_03.html"><B> <<< 上一部分 <<< </B></A>
|
||
|
||
<A HREF="asm_tutorial_05.html"><B> >>> 下一部分 >>> </B></A>
|
||
</CENTER>
|
||
<HR>
|
||
|
||
|
||
<BR>
|
||
|
||
</FONT>
|
||
|
||
|
||
</TD></TR>
|
||
</TABLE>
|
||
|
||
|
||
|
||
</BODY>
|
||
|
||
</HTML> |