第二章 處理器結構

紺香零八發表於2020-09-23

處理器的功能結構

處理器的基本結構

低端處理器一般由算術邏輯單元、暫存器和指令處理單元等幾部分組成,典型的8位處理器的基本結構如下圖所示
在這裡插入圖片描述

在這裡插入圖片描述

  • 算術邏輯單元(Arithmetic Logic Unit,ALU)
    計算機的運算器,負責處理器所能進行的各種運算,主要就是算術運算和邏輯運算
    基本的ALU由加法器電路構成,操作的資料來自通用暫存器或主存,運算結果返回暫存器或主存。
    累加器(Accumulator) 結構的處理器,
    累加器提供一個運算元,暫存器提供另一個運算元,運算後,累加器儲存運算結果。
    標誌(Flag)暫存器,也稱為程式狀態字(PSW)
    反映運算結果的輔助資訊(eg.有無進錯位、是否為0、是否為負)
    例如:有無進借位、是否為零、是否為負等
  • 暫存器(Register)
    處理器內部需要高速儲存單元,用於暫時存放程式執行過程中的程式碼和資料
    *從應用角度可以將暫存器分為:透明暫存器和可程式設計暫存器
    透明暫存器 對應用人員不可見、不能直接控制的暫存器
    可程式設計(Programmable)暫存器 具有引用名稱、供程式設計使用
    *可程式設計暫存器可進一步分為通用暫存器和專用暫存器
    通用暫存器 數量較多、使用頻度較高,具有多種用途(eg.存放指令需要的運算元據、存放地址以便在主存或I/O介面中指定運算元據的位置)
    專用暫存器 只用於特定目的(eg.程式計數器[Program Counter,PC]用於記錄將要執行指令的主存地址)
  • 指令處理單元
    處理器的控制單元,它控制指令的執行和資訊的傳輸
    指令執行的過程
    取指:指令處理單元將指令從主存取出,並通過匯流排傳輸到處理器內部的指令暫存器
    譯碼:指令處理單元通過指令譯碼電路獲得該指令的功能
    執行:指令處理單元的時序和控制邏輯按一定的時間順序發出和接收相應訊號,完成指令所要求的操作

8086的功能

在這裡插入圖片描述

  • 匯流排介面單元(Bus Interface Unit,BIU)和執行單元(Execution Unit,EU)
    匯流排介面單元
    由6個位元組的指令佇列(即指令暫存器)、指令指標IP(等同於程式計數器PC的功能)、段暫存器(CS、DS、SS和ES)、地址加法器和匯流排控制邏輯等構成,管理著8086與系統匯流排的介面,負責處理器對儲存器和外設訪問。8086引腳由16位雙向資料匯流排、20位地址匯流排和若干控制匯流排組成。8086所有的對外操作必須通過BIU和這些匯流排進行。eg.從主存中讀取指令、從主存或外設讀取資料、向主存或外設寫出資料
    執行單元
    由ALU、通用暫存器、標誌暫存器和控制電路構成,負責指令譯碼、資料運算和指令執行。
    指令執行的兩個主要階段:取指和執行
    取指:從主存取出指令程式碼進入指令佇列。在8086處理器中,指令在儲存器中的地址由程式碼段暫存器CS和指令指標IP共同提供,再由地址加法器得到20位儲存器地址。BIU負責從儲存器取出這個指令程式碼,送入指令佇列。
    執行:譯碼指令、併發出有關控制訊號實現指令功能。在8086處理器中,執行單元EU從指令佇列中獲得預先取出的指令程式碼,在EU控制電路中進行譯碼,然後發出控制訊號由算術邏輯單元進行資料運算、資料傳送等操作。指令執行過程需要的運算元據來自處理器內部的暫存器,有些則來自指令佇列、自儲存器和外設。
  • 指令預取(Prefetch)
    *8086處理器維護著長度為6個位元組的指令佇列
    EU單元譯碼、執行指令,同時BIU單元讀取後續指令
    *BIU和EU兩個單元相互獨立,可以並行操作,即在EU單元對一個指令進行譯碼執行時,BIU單元可以同時對後續指令進行讀取。所以:8086處理器的指令讀取,實際上是指令預取
    *由於要譯碼執行的指令已經預取到處理器內部的指令佇列,所以8086不需要等待取指操作就可以從指令佇列獲得指令進行譯碼執行。
    *最簡單的指令流水線技術
    *節省許多取指時間,提高了工作效率
    *程式轉移將使預取指令作廢,降低了流水線效率

