?? page25.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第2章 開始設(shè)計(jì)程序</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!導(dǎo)航條>
<p><a href="content1.html">目錄</a> <a href="page24.html">上一頁</a> <a href="page26.html">下一頁</a> <a href="page27.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!標(biāo)尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td> <!左側(cè)空白>
<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> <!右側(cè)空白>
</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">第2章 開始設(shè)計(jì)程序</td> <!章節(jié)名>
<td></td><td>-25-</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=3></td>
<td colspan=15>
DEC 內(nèi)存單元<br>
執(zhí) 行:原數(shù)據(jù)減1,結(jié)果仍保存于這個寄存器或內(nèi)存單元中
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
這條指令和C語言的那個"--"運(yùn)算符一樣。由于所有段寄存器都不參與運(yùn)算,所以沒有"DEC DS"這樣的用法。<br>
在程序PROG2-B中我們一開始用BX來保存外循環(huán)的計(jì)數(shù)值,在內(nèi)循環(huán)執(zhí)行完后,我們用"DEC BX"使得BX中的計(jì)數(shù)值減1。下面的問題就是看BX是否被減成0。這由新增的JNZ指令完成。
</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>
助記符:JNZ(JUMP IF NOT ZERO)<br>
用 途:根據(jù)運(yùn)算結(jié)果是否非0來控制轉(zhuǎn)移<br>
格 式:JNZ 目的地址<br>
執(zhí) 行:若ZF=0,則轉(zhuǎn)移至目的地址執(zhí)行指令;若ZF=1,則繼續(xù)執(zhí)行下面的指令
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
新的問題出現(xiàn)了,ZF是什么?是新的寄存器嗎?<br>
這個問題不會再留到后面討論了,因?yàn)樗旧砭褪莻€遺留下來的問題。請看第一節(jié)內(nèi)"細(xì)看PC機(jī)"中的2.2.5,在前文我們剛剛討論了堆棧指針(SP)寄存器,還留了3個小問題,現(xiàn)在我們就來討論"標(biāo)志寄存器"。<br>
對于一般數(shù)學(xué)運(yùn)算我們不僅要關(guān)心運(yùn)算的結(jié)果,同時要關(guān)心"運(yùn)算后果"。以"DEC BX"為例,若BX〉1,則執(zhí)行一次DEC指令不會使BX減為0,即運(yùn)算沒有造成變量變成0的"后果";若BX=1,則執(zhí)行一次DEC即可造成"BX=0"的后果。因此對于DEC指令而言,它可以造成兩種不同的后果:<br>
(1)被減的變量仍大于0; (2)被減的變量恰好成了0。<br>
我們所編的程序并不關(guān)心"DEC BX"的結(jié)果是什么,但是要關(guān)心"DEC BX"的后果。因?yàn)锽X被減至0實(shí)際意味著外循環(huán)的結(jié)束。那么運(yùn)算的后果記錄在什么地方呢?<br>
在CPU中有一個特殊的16bit寄存器,此寄存器稱為"標(biāo)志寄存器(FLAG Register)"。和通用寄存器、段寄存器不同,它并不用于保存數(shù)據(jù),CPU用它某些位的0,1狀態(tài)來記錄運(yùn)算的后果。它的結(jié)構(gòu)如圖2-7所示。
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18 align="center">
<img src="figures/F2_8.gif"><br><font face="楷體_GB2312">圖2-7 標(biāo)志寄存器的結(jié)構(gòu)</font>
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
所用到的各個位的解釋都列在表2-1中,其中的ZF位就是我們現(xiàn)在所關(guān)心的。ZF被稱為"零標(biāo)志位"(Zero Flag),當(dāng)某次運(yùn)算的結(jié)果恰好是0時,ZF將被"置位(SET)",即ZF=1;否則ZF"復(fù)位(RESET)"。JNZ指令根據(jù)ZF的狀態(tài)來轉(zhuǎn)移。
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18 align="center"><font face="楷體_GB2312" size=3>
表2-1 標(biāo)志寄存器各個位的功能表
</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>標(biāo)志位</font></td><td colspan=12 align="center"><font size=2>功 能 解 釋</font></td><td colspan=2><font size=2>清0</font></td><td colspan=2><font size=2>置1</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>CF</font></td><td colspan=12><font size=2>進(jìn)位(借位)標(biāo)志,某次運(yùn)算有進(jìn)位或借位時此標(biāo)志置1</font></td><td colspan=2><font size=2>NC</font></td><td colspan=2><font size=2>CY</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>PF</font></td><td colspan=12><font size=2>奇偶標(biāo)志,若運(yùn)算結(jié)果中為1的位有偶數(shù)個此標(biāo)志置1</font></td><td colspan=2><font size=2>PE</font></td><td colspan=2><font size=2>PO</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>AF</font></td><td colspan=12><font size=2>輔助進(jìn)位標(biāo)志<sup>*</sup>,記錄運(yùn)算中低4位向高4位或低8位向高8位的進(jìn)位</font></td><td colspan=2><font size=2>AC</font></td><td colspan=2><font size=2>NA</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>ZF</font></td><td colspan=12><font size=2>零標(biāo)志,若運(yùn)算結(jié)果等于0此標(biāo)志置1</font></td><td colspan=2><font size=2>ZR</font></td><td colspan=2><font size=2>NZ</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>SF</font></td><td colspan=12><font size=2>符號標(biāo)志,運(yùn)算結(jié)果為負(fù)數(shù)此標(biāo)志置1</font></td><td colspan=2><font size=2>NG</font></td><td colspan=2><font size=2>PL</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>TF</font></td><td colspan=12><font size=2>陷井標(biāo)志,當(dāng)此標(biāo)志位置1后CPU處于單步執(zhí)行方式</font></td><td colspan=2><font size=2>-</font></td><td colspan=2><font size=2>-</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>IF</font></td><td colspan=12><font size=2>中斷標(biāo)志,此標(biāo)志置1時允許CPU響應(yīng)中斷,置0時將屏蔽中斷<sup>**</sup></font></td><td colspan=2><font size=2>EI</font></td><td colspan=2><font size=2>DI</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>DF</font></td><td colspan=12><font size=2>方向標(biāo)志,用于控制串處理指令的步進(jìn)方向</font></td><td colspan=2><font size=2>DN</font></td><td colspan=2><font size=2>UP</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2><font size=2>OF</font></td><td colspan=12><font size=2>溢出標(biāo)志,若運(yùn)算發(fā)生溢出時此標(biāo)志置1</font></td><td colspan=2><font size=2>OV</font></td><td colspan=2><font size=2>NV</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18><font face="楷體_GB2312" size=2>
注:* 也稱為半進(jìn)位標(biāo)志; ** 對不可屏蔽中斷(NMI)沒有影響
</font></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>
<!導(dǎo)航條>
<p align="right"><a href="content1.html">目錄</a> <a href="page24.html">上一頁</a> <a href="page26.html">下一頁</a> <a href="page27.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -