1. 程式人生 > >彙編總結2

彙編總結2

一、暫存器

一個典型的cpu是由運算器,控制器,暫存器等器件組成的。

內部匯流排實現CPU內部各個器件之間的聯絡

外部匯流排實現cpu和主機板上其他器件的聯絡

AX,BX,CX,DX通用暫存器

SI,DI,BP,SP基址和變址暫存器

CS,SS,DS,ES段暫存器

IP,FLAGS指令指標和標誌暫存器

通用暫存器

8086cpu中,暫存器AX,BX,CX,DX通常用於存放一般性資料,稱為通用暫存器,每個暫存器都是16位

為了和早期CPU相容每一個暫存器都拆成了兩個暫存器單獨使用

AX分為AH和AL

字在暫存器中的存放

一個字由兩個位元組組成可以存在一個16位暫存器

字的高八位:存放於通用暫存器的高八位暫存器

字的低八位:存放於通用暫存器的低八位暫存器

MOV AX,20000  ; (AX)=4E20H

                             (AH)=4EH

                             (AL)=20H

 

彙編指令

mov ax,18   將18送入暫存器AX   AX=18

add ax,8 將暫存器AX中的數值加上8  AX=AX+8

mov ax,bx 將暫存器bx中的資料送入暫存器ax  AX=BX

add ax,bx 將AX和BX中的數值相加,結果存放在AX中 AX=AX+BX

mov ax,bl 是錯誤的指令原因是指令的兩個操作物件位數不一樣

實體地址

cpu訪問記憶體單元時要給出記憶體單元的地址

所有的記憶體單元構成的儲存空間是一個一維的線性空間。每一個記憶體單元在這個空間中都有唯一的地址,這個唯一的的地址稱為實體地址。

8086的內部用兩個16位地址通過計算合成得到一個20位的實體地址。

如:1230H*16+00C8H=123C8H

  段地址*16+偏移地址=實體地址

123CH*16+0008H=123C8H

理解成段的起始實體地址是:123C0H

段地址:偏移地址 1230:00C8或123C:0008

可以根據需要,將地址連續、起始實體地址為16倍數的一組記憶體單元當做一個段使用

CS和IP

CS:程式碼段暫存器,用於存放程式碼段的[段地址]

IP:指令指標暫存器,用於存放cpu將要讀取的指令在程式碼段中的偏移地址

CS:IP對應的實體地址存放的cpu將要讀取的指令

CS*16+IP是指令的實體地址

計算機工作的步驟

cpu基於CS:IP,計算出實體地址,然後得到相應的記憶體單元讀取指令,送到指令緩衝區

cpu自動修改IP的值,IP=IP+所讀取指令的長度,從而為下一條指令讀取做準備

執行指令 轉到第一步

IP和CS值的修改不能通過mov指令實現,需要藉助轉移指令(jmp,call)

同時修改CS IP的內容:jmp 段地址:偏移地址

比如jmp 2AE3:3 ;CS<-2AE3H

                             IP<-3H

只修改IP內容:jmp 某一合法暫存器

比如jmp AX ;IP<-AX