彙編總結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