1. 程式人生 > >小結 第三章

小結 第三章

記憶體中字的儲存

         記憶體以位元組為單位,劃分為若干個單元。
        計算機內資料存-取單位:
                ① 位元組  (8bit)
                ② 字      (16bit)
                ③ 雙字 (32bit)
                ④ 四字 (64bit) 字資料的存-取原則:高-高  低-低
即:
          ① 字資料的低位位元組存放在低地址記憶體單元;
               字資料的高位位元組存放在高地址記憶體單元;
          ② 取低地址記憶體單元地址作為字資料地址。

資料在記憶體和CPU之間的傳送

           要在CPU和記憶體單元之間傳送資料,就必須知道記憶體單元的地址。

           DS: 資料段段暫存器,用於存放資料段的「段地址」。

          說明:
               (1)將一段記憶體用作資料段,是程式設計時的一種安排;
                 (2)  在mov, add, sub等彙編指令中,訪問記憶體單元時,預設情況下,指的是資料段。

彙編指令mov, add, sub

            兩個運算元長度要一致

                   例:
                            mov ax, cl   ×          mov ax, cx     √  
                            mov al, 300 ×   mov ax, 300   √ 

            關於常數(也叫立即數)

                     不能作為第1個運算元(目的運算元)
                     作第2個運算元(源運算元)時,如果最高位是十六進位制的a~f或A~F,前面要加零!

                            例:
                                   mov 4000H, ax ×     mov ax, 4000H     √
                                   mov ax, A400H ×     mov ax, 0A400H   √

注: 運算元是記憶體單元時,指令中只給出「偏移地址」。
      預設,「段地址」在ds中。

注: 運算元是記憶體單元時,指令中只給出「偏移地址」。
      預設,「段地址」在ds中。

「棧」是一個邏輯上的概念。可以將一段記憶體空間當作「棧」來使用。

                 棧的特性: 後進先出
                 兩個概念: 棧底、棧頂
                 兩個操作: 入棧、出棧
                 一個約定: 8086中棧以字為存取單位

         棧頂:  最後入棧的字資料所對應的地址單元
         棧底:  固定的一端,棧區最高地址單元的前一個單元          入棧:  把資料存入棧
         出棧:  從棧取出資料            SS: 棧段段暫存器,用於存放棧段的「段地址」
         SP: 棧指標暫存器,用於存放棧頂的偏移地址。          SS:SP對應的實體地址是棧頂的實體地址                        (SS) × 16 + (SP)  → 棧頂的實體地址   操作指令: push和pop           

        在push  記憶體單元和pop 記憶體單元中,指令中只需給出「偏移地址」。預設,段地址在DS中。

                          對8086CPU而言,push和pop的操作:
                          入棧和出棧均以字為單元
                          操作物件不能是常數
                          pop 段暫存器中,段暫存器不能是CS和SS

小結

(1) 「段」是一個邏輯上的概念。
    程式設計時,可根據需要指定一段記憶體區用作資料段、程式碼段或是棧段。

(2) 用作資料段時,要把段地址→DS
     用作棧段時,要把段地址→SS,棧頂偏移地址 → SP
 用作程式碼段時,段地址→CS,要取的指令偏移地址→IP。但CS和IP的值不能使用mov改變。

(3)  一段記憶體可以同時用作程式碼段、資料段、棧段。
     由程式設計時靈活確定。

(4)  在8086CPU中,每個段的最大長度不能超過64KB。
(因為暫存器是16位的,能表示的地址範圍只能是0000H~FFFFH,即0~216-1)