在用匯編語言進行程序設計時,程序員可以直接訪問內(nèi)存,對數(shù)據(jù)在存儲器內(nèi)的表示形式要有一個清晰的認識。下面,我們只簡單介紹本課程所要用到的數(shù)據(jù)表示知識,為后面的學習作一點必要的準備。
有關(guān)“數(shù)據(jù)表示”的詳細內(nèi)容請參閱《計算機組成原理》中的相關(guān)章節(jié)。
(1)、二進制
在計算機內(nèi),數(shù)值是用二進制來表示的,每個二進制數(shù)按權(quán)相加就可得到其十進制數(shù)值。在書寫二進制時,為了區(qū)別,在數(shù)據(jù)后面緊跟一個字母B。
二進制的一般表現(xiàn)形式為:bn-1…b1b0B,其代表數(shù)值:bn-12n-1+…+b121+b020。
數(shù)據(jù)的二進制表示形式簡單、明了,但它書寫起來比較長,所以,通常情況下,我們在程序中不直接用二進制來書寫具體的數(shù)值,而改用八進制、十進制或十六進制。
(2)、八進制
八進制是一種二進制的變形,三位二進制可變?yōu)橐晃话诉M制,反之也然。八進制的表示元素是:0、1、…、7。在書寫時,為了區(qū)別,在數(shù)據(jù)后面緊跟一個字母Q。如:1234Q、7654Q、54Q等都是八進制。
八進制數(shù)在程序中的使用頻率不高。
(3)、十進制
十進制是我們最熟悉的一種數(shù)據(jù)表示形式,它的基本元素是:0、1、…、9。在書寫時,為了區(qū)別,在數(shù)據(jù)后面緊跟一個字母D。在程序中經(jīng)常用十進制來表示數(shù)據(jù)。
(4)、十六進制
十六進制是另一種二進制的變形,四位二進制可變?yōu)橐晃皇M制,反之也然。十六進制的基本元素是:0、1、…、9、A、B、…、F(字母小寫也可以),其中:字母A、B、…、F依次代表10、11、…、15。
在書寫時,為了區(qū)別,在數(shù)據(jù)后面緊跟一個字母H。當十六進制數(shù)的第一個字符是字母時,在第一個字符之前必須添加一個‘0’。如:100H、56EFH、0FFH、0ABCDH等都是十六進制數(shù)。
十六進制在程序中的使用頻率很高。
(5)、數(shù)值進制的總結(jié)和相互轉(zhuǎn)換
表1.1 各種進制及其字符表示
進制 | 字符 | 例子 | 備注 |
二進制 | B/Y(*) | 1010B、1011B | (*):字符Y、O和T是宏匯編MASM系統(tǒng)所增加的進制表示符。 |
八進制 | Q/O | 1234Q、311Q | |
十進制 | D/T | 1234D、512D | |
十六進制 | H | 1234H、1011H |
(6)、數(shù)的補碼表示法
在計算機內(nèi),為了表示正負數(shù),并便于進行各種算術(shù)運算,對有符號數(shù)采用二進制的補碼表示形式。
補碼的最高位用來表示正負數(shù):0—正數(shù),1—負數(shù)。
正數(shù)的補碼是其自身的二進制形式,負數(shù)的補碼是把其正數(shù)的二進制編碼變“反”,再加1而得。
(7)、二進制數(shù)的符號擴展
在匯編語言中,我們經(jīng)常要對字/字節(jié)的數(shù)據(jù)進行操作。當把“字節(jié)”轉(zhuǎn)換成“字”,或“字”轉(zhuǎn)換成“雙字”時,就需要進行符號擴展。符號擴展的具體操作就是把已知信息的最高位擴展到所有更高位。
例1.1 把8位補碼01011010、10101100分別擴展成16位補碼。
解:根據(jù)符號擴展的含義,“字節(jié)→字”的具體擴展結(jié)果如下:
01011010 | 10101100 | ||
00000000 | 01011010 | 11111111 | 10101100 |
例1.2 把16位補碼0101101111001010、1010111101011011別擴展成32位補碼。
解:根據(jù)符號擴展的含義,“字→雙字”的具體擴展結(jié)果如下:
0101101111001010 | 1010111101011011 | ||
0000000000000000 | 0101101111001010 | 1111111111111111 | 1010111101011011 |
(8)、n位二進制的表示范圍
n位二進制所能表示的無符號整數(shù)的范圍:0≤x≤2n-1。
n位二進制所能表示的有符號整數(shù)(補碼表示)的范圍:-2n-1≤x≤2n-1-1。
在匯編語言中,常用到n為8和16時的數(shù)值范圍:
(9)、BCD碼
通常,我們習慣用十進制表示的數(shù)據(jù),但計算機是用二進制來表示數(shù)數(shù)據(jù)的,這就需要進行數(shù)值進制之間的轉(zhuǎn)換。我們把每位十進制數(shù)轉(zhuǎn)換二進制的編碼,簡稱為BCD碼(Binary Coded Decimal)。
BCD碼是用4位二進制編碼來表示1位十進制數(shù)。這種編碼方法有多種,但常用的編碼是8421BCD編碼,如表1.2所示。這種BCD編碼實際上就是0~9的“等值”二進制數(shù)。
表1.2 8421BCD編碼列表
十進制數(shù)字 | 8421BCD碼 | 十進制數(shù)字 | 8421BCD碼 |
0 | 0000 | 5 | 0101 |
1 | 0001 | 6 | 0110 |
2 | 0010 | 7 | 0111 |
3 | 0011 | 8 | 1000 |
4 | 0100 | 9 | 1001 |
用BCD碼進行進制的轉(zhuǎn)換時,是要求在二種進制的表現(xiàn)形式上快速轉(zhuǎn)換,而不是要求在“數(shù)值相等”的含義快速轉(zhuǎn)換。
例1.3 求十進制數(shù)2000的BCD編碼和其二進制數(shù)。
解:2000的BCD編碼是把每位上的數(shù)2、0、0、0分別轉(zhuǎn)換為其對應的BCD編碼:0010、0000、0000和0000,把它們合在一起就是2000的BCD編碼:0010 0000 0000 0000。
計算機除了具有進行數(shù)值計算能力之外,還具有進行非數(shù)值計算的能力?,F(xiàn)在,后者的應用領(lǐng)域已遠遠超過了前者的應用領(lǐng)域,如:文字處理、圖形圖象處理、信息檢索、日常的辦公管理等。所以,對非數(shù)值信息的編碼就顯得越加重要。
1、ASCII碼ASCII碼(American Standard Code for Information Interchange)是目前應用極其廣泛的一種信息編碼,許多計算機系統(tǒng)都是采用它為字符進行編碼。它是一種7位二進制編碼。 右表是ASCII碼的具體編碼方案。在該表中,對學習本課程有用的主要信息有: ![]() ![]() 當然,從ASCII碼表中還可看出其它有用信息,還有擴展的ASCII碼等知識,但這些內(nèi)容對學習本課程的幫助不明顯,故不再敘述。有興趣的讀者可參閱其它書籍。 | 表1.3 ASCII碼的編碼方案
|
ASCII碼是針對英文的字母、數(shù)字和其它特殊字符進行編碼的,它不能用于對漢字的編碼。要想用計算機來處理漢字,就必須先對漢字進行適當?shù)木幋a。我國在1981年5月對6000多個常用的漢字制定了交換碼的國家標準,即:GB2312-80。該標準規(guī)定了漢字交換用的基本漢字字符和一些圖形字符,它們共計7445個,其中漢字有6763個。該標準給定每個字符的二進制編碼,即國標碼。
匯編語言所用到的基本數(shù)據(jù)類型為:字節(jié)、字、雙字等,這些數(shù)據(jù)類型在以后的章節(jié)中都有相應的類型說明符。下面對它們進行最基本的描述。
1、字節(jié)
一個字節(jié)有8位二進制組成,其最高位是第7位,最低位是第0位,如右圖所示。在表示有符號數(shù)時,最高位就是符號位。 通常情況下,存儲器按字節(jié)編址,讀寫存儲器的最小信息單位就是一個字節(jié)。 | ![]() 圖1.2 字節(jié)數(shù)據(jù)類型示意圖 |
2、字
由2個字節(jié)組成一個字,其最高位是第15位,最低位是第0位。高8位稱為高字節(jié),低8位稱為低字節(jié),如右圖所示。 字節(jié)和字是匯編語言程序中最常用的兩種數(shù)據(jù)類型,也是最容易出錯的數(shù)據(jù)類型。 | ![]() 圖1.3 字數(shù)據(jù)類型示意圖 |
3、雙字
用2個字(4個字節(jié))來組成一個雙字,其高16位稱為高字,低16位稱為低字,如右圖所示。 雙字有較大的數(shù)據(jù)表示范圍,它通常是為了滿足數(shù)據(jù)的表示范圍而選用的數(shù)據(jù)類型,也可用于存儲遠指針。 字節(jié)、字和雙字是匯編語言最常用的三種數(shù)據(jù)類型,下圖表現(xiàn)出它們?nèi)咧g的組成關(guān)系。 | ![]() 圖1.4 雙字數(shù)據(jù)類型示意圖 |
圖1.5 字節(jié)、字和雙字數(shù)據(jù)類型之間關(guān)系示意圖
4、四字
由4個字(8個字節(jié))組成一個四字類型,它總共有64個二進制位,當然,也就有更大的數(shù)據(jù)表示范圍,但在匯編語言中很少使用該數(shù)據(jù)類型。
5、十字節(jié)
由10個字節(jié)組成一個十字節(jié)類型,它總共有80個二進制位。在匯編語言中很少使用該數(shù)據(jù)類型。
6、字符串
字符串是由若干個字節(jié)組成的,字節(jié)數(shù)不定,通常每個字節(jié)存儲一個字符。該數(shù)據(jù)形式是匯編語言程序中經(jīng)常使用的另一種數(shù)據(jù)形式。