1. 程式人生 > >組合語言基礎知識(更新中)

組合語言基礎知識(更新中)

1、什麼是組合語言,它在計算機語言中的地位?

組合語言是程式設計語言的基礎語言,是唯一可以直接與計算機硬體打交道的語言

2、組合語言源程式、彙編程式、彙編的關係?
這裡寫圖片描述

3、組合語言的特點

  1) 組合語言與機器指令一一對應,可充分理解計算機的操作過程
      組合語言指令是機器指令的符號表示

  2) 組合語言是靠近機器的語言
      程式設計時要求熟悉機器硬體系統,可充分利用機器硬體中的全部功能,發揮機器的特點
      在計算機系統中,某些功能由組合語言程式實現:實時過程控制系統、系統初始化、實際的輸入輸出裝置操作

  3) 組合語言程式的效率高於高階語言
      效率,指的是用匯編語言編寫的源程式在彙編後所得的目標程式效率高
      時間域的高效率:執行速度快;空間域的高效率:目的碼佔用儲存空間少

4、組合語言與高階語言的比較

5、進位制轉換

 (略)

6、資料組織單位

 1) 位(bit)
     是計算機中表示資訊的最小單位,符號b,是一個二進位制位,每一位用0或1表示

 2) 位元組(Byte) 
     8位二進位制數為一個位元組

 3) 字(Word)
     若干個位元組為一個字,一般一個字包含兩個位元組
     範圍0000H~FFFFH

 4) 雙字(Double Word)
     兩個位元組為一個字,四個位元組為連個字,稱為雙字
     範圍00000000H~FFFFFFFFH

 5) 字長
     機器字的長度為字長,即計算機中每個字所包含的位數,由機器資料匯流排數決定
     例如,資料匯流排數為64位,機器字長為64位,即每個字有8個位元組

 6) 資料字與指令字
     資料字:在儲存單元中儲存的是資料
     指令字:在儲存單元中儲存的是指令
     無論是資料字還是指令字,在儲存單元中都是以二進位制的形式存放的

7、BCD碼

 兩種儲存方式:組合型(1個位元組表示2個BCD碼);非組合型(1個位元組表示1個BCD碼)

8、80X86計算機組織結構

 微型計算機的硬體系統主要由3個主要部分組成:
  1)中央處理器CPU(運算器、控制器、暫存器)
  2)輸入輸出裝置
  3)儲存器

9、80X86 CPU的暫存器

  暫存器分為3類:
  1)通用暫存器
  2)控制暫存器
  3)段暫存器

  8個8位通用暫存器:AL,AH,BL,BH,CL,CH,DL,DH
  8個16位通用暫存器:AX,BX,CX,DX,SI,DI,BP,SP
  8個32位通用暫存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP

說明:1)指標暫存器(SP,ESP,BP,EBP)

        SP,ESP為堆疊指標暫存器,存放當前堆疊段棧頂的偏移地址,
        是根據指令自動移動的,要想隨機讀取

        堆疊段中的資料,必須通過BP或EBP基址指標暫存器來讀取。


    2)控制暫存器(IP,EIP,FLAGS,EFLAGS)

        IP,EIP為指令指標暫存器,用於存放當前正在執行的指令的
        下一條指令的偏移地址,該暫存器所指的為程式碼段的偏移地址。

         FLAGS為標識暫存器,表示程式執行時的狀態和一些特殊控制

    3)段暫存器

        程式碼和資料是分開存放,程式碼存放在程式碼段,資料存放在資料段

10、記憶體組織結構

1)記憶體的地址

    在儲存器中記憶體單元的基本單位是*位元組*,每個位元組都有一個唯一的地址

2)儲存單元的內容

    一個儲存單元存放的資訊為儲存單元的內容
        分為:位元組單元、字單元、雙字單元
        雙字:需要兩個16位暫存器,通常為DX:AX,DX高位,AX低位

3)堆疊

    堆疊是記憶體中一塊特定的區域,其中資料按照*先進後出*原則
    作用:暫存資料、子程式呼叫與返回、呼叫中斷處理程式、從中斷處理程式返回
    位置:堆疊段地址存放於SS暫存器中,偏移地址存放在堆疊指標暫存器(SP(16位)/ESP(32位)),
         他們永遠指向棧頂
    初始化:堆疊的初始化時通過設定SS及SP/ESP值來完成的,可以由編譯系統自動完成,也可以在程式
           中通過偽指令顯示地定義

11、真實模式

1)介紹

    只有8086/8088工作在真實模式下;
    80286以上的微處理器工作在真實模式和保護模式下;
    在真實模式下微處理器只能定址1MB的儲存空間;
    80286以上系統的微處理器在加點或復位時都以真實模式方式開始工作

