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

匯編總結2

合成 內存 tro add nbsp 緩沖 數據 mov指令 使用

一、寄存器

一個典型的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

匯編總結2