80386的功能結構

匯流排介面單元:為處理器提供同外部的介面
指令預取單元:先行讀取指令
指令譯碼單元:從預取佇列中取來指令,譯碼成微指令程式碼
執行單元:ALU、乘法器、除法器和移位器等
分段單元:邏輯地址變換成線性地址
分頁單元:將線性地址變換成實體地址

各功能部件可以並行工作,進行流水線處理
在這裡插入圖片描述

Pentium的結構

  1. 超標量流水線:2條指令流水線
  2. 分離Cache:指令Cache和資料Cache
  3. 動態分支預測:預測程式執行順序
  4. 其他
    效能增強的浮點處理單元FPU
    常用指令固化
    改進複雜指令的微程式碼演算法
    節能特性
    電源電壓:3.3V
    在這裡插入圖片描述

暫存器

暫存器就是暫時存放資料的地方
通過編寫程式、由處理器執行指令控制直接暫存器
IA-32處理器通用指令(整數處理指令)基本執行環境:8個32位通用暫存器、6個16位段暫存器、32位標誌暫存器、32位指令指標

對應用人員(程式設計師)來說,
處理器被抽象為可程式設計暫存器

?圖為IA-32常用暫存器(圖中31、15、7、0等依次表達二進位制位)
在這裡插入圖片描述

通用暫存器(General-Purpose Register)

處理器最常使用的整數通用暫存器,可用於儲存整數資料、地址等
8個32位通用暫存器(E(Extended)表達擴充套件含義)
EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP
8個16位通用暫存器,分別表示相應32位通用暫存器低16位部分
AX,BX,CX,DX,SI,DI,BP,SP
8個8位通用暫存器
AH,AL,BH,BL,CH,CL,DH,DL

存取16位暫存器,高16位不受影響
存取8位暫存器,16/32位暫存器其他位不受影響

通用暫存器的名稱
EAX:累加器(Accumulator),使用頻度最高,用於算術運算、邏輯運算乙級與外設傳送資訊
EBX:基址暫存器(Base),常用來存放儲存器地址,以方便指向變數或陣列中的元素
ECX:計數器(Counter),作為迴圈操作等指令中的計數器。
EDX:資料暫存器(Data),用來存放資料,其中低16位DX常用來存放外設埠地址
ESI:源變址暫存器(Source Index),用於指向字串或陣列的源運算元。源運算元是指被傳送或參與運算的運算元
EDI:目的變址暫存器(Destination Index),用於指向字串或陣列的目的運算元。目的運算元是指儲存傳送結果或運算結果的運算元。
EBP:基址指標暫存器(Base Pointer),預設情況下指向程式堆疊區域的資料,主要用於在子程式中訪問通過堆疊傳遞的引數和區域性變數
ESP:堆疊指標(Stack Pointer),專用於指向程式堆疊區域頂部的資料,在涉及堆疊操作的指令中會自動增加或減少。
堆疊Stack是一個特殊的儲存區域,(FILO)。呼叫子程式,用於暫存資料、傳遞引數、存放區域性變數、臨時儲存資料。堆疊指標會隨著處理器執行有關指令自動增大/減少,所以ESP(SP)應該作為專用暫存器對待;但是ESP又可以像其他通用暫存器一樣靈活地改變。

標誌暫存器EFLAGS

標誌(Flag)
反映指令執行結果或控制指令執行形式。
處理器中用一個或多個二進位制位表示一種標誌,0或1的不同組合表達標誌的不同狀態,8086支援16位標誌暫存器FLAGS,IA-32處理器形成32位EFLAGS標誌暫存器。
在這裡插入圖片描述

狀態標誌:記錄指令執行結果的輔助資訊,加減運算和邏輯運算指令是主要設定狀態標誌的指令。有6個,處理器主要使用其中5個構成各種條件,分支指令判斷這些條件實現程式分支。
它們從低位到高位:進位標誌(Carry Flag,CF)、奇偶標誌(Parity Flag,PF)、調整標誌(Adjust Flag,AF)、零標誌(Zero Flag,ZF)、符號標誌(Sign Flag,SF)、溢位標誌(Overflow Flag,OF)
控制標誌:方向標誌(Direction Flag,DF),僅用於串操作指令,控制地址的變化方向。處理器執行CLD指令設定DF=0,每次串操作後的儲存器地址自動增加,從低地址像高地址處理;執行STD則反之。
系統標誌:控制作業系統或核心管理程式的操作方式
中斷允許標誌IF(Interrupt-enable Flag)或簡稱中斷標誌,用於控制外部可遮蔽中斷是否可以被處理器響應。執行STI指令,IF=1允許中斷;執行CLI指令則反之。
陷阱標誌(Trap Flag,TF)也常稱作單步標誌,用於控制處理器是否進入單步操作。TF=1執行,處理器在每條指令執行結束時便產生一個內部中斷,單步除錯。
I/O特權層標誌IOPL(I/O Privilege Level)
任務巢狀標誌NT
虛擬8086方式標誌VM
恢復標誌RF
對齊檢測標誌AC
CPU識別標誌ID(Identification Flag)
虛擬中斷標誌VIF
虛擬中斷掛起標誌VIP
在這裡插入圖片描述

專用暫存器

專用暫存器往往只用於特定指令或場合

  1. 指令指標暫存器EIP
    儲存將要執行的指令在主存的地址,這個位置用儲存器地址表示,儲存器地址儲存在程式計數器PC中。
  2. 段暫存器
    段是安排相關程式碼或資料的主存區域
    段暫存器表明段在主存中的位置
    6個16位段暫存器:程式碼段暫存器【存放程式中指令程式碼的程式碼塊】(Code Segment,CS) 堆疊段暫存器【存放當前執行程式所用的資料的資料段】( Data Segment,DS) 資料段暫存器【指明程式使用的堆疊區域的堆疊塊】(Stack Segment,SS) 附加段暫存器 ES FS GS
  3. 其他暫存器
    浮點暫存器、多媒體暫存器
    系統專用暫存器

儲存器組織

實體地址(Physical Address):物理儲存器以位元組為基本儲存單位,每個儲存單元被分配一個唯一的地址
實體地址空間從0開始順序編排,直到處理器支援的最大儲存單元
8086處理器支援1MB儲存器:00000H~FFFFFH(0-2的20次方-1)
IA-32處理器支援4GB儲存器:00000000H~FFFFFFFFH(0-2的32次方-1)
作業系統利用儲存管理單元進行儲存管理,程式並不直接定址物理儲存器
IA-32處理器提供3種儲存模型,用於程式訪問儲存器

儲存模型

作業系統利用儲存單元進行儲存管理,程式並不直接定址物理儲存器。IA-32處理器提供了3種儲存模型(Memory Model)用於程式訪問儲存器

  1. 平展儲存模型(Flat memory model)
    儲存器是一個連續的地址空間--線性地址空間
    IA-32處理器支援4GB(0-2的32次方-1)容量線性地址空間
  2. 段式儲存模型(Segmented memory model)
    儲存器由一組獨立的地址空間--段(Segment)組成
    每個段都可以達到4GB容量
    在處理器內部,所有的段都被對映到線性地址空間
    通常,程式碼、資料和堆疊位於分開的段中,程式利用邏輯地址定址段中的每個位元組單元。
  3. 實地址儲存模型(Real-address Mode memory model)
    8086處理器的儲存模型
    段式儲存模型的特例
    線性地址空間最大為1MB容量,段最大為64KB

工作方式

  1. 保護方式(Protected mode)
    IA-32處理器固有的工作狀態
    具有強大的段頁式儲存管理和特權與保護能力
    使用全部32條地址匯流排,可定址4GB物理儲存器
    使用平展或段式儲存模型
    利用虛擬8086方式支援實地址8086軟體
  2. 實地址方式(Real-address mode)
    可以進行32位處理的快速8086
    只能定址1MB物理儲存器空間,每個段不超過64KB
    可以使用32位暫存器、32位運算元和32位定址方式
    只能支援實地址儲存模型
  3. 系統管理方式(System Management mode)
    實現節能和系統安全管理

邏輯地址

