?? page35.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第3章 中斷調用與子程序</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!導航條>
<p><a href="content1.html">目錄</a> <a href="page34.html">上一頁</a> <a href="page36.html">下一頁</a> <a href="page45.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!標尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td> <!左側空白>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=1%></td><td width=6%></td><td width=3%></td> <!右側空白>
</tr>
<!頁眉行>
<tr height=60 valign="bottom">
<td></td><td></td><td></td>
<td colspan=6><img src="icons/flag.gif"></td><td colspan=4></td><td colspan=6 align="right">第3章 中斷調用與子程序</td> <!章節名>
<td></td><td>-35-</td><td></td> <!頁碼>
</tr>
<!頁眉線>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!正文>
<font face="宋體" lang="ZH-CN" size=3>
<tr height=20><td colspan=22></td></tr> <!頂部空白>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
和8位立即數或寄存器相比較,也只能和存儲器中的一個字節數據相比,下面這樣的用法是不對的--"CMP AL,0FFFH"、"CMP AH,BX"<br>
CPU執行CMP指令的實際動作是用左邊的數據減右邊的數據,但減的結果并不保留在左邊的寄存器或存儲器中,如果相比較的兩個數據相等,那么"相減"后結果必為0,所以相等的兩個數比較,將使ZF標志置1。要想判斷兩個數據是否相等,只需在CMP指令后用JZ/JNZ指令根據ZF的狀態進行相應轉移即可。<br>
為便于記憶,我們給JZ/JNZ指令賦與了一個新的寫法--JE/JNE(Jump if Equal/Not Equal)。因此指令"JZ 124"也可寫成"JE 124"。
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td><!左邊距>
<td colspan="18">
(3)間接尋址的第二種形式<br>
前面我們討論過用BX寄存器作指針的一種間接尋址方式,用那種尋址方式時我們要把字符串的首地址直接放入BX寄存器以建立指針。而在PROG3-A中,我們在BX寄存器中裝入的是每一個數據相對首地址的偏移量。在取數據時用這個偏移量加上字符串的首地址作為數據的實際偏移地址。這種尋址方式稱為"寄存器相對尋址方式"(Register relative addressing)。<br>
這兩個程序都是用BX作指針,能否用其它通用寄存器呢?注意對于8086/88CPU而言,可做間接尋址的通用寄存器只有BX,其它三個通用寄存器無此功能。我們后面說到"串處理"時會介紹更多的可做間接尋址的寄存器,但它們都不是通用寄存器了。
</td>
<td></td><td></td><!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td></td><td></td>
<td colspan=8>PROG3-B</td><td colspan=8></td>
<td></td><td></td><!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td></td><td></td>
<td colspan=8>-a100[Enter]</td><td colspan=8></td>
<td></td><td></td><!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td></td><td></td>
<td colspan=8>
09FE:0100 jmp 111<br>
09FE:0102 db'Hello,World!',0d,0a,'$'<br>
09FE:0111 mov dx,102<br>
09FE:0114 mov ah,9<br>
09FE:0116 int 21<br>
09FE:0118 int 20
</td>
<td colspan=8>
;跳過字符串數據區<br>
;定義一個字符串,結尾為"$"<br>
;DX寄存器指向字符串首地址<br>
;選擇DOS API的09H功能<br>
;調用21H中斷顯示字符串<br>
;調用20H中斷結束程序,返回DOS
</td>
<td></td><td></td><!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td></td><td></td>
<td colspan=6>09FE:011A [Enter]</td><td colspan=10></td>
</tr>
<tr>
<td></td><td></td><!左邊距>
<td colspan="18">
PROG3-B編寫得非常短小,但卻和PROG3-A有相同的效果,原因在于這個程序使用了操作系統提供的一個極常用的功能──09H(顯示字符串)。
</td>
<td></td><td></td><!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=3 align="center"><img src="icons/note.gif"></td>
<td colspan=15>
功能號:09H<br>
用 途:顯示字符串<br>
參 數:AH=09H<br>
DX=字符串的首地址<br>
調 用:INT 21H<br>
返 回:無
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td><!左邊距>
<td colspan="18">
09功能要求字符串必須以'$'結尾。調用此功能前應將字符串的首地址放入DX寄存器,然后執行INT 21H即可。此功能同樣解釋0DH,0AH等控制碼。
</td>
<td></td><td></td><!右邊距>
</tr>
</font>
<!頁腳線>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!頁腳>
<tr height=60 valign="top">
<td></td><td></td>
<td colspan=9><i>Copyright © 2004-2005 <a href="mailto:webmaster@nucstorm.com">Chunk Lee</a></i></td>
<td colspan=9 align="right"><i><a href="http://www.nucstorm.com" target="_top">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!導航條>
<p align="right"><a href="content1.html">目錄</a> <a href="page34.html">上一頁</a> <a href="page36.html">下一頁</a> <a href="page45.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -