基礎知識
什么是進制?
對於同一個數字有很多表示方式。很久很久以前人們用棍子
計數,后來學會在地上畫棍子,最終畫在紙上.比如:
|||||(5根棍子)
羅馬人使用不同的符號表示棍子數目:|||仍然表示3根
棍子,而用V表示5根棍子用X表示10根~
在當時,使用棍子計數是偉大的發明.用符號代替棍子更是
如此.如今采用十進制系統表示數字是最好的方法之一.之所以
這樣說是因為它實現了用符號表示"沒有"這一重要思想(3個XX?)
1500年前的印度,零(0)第一次被看作一個數字.
稍后,這一概念在中東阿拉伯地區使用,最終傳播到西方拉美國家。
在下面的學習中,你會逐漸認識到這個思想對於現代數字系統是多么
重要。
十進制系統
目前使用最多的是十進制.十進制系統有10個數字
0,1,2,3,4,5,6,7,8,9
利用這些數字能表示任何數值,例如
754
這些數字是由每一位數字乘以“基數”的冪累加而成的
(上一個例子中基數是10 因為十進制中有十個數字)。
位置對於每一個數字是很重要的。例如,你將上一個例子
中的“7”放到結尾:547
數值就成為:
特別提醒:任何數字的0次冪都是1,0的0次冪也是1
二進制
計算機沒有人類聰明(至少現在是這樣),制造一個只有
開關或者稱為 0,1 兩種狀態的電子機器很容易。計算機
使用二進制系統,只有兩個數字
0, 1
基地為2
每一位二進制數稱作一位(BIT),4 BIT 組成一個半字節(NIBBLE),
8BIT組成一個字節(BYTE),兩個字節組成一個字(WORD),兩個字
組成一個雙字(DOUBLE WORD)(很少使用):
習慣上在一串二進制后面加上“b”,這樣,我們可以知道101b是二進制
表示十進制的5。
二進制10100101b表示十進制的165,計算方法如下:
十六進制系統
十六進制系統使用16個數字
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
基底是 16.
十六進制非常緊湊,便於閱讀。將二進制轉換為十六進制
很容易,半字節(4bits) 對應一位十六進制如下表
|
|
習慣上我們在一個十六進制數的后面加上 "h",以便和其他進制區別, 這樣我們就知道 5Fh是一個十六進制數表示十進制的 95。習慣上,我們也在以字母開頭(從A到F)的十六進制數前面
加上"0" 例如: 0E120h.
十六進制 1234h 等於 4660:
十進制到另外進制的換算
在換算中,將十進制數不斷除以目標進制的基底,每一次都要記錄下商和余數,直到商0。
余數用來表示結果。
下面是一個十進制39(基底是10)到十六進制(基底是16)的換算:
結果為 27h.
上例中所有的余數都小於10,不必使用字母。
再舉一個更復雜的例子:
十進制 43868 換算為十六進制:
結果是 0AB5Ch, 使用 上面提到的表 將大於9的數字替換成字母。
運用同樣的原理,我們可以換算為二進制(用2作除數),或者是先換算成十六進制,再用
上面的表 換算成二進制:
於是,得到二進制: 1010101101011100b
有符號數
對於十六進制數 0FFh 無法確定它是正數還是負數,因為它可以表示十進制的"255"
或者 "- 1"。
8位可以表示256個狀態,於是,我們可以假定前128個表示正數(從0到127),接
下來的128個數(從128到256)表示負數 。
如果想表示"- 5",我們從256中減去5,即 256 - 5 = 251。
用這種復雜的方法表示一個負數有着數學依據的,數學上"- 5" 加上 "5"等於0。
當我們將兩個8位的數字 5 和 251相加時,結果超過255,溢出處理為0!
128到256高位始終是1,這個可以作為數字符號的標記
對於字(16位),16位有65536個狀態,頭32768個狀態(從0到32767)用來
表示正數,下面的32768個狀態(從32767到65535) 表示負數。
Emu8086 帶有數制轉換工具,也可以計算各種數值表達式。選擇菜單 Math 項:
Number Convertor (數制轉換)可以實現任意數制之間的轉換。在文本框中填寫源
數值,將自動轉換到任意的數制。 可以作 8 位 或者 16 位轉換。
Expression Evaluator(表達式計算)可以用來計算不同數制的計算以及從一個進制
到另一個進制的轉換。輸入表達式,按下回車,結果就會以你選定的進制表示。最長可以
進行32位的計算。當在Signed打鈎選中時(除了八進制和雙字),最前面的一位將被認
作是符號位。這樣以來,0FFFFFFFFh 將被認為是十進制的 -1。
例如,你計算 0FFFFh * 10h + 0FFFFh ( 8086 CPU所能訪問的最大內存地址)。如果你選中
Signed 和 Word 選項,結果是 -17 (因為表達式被認為是 (-1) * 16 + (-1) )。如果
想按照無符號數計算,請不要選擇 Signed 表達式為 65535 * 16 + 65535 計算結果將是
1114095
同樣你可以使用Number Convertor將非十進制換算為有符號的十進制,然后根據十進制
計算。
支持如下運算:
~ not (inverts all bits).
* multiply.
/ divide.
% modulus.
+ sum.
- subtract (and unary -).
<< shift left.
>> shift right.
& bitwise AND.
^ bitwise XOR.
| bitwise OR.
二進制必須有“b”作結尾,例如
00011011b
十六進制必須有"h"作結尾,另外,當地一位是字母時,最前面必須加上0,例如:
0ABCDh
八進制必須有"o"作結尾,例如:
77o