在處理器內部、程式設計師程式設計時採用的地址
邏輯地址=段基地址∶偏移地址(Offset)
段基地址=在主存中的起始地址
偏移地址=距離段基地址的位移量
某個儲存單元可以有多個邏輯地址,但只有一個唯一的實體地址
在這裡插入圖片描述
在這裡插入圖片描述

  1. 基本段
    編寫應用程式時,涉及三類基本段:
    程式碼段(Code Segment):存放指令程式碼
    程式的指令程式碼必須安排在程式碼段段基地址:程式碼段暫存器CS指示
    程式的資料預設存放在資料段,資料也可放在其他段
    偏移地址:指令指標暫存器EIP儲存
    資料段(Data Segment):存放資料
    段基地址:資料段暫存器DS指示
    有時也用附加段暫存器ES,段暫存器FS和GS指示
    偏移地址:各種儲存器定址方式計算出來
    堆疊段(Stack Segment):堆疊區域
    程式使用的堆疊一定在堆疊段
    基本段的邏輯地址SS:ESP
    段基地址:堆疊段暫存器SS指示
    偏移地址:堆疊指標暫存器ESP儲存
  2. 段選擇器
    16位段暫存器儲存16位段選擇器(Segment Selector)
    段選擇器指向64位段描述符(Descriptor),段描述符包括段基地址
    平展儲存模型:指向地址0位置
    段式儲存模型:指向線性地址空間不同的段
    實地址儲存模型:儲存段基地址的高16位
    在這裡插入圖片描述
  3. 保護方式的地址轉換
    平展儲存模型
    段基地址為0,偏移地址等於線性地址
    段式儲存管理
    段基地址和偏移地址都是32位
    段基地址加上偏移地址形成線性地址
    線性地址對映到實體地址
    不使用分頁機制:線性地址與實體地址對應
    使用分頁機制:硬體支援下由作業系統或核心程式管理,構成虛擬儲存器,轉換成實體地址
    4.實地址方式的地址轉換
    主存空間1MB(=220 B):00000H~FFFFFH
    程式設計時分段管理,但有兩個限制:
    每個段最大為64KB(2的16次方位元組)
    段只能開始於低4位地址全為0的實體地址處
    邏輯地址=段地址∶偏移地址
    16位段暫存器儲存20位段起始地址的高16位
    偏移地址也用16位資料表示
    實體地址=段地址×16?+偏移地址
    在這裡插入圖片描述
    在這裡插入圖片描述

組合語言基礎

組合語言以助記符形式表示計算機指令
助記符(mnemonic)是便於人們記憶、並能描述指令功能和指令運算元的符號
助記符是表明指令功能的英語單詞或其縮寫
彙編格式指令以及使用它們編寫程式的規則就形成組合語言(Assembly Language)
組合語言程式:用匯編語言書寫的程式
彙編程式:將組合語言程式“彙編”成機器程式碼目標模組的程式
組合語言程式與彙編程式是兩個概念

指令程式碼格式(Instruction format)/機器程式碼格式

IA-32處理器採用可變長度指令格式
操作碼
可選的指令字首(用於擴充套件指令功能)
1~3位元組的主要操作碼
運算元(地址碼)
可選的定址方式域(包括ModR/M和SIB欄位)
可選的位移量
可選的立即數
在這裡插入圖片描述
指令程式碼示例
資料傳送指令MOV(取自Move)
將資料從一個位置傳送到另一個位置,類似高階語言的賦值語句

	mov dest,src
	;源運算元src:被傳送的資料或資料所在的位置
	;目的運算元dest:資料將要傳送到的位置

	mov eax,ebx	    ; 機器程式碼:8B C3
	mov eax,[ebx]	; 機器程式碼:8B 03
	mov eax,[ebx+esi*4+80h] ; 機器程式碼:8B 84 B3 80 00 00 00

在這裡插入圖片描述

語句格式

