?? page66.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第4章 奇妙的聲音</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="page65.html">上一頁</a> <a href="page67.html">下一頁</a> <a href="page80.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>-66-</td><td></td> <!頁碼>
<td colspan=6>PC機匯編語言實戰精解</td><td colspan=4></td><td colspan=6 align="right"><img src="icons/flag.gif"></td> <!書名>
<td></td><td></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=2></td>
<td colspan=2>
<br>
<br>
<br>
main<br>
code<br>
<br>
</td>
<td colspan=2>
mov<br>
int<br>
int<br>
endp<br>
ends<br>
end
</td>
<td colspan=4>
dl,byte ptr crlf+1<br>
21h<br>
20h<br>
<br>
<br>
main
</td>
<td colspan=8></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
指令"MOV DL,BYTE PTR CRLF"明確地告訴編譯系統程序要從地址"CRLF"處取得一個"BYTE"。<br>
舉這個例子只是為說明"PTR"操作符的用途,并非顯示什么算法。說實在的,對于上面這個問題來講最簡單的方法就是將"CRLF DW 0D0AH"改為:"CR EQU 0DH"和"LF EQU 0AH"。這樣可以縮減程序的長度,而且也不必使用"PTR"操作符。<br>
理解了"PTR"操作符,我們就可以更深入的討論一下ADD和SUB這兩條指令,請考慮一下這樣兩條指令是否正確:"ADD BL,WORD PTR [0200]"、"SUB AX,BYTE PTR [3000]"。<br>
先設想一個結論,再用DEBUG檢驗設想的結論,然后總結出這兩條指令在應用時的注意事項。<br>
至于-1和255之間的關系,將在下面一節中詳細講解。
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18><font face="黑體"><a name="43">4.3 數字的表示</a></font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
第一章中已經講過一些二進制數與十六進制數的知識,現在我們要對已有的知識做些擴充,最重要的一個問題就是二進制數是如何表示"符號"的。<br>
這個問題并不復雜,表示一個帶符號的整數常用的方法有三種:原碼、反碼表示法和補碼表示法。先來看看原碼表示法。在計算機中,數的符號是用一個數位來表示的,一般用數的最高位。正號用0表示,負號用1表示。所謂原碼,就是簡單地遵循這一規定的一種表示法。例如我們用原碼表示+1,可以寫成00000001,其最高位是0,表明這個數的符號是"+"。如果表示-1,則可以寫成"10000001",最高位的"1"就表示其符號為"―"。這種表示帶符號數的方法法就是原碼表示法。<br>
反碼比原碼復雜一些,它規定若一個數值為正,則它的反碼和原碼形式相同。如+1仍寫成"00000001";若一個數值為負,則反碼的符號位為1,其余各位對原碼取反。如-1寫成"11111110";這兩種方法在計算機中很少采用,原因很簡單,原碼和反碼不便于運算。舉個例子:用原碼計算-1+1=?<br>
問題似乎不難,但需要考慮的事情很多。假如只是簡單地在"10000001"的最低位加上1,那么將得到結果--10000010,根據原碼的規定,這個結果是-2。<br>
要想得到正確結果,我們必須首先要考慮將符號位置0,同時最低位也不能加1,而要減1。即使采用反碼計算,也要單獨處理其符號。這樣計算不僅對我們自己,就是對CPU來說也是不方便的。因此,多數機器都采用補碼表示法。<br>
在補碼表示法中對于負數的表達要比反碼麻煩一些,負數X用"2n-|X|"表示,其中"n"是數的位數。對于八位二進制數來講n=8,因此用八位二進制補碼表示-1就是28-1=11111111,也就是十六進制數0FFH。正數的表示方法和原碼一樣,+1也寫成"00000001"。
</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="page65.html">上一頁</a> <a href="page67.html">下一頁</a> <a href="page80.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -