1. 程式人生 > >組合語言資料定址方式

組合語言資料定址方式

資料定址方式

1、 立即數定址

立即數定址:指令需要的運算元緊跟在操作碼之後稱之為指令機器碼的一部分,並隨著處理器的取址操作需要從主存進入指令暫存器。這些運算元用常量形式直接表達,從指令程式碼中立即得到立即數,立即數定址方式只用於指令的原運算元,在傳送指令過程中常用來給暫存器和儲存單元賦值。

2、 暫存器定址
指令的運算元存放在處理器的暫存器中,就是暫存器儲存方式絕大多數的指令採用通用暫存器定址(IA-32處理器是:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP其支援的16位形式:AL,AH,BL,BH,CL,CH,DL,DH),部分支援專用暫存器,如段暫存器和標誌暫存器。

3、 儲存器定址

  1. 1、 段暫存器的預設和超越

段暫存器(段選擇器)有預設的使用規則。一般是DS段暫存器指向的是資料段,如果採用的是EBP(BP)或者是ESP(SP)做基地址指標,則預設SS段暫存器指向堆疊段。

  1. 2、 偏移地址的形成

由於段基地址由預設的或者是指定的段暫存器,所以儲存器運算元定址使用的偏移地址常稱為有效地址。
在這裡插入圖片描述

  1. 3、 直接地址

有效部分只有位移量部分,且直接包含在指令程式碼中,就是儲存器的直接定址方式,直接尋常用於存取變數。
例如:mov ecx,count;mov ecx,[count];//count分配的有效地址是常量。源運算元採用直接定址。

  1. 4、 暫存器間接定址

有效地址存放在暫存器當中,就是採用暫存器間接定址儲存器運算元(暫存器內容=偏移地址=有效地址)。暫存器間接定址的資料由另外一個運算元的暫存器或者是變數型別決定。
mov edx,[ebx];雙字傳送ebx簡介定址主存資料段
mov cx,[esi];字傳送,esi間接定址貯存資料段
mov [edi],al;位元組傳送,edi間接定址主存資料段
mov [ebp],edx;雙字傳送,ebp間接定址貯存資料段
暫存器間接定址的運算元沒有型別,其型別是由另外一個運算元的暫存器或變數決定的,若另外一個運算元也是無型別(立即數),需要顯示說明。

  1. 5、 暫存器相對定址

暫存器相對定址的有效地址是暫存器內容與位移量之和
mov esi,[ebx+4;源運算元也可以表達為[4][ebx]或者4[ebx]

  1. 6、 變址定址

使用變址暫存器定址運算元成為變址定址,在變址暫存器不帶比例的(或者比例為0)情況下需要配合使用一個基址暫存器(成為基址變址定址方式),還可以再包含一個位移量(成為相對基址變址定址),儲存器運算元的有效地址由一個基址暫存器的內容加上變址暫存器的內容或再加上位移量構成。
mov eax,[ebx+esi]或mov eax,[ebx][esi]
mov eax,[ebx+edx+80h]或
mov eax,80h[ebx+edx]或
mov80h[ebx][edx]

  1. 7、 帶比例的變址定址

對應使用變址暫存器的儲存器定址
mov eax,[ebx4];帶比例的變址定址
mov eax,[esi
2+80h];帶比例的相對基址變址定址
mov eax,[ebx+esi4];帶比例基址變址定址
mov eax,[ebx+esi
8-80h];帶比例的相對基址變址定址

3.8資料定址方式的組合

1、 立即數定址
立即數定址只可以用於源運算元
2、 暫存器定址
暫存器定址主要用於通用儲存器,可以單獨或同時用於源運算元和目的運算元IA-32處理器的通用暫存器reg包括八個32位通用暫存器r32:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP;8個16位通用暫存器:AX,BX,CX,DX,SI,DI,BP,SP;八個8位通用暫存器r8:AH,AL,BH,BL,CH,CL,DH,DL,部分指令可使用專用暫存器如段暫存器seg:CS,DS,SS,ES,FS,GS
3、 儲存器定址
儲存器定址的資料在記憶體,利用邏輯地址表示。段基地址由預設的或者是指定的段暫存器指出,指令程式碼只含偏移地址(稱為有效地址),有多種儲存器定址方式。儲存器運算元可以是32位、16位或者是8位資料,依次用符號m32,m16,m8表示,統一用mem表示。
在這裡插入圖片描述
典型的指令運算元有兩個,一個是書寫在左邊的(稱之為目的運算元DEST),另外一個用逗號分隔書寫在右邊(稱之為源運算元SRC)。資料定址方式在指令中並不是任意組合的,而是有規律的且符合邏輯的。源運算元可以由立即數,儲存器,暫存器定址,而目的運算元只能是暫存器或者是儲存器定址,並且兩個運算元不能同時為儲存器定址方式。