程式由語句組成
一個語句常佔一行(MASM有續行符“\”)
一個語句不超過132個字元,4個部分
執行性語句:表達處理器指令(硬指令)
標號: 硬指令助記符 運算元,運算元 ;註釋
說明性語句:表達偽指令,控制彙編方式
名字 偽指令助記符 引數,引數,…… ;註釋

  1. 標號與名字
    標號:執行性語句中
    冒號分隔;表示處理器指令在主存中的邏輯地址;指示分支、迴圈等程式的目的地址
    名字:說明性語句中
    空格或製表符分隔;變數名、段名、子程式名等;反映變數、段和子程式等的邏輯地址
    識別符號(Identifier)
    最多由31個字母、數字及規定的特殊符號(如 _、$、?、@)組成,不能以數字開頭
    一個源程式中,使用者定義的每個識別符號必須唯一
    不能是彙編程式採用的保留字
    保留字(Reserved Word)
    是程式語言本身需要使用的各種具有特定含義的識別符號、也稱為關鍵字
    硬指令助記符: MOV
    偽指令助記符: BYTE
    操作符: OFFSET
    暫存器名: EAX
    取名原則類似高階語言,預設不區別大小寫字母
    “ OPTION CASEMAP:NONE ” 偽指令,告知MASM 區別使用者定義識別符號的大小寫
  2. 助聽器
    助記符:幫助記憶指令功能的符號
    硬指令助記符對應處理器指令,表示一種處理器操作,偽指令助記符表達一個彙編命令
    處理器指令示例:傳送指令 MOV
    偽指令示例:位元組變數定義
    助記符:BYTE (或DB)
    功能:在主存中佔用若干的儲存空間,用於儲存變數值,該變數以位元組為單位存取
  3. 運算元和引數
    處理器指令的運算元:表示參與操作的物件
    具體的常量;儲存在暫存器的資料;儲存在儲存器中的變數;逗號前常是目的運算元,逗號後常是源運算元
    偽指令的引數:
    常量、變數名、表示式等;可以有多個,引數之間用逗號分隔
  4. 註釋
    語句的4個組成部分要用分隔符分開
    標號後的冒號;註釋前的分號;運算元間和引數間的逗號;分隔其他部分採用一個或多個空格或製表符

源程式框架

; eg0000.asm in Windows Console
include io32.inc	; 包含32位輸入輸出檔案
	.data	; 定義資料段
	……	; 資料定義(資料待填)
	.code	; 定義程式碼段
start:		; 程式執行起始位置
	……	; 主程式(指令待填)
	exit 0	; 程式正常執行結束
	……	; 子程式(指令待填)
	end start	; 彙編結束
  1. 包含偽指令INCLUDE
    將常用的常量定義、過程說明、共享的子程式庫等內容進行宣告(相當於C和C++語言中,包含標頭檔案的作用)
    IO32.INC是配合本書的包含檔案
    前3個語句:
.686	; 32位指令
.model flat,stdcall
	; 選擇平展模型,標準呼叫規範 
option casemap:none
	;告知MASM區分使用者定義識別符號的大小寫
  1. 段的簡化定義
    資料段定義偽指令.DATA建立一個資料段
    程式碼段定義偽指令.CODE建立一個程式碼段
    堆疊段由Windows維護,使用者不必設定
    程式開始執行的位置
    應用一個標號(例如:START)
    彙編結束END指令的引數
    應用程式執行結束
    語句“EXIT 0”將控制權交還作業系統
    提供給作業系統一個返回程式碼
    通常用0表示執行正確
    源程式彙編結束END語句
    執行結束≠彙編結束
    eg.資訊顯示程式
在資料段給出這個字串形式的資訊:
	; 資料段
msg	byte 'Hello, Assembly!',13,10,0
	; 定義要顯示的字串
在程式碼段編寫顯示字串的程式:
	; 程式碼段
	 mov eax,offset msg
	; 指定字串的偏移地址
	call dispmsg
	; 呼叫I/O子程式顯示資訊

; eg0201.asm
	include io32.inc
	.data	; 資料段
msg	byte 'Hello, Assembly!',13,10,0		.code	; 程式碼段
start:		; 程式執行起始位置
	mov eax,offset msg
	call dispmsg
	exit 0	; 程式正常執行結束
	end start	; 彙編結束

;c語言程式
;#include <stdio.h>
;int main()
;{
;	printf("Hello, world !\n");
;	exit(0);
;}
  1. 輸入輸出子程式庫
    鍵盤輸入和顯示器輸出的I/O子程式
    含IO32.INC和IO32.LIB,需要包含檔案宣告
    源程式檔案開始使用包含命令宣告
INCLUDE IO32.INC

子程式呼叫方法

MOV EAX,入口引數
CALL 子程式名

巨集呼叫方法
巨集名 入口引數
在這裡插入圖片描述
*常用輸出子程式
在這裡插入圖片描述
*常用輸入子程式
在這裡插入圖片描述

開發過程

在這裡插入圖片描述

資料定址的方式

指令有兩部分:操作碼和運算元
操作碼:處理器要執行哪種操作,不可缺少,用助記符表示
運算元:指令執行的參與者,各種操作的物件,需要通過地址指示
資料定址方式:通過地址查詢資料(運算元)
立即數定址:資料與指令操作碼一起,用常量表達
暫存器定址:資料在暫存器中,用暫存器名錶示
儲存器定址:資料在主存中,用儲存器地址代表

