8086處理器的記憶體定址方式主要分三種
暫存器定址
立即定址
記憶體定址(也有書叫儲存器運算元定址)
暫存器定址
最簡單的定址方式就是暫存器定址。也就是指程式執行時,操作的數就存放在暫存器當中,可以直接從暫存器中取得。例如:
mov ax ,bx
mov cx ,0xf000
inc cx
這些都涉及了暫存器定址。
第二條指令中的目的運算元是暫存器定址方式,因此該運算元也是暫存器定址
立即定址
立即定址,有些書上也叫立即數定址。也就是運算元是乙個立即數,例如:
mov bx ,0xf000
mov dx ,label_a
第一條的目的運算元是暫存器定址,源運算元則是直接給出的數值,參與運算的時候不需要通過其他方式進行查詢。
第二條指令中的目的運算元是暫存器定址方式,源運算元是乙個標號,在組合語言中,標號是數值的等價形式,代表了它所在位置的彙編位址,在編譯過程中,它會被編譯器轉換為乙個立即數。
暫存器定址和立即數定址都是速度較快的定址方式,但也有侷限性,暫存器定址需要資料在暫存器間不斷的倒騰,有時候暫存器數量還不夠用。立即數定址則不太靈活,有的時候並不知道這個資料是多少;有的時候用立即數也會使程式很難改動。
記憶體定址
記憶體定址是一類定址方式,具體可分為四種或五種(不同的書這個分類不太一樣)方式。
直接定址
暫存器間接定址
基址定址
變址定址
基址加變址定址
直接定址
mov [0x5000] ,ax
mov word [0x2000] ,0x5000
xor byte [es:label_a] ,0x05
這三條指令中的目的運算元都是採用的直接定址方式。
凡是表示位址用來定址的運算元,都要用』'括起來,如果第一條指令寫成mov 0x5000 ,ax
,這很明顯是錯的,立即數怎麼能作為傳送的目標呢。
第三條指令目的運算元使用的段超越和標號,但由於標號在編譯階段就換成了數值,所以還是直接定址方式。
暫存器間接定址
mov bx ,0xb800
mov byte [bx] ,0x31
暫存器間接定址在用法上有一些限制,並不是所有的暫存器都可以像例子中的bx
那樣使用,像ax
cx
等就不行。只有一些特定的通用暫存器才能夠作為間址存器使用,如下表:
間址暫存器和約定訪問的邏輯段
間址暫存器
預設訪問的邏輯段
定址位數
bp堆疊段
16位bx、si、di
資料段16位
ebp、esp
堆疊段32位
eax、ebx、ecx、edx、esi、edi
資料段32位
預設訪問的邏輯段就是在使用暫存器間接定址時,如果不使用段超越的方式直接指明訪問的邏輯段,程式會按照上表所示的段進行訪問。
基址定址
基址定址是使用基址暫存器進行記憶體訪問的定址方式,在8086微處理器中就有乙個基址暫存器bx
和基址指標暫存器bp
。
基址定址方式所採用的方式,還有一些限定條件和暫存器間接定址差不多,有些書上還將偏移加了進去,即如下指令所示:
mov bx ,0xb800
mov byte [bx+0x01] ,0x30
mov byte [bx+0x01] ,0x31
還有就是限定條件上將一些變址暫存器從上表中剔除,也就變成了下表所示:
基址暫存器和約定訪問的邏輯段
基址暫存器
預設訪問的邏輯段
定址位數
bp堆疊段
16位bx
資料段16位
ebp、esp
堆疊段32位
eax、ebx、ecx、edx、esi、edi
資料段32位
**《 基址暫存器和約定訪問的邏輯段》較之**《 間址暫存器和約定訪問的邏輯段》少了si
和di
兩個變址暫存器。
這種定址方法將偏移加進去,使用上就顯得更方便了,可以將基址暫存器指定資料表中訪問的起始點,進而改變偏移即可。
變址定址
變址定址類似與基址定址,不同的是這種定址方式使用的是變址暫存器(有些書上也稱索引暫存器),例如:
mov [si] ,dx
mov ax ,[di]
mov byte [si+0x01] ,0x31
在32位機上也有一些通用暫存器作為變址暫存器使用,
使用的時候可加比例因子,例如:
mov ah ,[4*ebx+3]
比例因子只能是:1、2、4、8中的乙個數
具體暫存器如下表:
變址暫存器和約定訪問的邏輯段
變址暫存器
預設訪問的邏輯段
定址位數
si、di
資料段16位
ebp堆疊段
32位eax、ebx、ecx、edx、esi、edi
資料段32位
無比例因子的變址定址只能用si
和di
,當然在8086上也只有這兩個可以做變址暫存器了。
基址加變址定址
基址加變址定址更像是基址定址和變址定址的組合了,不過這種定址方式也能帶來一些便利,處理一些更加複雜的任務,例如對二維陣列的訪問。
5種不同的記憶體定址方式有各自的特點和應用場景:直接定址更適用於訪問單個記憶體運算元;暫存器間接定址、基址定址和變址定址更適用於訪問連續排列規律的多個記憶體運算元;基址加變址定址則更多用於訪問二位陣列和資料結構體。實際程式設計應根據程式中的資料結構特點合適選擇相應的定址方式
8086 8088 處理器結構
8088共有8個通用暫存器,1個標誌暫存器 4個段暫存器和1個指令指標暫存器。一 通用暫存器 資料暫存器 共ax bx cx dx四個,每個暫存器即可作為16位暫存器,又可拆分為兩個8位暫存器,此時記為ah al bh bl等。ax ah al 累加器accumulator bx bh bl 基址暫...
4 處理器排程
4.1 cpu排程的相關概念 cpu排程 按照一定的排程演算法從就緒佇列中選擇乙個程序,把cpu的使用權交給被選中的程序,其任務就是控制 協調程序對cpu的競爭。如果沒有就緒程序,系統會安排乙個系統空閒程序或idle程序。cpu排程所面臨的場景 系統中有n個程序,等待上cpu執行,而有m個cpu,m...
ARM 處理器定址方式
2007 10 26 13 35 arm 處理器定址方式 定址方式是根據指令中給出的位址碼欄位來實現尋找真實運算元位址的方式,arm處理器有 9 種基本定址方式。1 暫存器定址 mov r1,r2 r2 r1 sub r0,r1,r2 r1 r2 r0 指令執行時直接取出暫存器值操作。2 立即定址 ...