天天看點

彙編語言

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。

 循環左移與循環右移:從一端移出的位要移入到另一端。

繼續閱讀