立即數定址方式

運算元緊跟操作碼,是機器程式碼的一部分
運算元從指令程式碼中立即得到,即立即數(Immediate),用常量形式直接表達
立即數定址方式只用於源運算元,常用來給暫存器和儲存單元賦值
例如:MOV EAX,33221100H
機器程式碼:B8 00 11 22 33
操作碼:B8
立即數:33221100
在這裡插入圖片描述

暫存器定址方式

運算元存放在處理器的內部暫存器中
用暫存器名錶示它的內容
絕大多數指令採用通用暫存器定址
部分指令支援專用暫存器,例如段暫存器
暫存器定址方式簡單快捷,最常使用
例如:MOV EBX,EAX
32位通用暫存器:EAX EBX ECX EDX ……
16位通用暫存器:AX BX CX DX ……
8位通用暫存器:AH AL BH BL ……

儲存器定址的方式

運算元在主存中,通過儲存器地址指示
程式設計時,儲存器地址使用包含段選擇器和偏移地址的邏輯地址
*段選擇器(段暫存器)指示段基地址
預設規定:資料在DS指向的資料段;EBP或ESP作為基地址,資料在SS指向的堆疊段
顯式說明:使用段超越指令字首,段暫存器名後跟英文冒號
*偏移地址由各種定址方式計算,常被稱為有效地址EA(Effective Address)

  1. 段暫存器的預設和超越
    在這裡插入圖片描述
    主存運算元常通過變數形式引用,一般不需要使用段超越字首指令
  2. 偏移地址的組成
    32位有效地址 = 基址暫存器+(變址暫存器×比例)+位移量
    基址暫存器:任何8個32位通用暫存器之一
    變址暫存器:除ESP之外的任何32位通用暫存器之一
    比例:1,2,4或8
    位移量:8或32位有符號值
    16位有效地址 = 基址暫存器+變址暫存器+位移量
    基址暫存器:BX或BP
    變址暫存器:SI或DI
    位移量:8或16位有符號值
    多種主存定址方式
  3. 直接定址
    有效地址只有位移量部分,直接包含在指令程式碼中
    常用於存取變數
    例如:
MOV ECX,COUNT  ;COUNT是變數
MOV ECX, DS:[405000H]

指令程式碼:8B 0D 00 50 40 00
操作碼和定址方式:8B 0D
運算元:有效地址 00405000H
在這裡插入圖片描述
4. 暫存器間接定址
有效地址存放在暫存器中(暫存器內容=偏移地址)
MASM用中括號括起暫存器
可以方便地對陣列的元素或字串的字元進行操作
暫存器間接定址沒有說明儲存單元型別
例如:

mov edx,[ebx]
mov [esi],ecx
  1. 暫存器相對定址
    有效地址是暫存器內容與位移量之和
    也可以方便地對陣列的元素或字串的字元進行操作
    例如:
mov esi,[ebx+4]	;位移量:4
mov edi,[ebp-08h]	;位移量:-08H
mov esi,count[ebx]	;位移量:COUNT

主存以位元組為可定址單位,地址的加減是以位元組為單位
6. 變址定址
使用變址暫存器定址運算元
便於支援兩維陣列等資料結構
例如:

mov edi,[ebx+esi]
mov edi,[ebx][esi]
; 基址變址定址,功能:EDI=DS:[EBX+ESI]
mov eax,[ebx+edx+80h]
mov eax,80h[ebx+edx]
mov eax,80h[ebx][edx]
;相對基址變址定址
功能:EAX=DS:[EBX+EDX+80H]
  1. 帶比例的變址定址
    變址暫存器內容乘以比例1(可省略),2,4或8的變址定址
    比例1、2、4和8對應8、16、32和64位資料的位元組個數,便於以陣列元素為單位定址相應資料
    例如:
mov eax,[ebx*4]	    ; 帶比例的變址定址
mov eax,[esi*2+80h] ; 帶比例的相對變址定址
mov eax,[ebx+esi*4] ; 帶比例的基址變址定址
mov eax,[ebx+esi*8-80h] ; 帶比例的相對基址變址定址

各種資料定址方式的總結

立即數 imm
通用暫存器 reg
儲存器運算元 mem
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

相關文章