CSAPP-labs/LAB1/预备实验2/80x86指令速查/8086教程/translate/asm_tutorial_04.html

136 lines
3.6 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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*25665536个功能调用。一般情况下使用<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>&nbsp; 关于中断更多的知识,请查阅</p>
<p><span lang="zh-cn">&nbsp;</span><A HREF="supported_interrupts.html"><B>支持中断列表
list of supported interrupts</B></A><BR>
 </p>
<HR>
<CENTER>
<A HREF="asm_tutorial_03.html"><B> &lt;&lt;&lt; 上一部分 &lt;&lt;&lt; </B></A>
&nbsp;&nbsp;&nbsp;&nbsp;
<A HREF="asm_tutorial_05.html"><B> >>> 下一部分 >>> </B></A>
</CENTER>
<HR>
<BR>
</FONT>
</TD></TR>
</TABLE>
</BODY>
</HTML>