1. 程式人生 > >組合語言程式設計 第2章概念梳理

組合語言程式設計 第2章概念梳理

組合語言程式設計

第2章概念梳理

8086 14個暫存器:

  • AX,BX,CX,DX (通用暫存器)
  • SI,DI,BP,SP (基址和變址暫存器)
  • CS,SS,DS,ES (段暫存器)
  • IP,FLAGS (指令指標和標誌暫存器)


通用暫存器:

  1. AX,BX,CX,DX通常用於存放一般性資料 稱為通用暫存器
  2. 一般儲存的資料範圍為0 ~ 2^16-1
  3. 且為了與早期CPU操作相容,這4個暫存器均可拆分成2個8位暫存器單獨使用

       {
             AX分為AH和AL
            BX分為BH和BL
            CX分為CH和CL
            DX分為DH和DL
       }
           字的高8位 存放於通用暫存器的高八位暫存器即AH
           字的低8位 存放於通用暫存器的低八位暫存器即AL

           暫存器基本操作指令:
           mov ax,18
           add ax,8

           應注意兩個操作物件的位數應當一致,如類似
           {
               mov ax,bl
               mov bh,ax
           }
         指令是不正確的

         超出位數的情形{

          

       8226 H
+      8226 H
      —————————
      1044CH


;最終結果為044CH,1由於進位被捨棄

 

 
         }

8086表示實體地址的解決途徑:
暫存器都是16位,而實體地址都是20位
可以使用兩個16位地址合成一個20位的實體地址的表達方式
例如:
123CH*16+0008H = 123C8H
1230H*16+00C8H = 123C8H

歸納:
基礎地址(又稱段地址)+偏移地址 = 實體地址
在8086CPU當中,通過段地址:偏移地址來間接描述記憶體單元的實體地址,故CPU根據如下公式得到實體地址:
實體地址 = 段地址 * 16 + 偏移地址

其中:
[段地址:偏移地址] 也稱 [邏輯地址]
在寫法上 地址通常使用十六進位制表示,表示十六進位制的H在[段地址:偏移地址]中可省略不寫。

CS和IP暫存器
CS:程式碼段段暫存器,用於存放程式碼段的[段地址]
IP:指令指標暫存器,用於存放CPU將要讀取的指令在程式碼段中的偏移地址
即CPU 通過這個公式讀取將要執行的指令:
(CS)*16 +(IP)=指令的實體地址

計算機工作過程:
第一步:CPU基於CS:IP,計算出實體地址,然後到相應的記憶體單元
第二步:CPU自動修改IP的值,IP=IP+所讀取指令的長度,從而為下一條指令讀取做好準備
第三步:執行指令。轉第1步,重複此過程

修改CS和IP的指令jmp
同時修改CS、IP的內容,即jmp 段地址:偏移地址
用指令中給出的段地址修改CS,偏移地址修改IP
示例:


只修改IP的內容:
jmp 某一合法暫存器
例如:
jmp ax,ip<--ax