?? page102.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第5章 子過程和串處理</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="page101.html">上一頁</a> <a href="page103.html">下一頁</a> <a href="page116.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>
<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>-102-</td><td></td> <!頁碼>
<td colspan=6>PC機匯編語言實戰(zhàn)精解</td><td colspan=4></td><td colspan=6 align="right"><img src="icons/flag.gif"></td> <!書名>
<td></td><td></td><td></td> <!右側(cè)空白>
</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>
<font face="黑體">(2)"從串取"指令</font><br>
指令LODS就是一個用于取數(shù)據(jù)的串處理指令:
</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>
助記符:LODS(Load from string)<br>
用 途:從DS:SI指示的內(nèi)存單元中取出數(shù)據(jù)并放入累加器<br>
格 式:LODSB(取一字節(jié))<br>
LODSW(取一個字)<br>
執(zhí) 行:LODSB--ALDS:[SI],同時SI +/- 1<br>
LODSW--AXDS:[SI],同時SI +/- 2
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
指令最后的字母"B"和"W"表示所要取的數(shù)據(jù)類型是"BYTE"或"WORD"。所以"LODSB"的動作和"MOV AL,BYTE PTR DS:[SI]"相當(dāng),而"LODSW"則與"MOV AX,WORD PTR DS:[SI]"一樣。但是LODS指令和MOV指令有兩點區(qū)別:
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td>
<td colspan=3 align="center"><img src="icons/attention.gif"></td>
<td colspan=15><FONT FACE="楷體_GB2312" LANG="ZH-CN" SIZE=3>
① LODS指令只能將數(shù)據(jù)取入累加器中,不能取入別的寄存器;<br>
② LODS指令不僅能取得數(shù)據(jù),同時對提供地址的SI寄存器有操作--自動的加上或減去和取得數(shù)據(jù)等量的字節(jié)數(shù)。若取了1B數(shù)據(jù),則SI變化1;而取得1W數(shù)據(jù),則SI變化2。那么究竟什么情況下SI增量,什么情況下SI減量呢?這個問題將在下面回答。
</font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
<font face="黑體">(3)方向標(biāo)志--DF(Direction Flag)</font><br>
DF是標(biāo)志寄存器中的bit10位,它的置、復(fù)位情況將影響到執(zhí)行串處理指令時SI(還有DI)寄存器的增與減。當(dāng)DF置位(為1)時,每次執(zhí)行指令后SI(DI)減量,這樣就使得串處理從高地址向低地址方向進行;而DF復(fù)位(為0)時,每次執(zhí)行指令后SI(DI)增量,串處理自然會從低地址向高地址方向進行。現(xiàn)在的問題就是如何設(shè)定DF的狀態(tài)?
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
<font face="黑體">(4)"D"標(biāo)志控制指令</font><br>
指令CLD就是一條用于控制DF狀態(tài)的指令,和這條指令相對應(yīng)的是STD指令:
</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>
助記符:CLD(Clear direction)/STD(Set direction)<br>
用 途:使DF標(biāo)志復(fù)位/置位<br>
格 式:CLD/STD<br>
執(zhí) 行:DF<-0,DF清零/DF<-1,DF置1
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
這兩條指令功能很簡單,不再多說。<br>
我們前面曾經(jīng)提到過標(biāo)志寄存器中某些位可以對CPU內(nèi)部的工作狀態(tài)進行控制,DF標(biāo)志就是很典型的一例。<br>
當(dāng)我們將要顯示的字符取入AL寄存器后,剩下的工作就是將這個字符顯示在屏幕上。這一步可用DOS提供的2號功能實現(xiàn),只要將AL中的ASCII碼送入DL寄存器再調(diào)用DOS功能即可,不過在前面的程序中我們采用了一個更簡捷的方法--調(diào)用BIOS 10H中斷。<br>
<font face="黑體">(5)INT 10H的0EH功能。</font><br>
10H號中斷調(diào)用也是由BIOS提供,它負責(zé)管理PC機的顯示系統(tǒng),我們在屏幕上看到的文字和圖形一般都是經(jīng)過10H號中斷顯示出來的。這個中斷包括很多功能,現(xiàn)在要討論的0EH功能是十分常用的一個,它被稱為"TTY方式的字符顯示功能"。<br>
TTY是電傳打字機,一種古老的設(shè)備,它可能比我本人出現(xiàn)的還要早。究竟什么是TTY方式?我也不能很確切的說出定義,不過這個功能同10H中斷提供的其它一些顯示文字的功能相比確有很大的不同:<br>
① 使用這個功能顯示一個字符后,光標(biāo)會自動移到下一個位置;
</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="page101.html">上一頁</a> <a href="page103.html">下一頁</a> <a href="page116.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -