80x86彙編語言基礎知識
1. 程式設計語言
機器語言
彙編語言:機器語言的符号化,與機器密切相關。
(具體來講,還有面向過程的語言,如C)
進階語言
2.彙編語言的意義
速度:對于同一個問題,用彙編語言設計出的程式能達到“運作速度最快”。
空間:對于同一個問題,用彙編語言設計出的程式能達到“占用空間最少”。
功能:彙編語言可以實作進階語言難以勝任甚至不能完成的任務。
知識:學習彙編語言,有助于對計算機系統的了解、寫出更好的程式。
資料表示
數制的基本知識(必須掌握其轉換計算)
10進制
(8進制)
2進制
16進制
說明:
前導0可以忽略,不影響取值。
結尾用D(10進制數)、B(2進制數)、H(16進制數)。預設為十進制數。
資料組織
位(Bit):1個二進制位。
計算機是在特定位數下工作的,如8位、16位、32位等。
位元組(Byte):8位。
位編号從右到左為0~7,第0位為最低位,第7位為最高位。
字(Word):16位。
位編号從右到左為0~15,第0位為最低位,第15位為最高位。位0~7為低位元組,位8~15為高位元組。
雙字(Double Word):32位。
位編号從右到左為0~31,第0位為最低位,第31位為最高位。位0~15為低字,位16~31為高字。
無符号數與帶符号數
1. 無符号數
N位二進制數可以表示的無符号數範圍為0~2N -1。例如,8位二進制數00H~0FFH表示0~255,16位二進制數0000H~0FFFFH表示0~65535。
?
2. 帶符号數的補碼表示
補碼的表示規則:
以最高位作為符号位(0表示正數,1表示負數)。
正數的補碼是其本身。
負數的補碼是對其正數“各位求反、末位加1”後形成的。
把“各位求反、末位加1”的操作稱作求補。求補就是求相反數。
N位二進制補碼數可以表示的帶符号數範圍為-2N-1~2N-1 -1。例如,8位二進制數可以表示 -128~127,16位二進制數可以表示-32768~32767。
3.補碼的特性
求補
[x]補 [-x]補
[x + y]補 = [x]補 + [y]補
[x - y]補 = [x]補 + [-y]補
說明:
在計算機内部,補碼減法是通過對減數求補後将減法轉換為加法進行的。
一個帶符号數在不同位數下,其二進制補碼表示可能是不同的。例如,8位數-1的補碼表示是0FFH, 16位數-1的補碼表示是0FFFFH。
4. 補碼的實體意義
考慮8位二進制數,其表示範圍為0~255,即256 = 0。若将其想象為一個環,以0為基點,向順時針方向移246個機關,則得246。然而,若按逆時針方向移動,則該位置就是-10。即
-10 = 0F6H = 246
是以,在8位二進制表示下,對于負數x(-128~-1)來說,存在下列等式:
-x = 256 -∣x∣
5. 符号擴充與零擴充
符号擴充是将原符号位填入擴充的每一位,使得在帶符号數意義下取值不變。
零擴充是将0填入擴充的每一位,使得在無符号數意義下取值不變。
字元的ASCII碼表示
ASCII碼字元集采用一個位元組表示字元。
常用字元的ASCII碼。
數字'0'~'9':30H~39H
字母'A'~'Z':41H~5AH
字母'a'~'z':61H~7AH
空格:20H
回車CR:0DH
換行LF:0AH
空字元:0
注意回車與換行的差别:
CR用來控制光标回到目前行的最左端;LF用來移動光标到下一行,而所在列不變。
BCD碼
壓縮BCD碼
以4個二進制位表示1個十進制位,用0000B~1001B表示0~9。
例如,十進制數6429的壓縮BCD碼表示為
0110 0100 0010 1001 B(即6429H)
非壓縮BCD碼
以8個二進制位表示1個十進制位,低4位與壓縮BCD碼相同,高4位無意義。
例如,十進制數6429的非壓縮BCD碼表示為
xxxx0110 xxxx0100 xxxx0010 xxxx1001 B
有時,要求非壓縮BCD碼的高4位為0,這時,6429的非壓縮BCD碼為06040209H。
可以看出,數字字元 '0'~'9' 的ASCII碼恰好是0~9的非壓縮BCD碼。
*注解
同一個二進制數可以表示多種含義,其具體含義由使用者解釋。
例如,二進制數00110000B,即30H,可以當作十進制數48的二進制表示,字元'0'的ASCII碼,30的壓縮BCD碼,0的非壓縮BCD碼,等等。甚至将其當作現實世界的任一實體對象也未嘗不可。
帶符号數的二進制補碼表示與位數密切相關。
例如0FFH,若作為8位帶符号數,則表示-1;若作為16位帶符号數,則表示255。再如0FFFFH,若作為16位帶符号數,則表示-1;若作為32位帶符号數,則表示65535。
基本位操作
1. 邏輯操作:AND、OR、XOR、NOT
AND操作可以使某些位清0。
OR操作可以使某些位置1。
XOR操作可以使某些位取反。
2.移位與循環移位
左移:最低位移入0。在不溢出的情況下,左移1位相當于乘以2。
邏輯右移:最高位移入0。邏輯右移1位約等于無符号數除以2。
算術右移:最高位不變。算術右移1位約等于帶符号數除以2。
循環左移與循環右移:從一端移出的位要移入到另一端。