2)記憶體地址的分段

    *為什麼要分段?*
    8086/8088地址匯流排為20根,可訪問的地址為:2^20=1048576=1M
    8086/8088內部暫存器都是16位的,可以直接處理16位長度的儲存地址,16位地址的定址2^16=64K
    為了把定址範圍擴大到1MB,真實模式儲存器地址均採用儲存空間的分段技術來解決定址1MB的儲存空間
    提出了段地址和偏移地址合成20位實體地址的概念


    *分段方法?*
    16位段地址+16位段內地址--->20位實體地址
    地址的組合:實體地址=段地址*16D(或10H)+偏移地址,(段地址*16D--二進位制段地址左移4位)
    存放段地址:16位段地址暫存器(CS、DS、SS、ES)
    存放偏移地址:16位指標暫存器(IP、SP)
    在1MB儲存器中可以有64K個段,每個段最多64KB,最小為16KB


    *實體地址、段地址、段內地址、邏輯地址的區別?*
    實體地址:與記憶體單元一一對應的20位二進位制數,1MB=00000H~FFFFFH
            每個實體地址代表一個唯一的記憶體單元

    段地址:將1MB的記憶體空間分為長64KB的程式區和資料區稱為段
          每個段用1個16位二進位制地址表示
          段地址存放在段暫存器中
          程式碼段:用於存放源程式的二進位制程式程式碼,該段的段地址放在CS中
          資料段:存放操作資料的,該段的段地址放在DS中
          堆疊段:堆疊用的儲存區,該段的段地址放在SS中
          附加段:該段的段地址放在ES中

    段內地址:16位二進位制段內地址為偏移地址
   (偏移地址)不同段內的偏移地址存放在不同的暫存器中,段暫存器與裝偏移地址的暫存器按一定要求組合

段暫存器與偏移地址暫存器組合

    邏輯地址:用段地址和偏移地址來表示記憶體單元的地址為邏輯地址,例如,段地址:偏移地址


    *邏輯地址與實體地址的換算關係?*
    實體地址 = 段地址*16D(10H)+偏移地址
    邏輯地址 = 段地址:偏移地址
    例子:邏輯地址,1111H:2222H
         實體地址,1111H*10H+2222H = 13332H
         假設1111H為程式碼段地址,2222H在指標暫存器IP中,示意圖如下:

記憶體地址示意圖

    *記憶體分配方法?*
    程式碼段、資料段、堆疊段的大小,是以節為最小單位分配記憶體區域的
    16位元組=2個字=1節,節的邊界地址就是能夠被16整除的地址
    偏移地址(段內地址)是從0000H開始的
    例子:假設程式分配的記憶體區從6100H開始,程式長度1020位元組,運算元510位元組,堆疊段250位元組
         則程式碼段長度為1024D=400H,資料段長度為512D=200H,堆疊段長度為256D=100H
         示意圖如下:

    *段與段之間的關係?*
    8088/8086 CPU把1MB的儲存空間劃分成若干邏輯段
    每個段的起始地址必須是能夠被16整除的數
    邏輯段的最大長度為64KB
    1MB的儲存空間最多可以分成64K個邏輯段,當每個邏輯段為16KB時
    段與段之間可以相鄰、分離、重疊、部分重疊

12、保護模式

1)保護模式儲存器定址機制

    在保護模式下,邏輯地址=選擇符+偏移地址
    與真實模式不同,真實模式的段暫存器存放段基地址,而保護模式的段暫存器存放選擇符
    保護模式下,通過選擇描述符表中的描述符,間接地形成段基地址
    保護模式的偏移地址最大可以是32位,最大段長可以從16KB擴充套件到4GB

2)描述符

    描述符包括,段在暫存器中的位置,段的長度,訪問許可權

    由基地址、段界限、訪問許可權、附加欄位組成
        基地址:指定段的起始地址
        段界限:存放該段的最大偏移地址
        訪問許可權:說明該段在系統中的功能和一些控制資訊
        附加欄位:描述該段的一些屬性

    描述符的內容是由系統自動設定的

    由於段暫存器是16位的,描述符是64位的
    故將64位的段描述符放按順序存放形成一個段描述符表,放在記憶體中
    而在段暫存器中實際存放的是要選擇的段描述符表的序號,類似於陣列中的下標

13、儲存器管理機制

    1)分段管理機制

        ①虛擬儲存器:在有限的物理儲存器上獲取更大的使用空間
            *虛擬儲存器是如何實現儲存的?*
            在程式執行期間的任意時刻,虛擬儲存器系統自動吧程式分成許多小塊即程式段
            將某個程式段存放到物理儲存器中,其他程式段放在磁碟中
            當程式要訪問到哪個程式段時,就把哪個程式段引導到物理儲存器中

        ②分段管理:將4GB的儲存空間分成若干獨立的受保護的儲存空間塊
                  每個應用程式可以使用這些儲存空間塊

    2)分頁管理機制

        ①線性地址空間:每個程序都有相同大小的4GB線性空間
                     用分段管理機制實現虛擬地址空間到線性地址空間的對映,實現把二維的
                     虛擬地址轉換為一維的線性地址

        ②分頁儲存管理:把線性地址空間和實體地址空間分別劃分為大小相同的塊,每塊長為4KB
                      這樣的塊稱為頁,通過分頁管理機制實現線性地址空間到實體地址空間的
                      對映,實現線性地址到實體地址的轉換