組合語言入門:幾種定址方式之比較
考慮到上一章的“定址方式”太重要了,遂單獨成章,作文於此
直接定址
適用於偏移地址為[idata]
的情形
CS: IP存放程式碼指標(2000: 000E)
地址加法器合成CS和IP的值為一個實體地址(CPU只能看懂實體地址,2000E)
通過地址匯流排傳送該地址,找到符合該地址的記憶體單元(下圖,三位元組長度,根據首地址2000E讀取到的指令是A10E00)
把讀到的指令A10E00送入指令緩衝暫存器,同時IP增加指令長度(為讀取下一條指令做準備)
現在我們讀指令就直接看指令緩衝器好了,根據指令緩衝器(機器碼,表示的內容就是MOV AX, DS:[000E]),把立即數000E和DS段暫存器DS的值在地址加法器合成後得到的值,送入暫存器AX中(這都是指令的內容)
既然指令是這麼說的,那我們就這麼做(送入AX)……
呼,終於完成了。
暫存器間接定址
適用於偏移地址為[bx]、[si]、[di]、[bp]
的情形
首先CS:IP指向程式碼段(記憶體對應單元)地址,合成為實體地址
然後根據該實體地址(2011)索引到相應的程式碼
接著把讀到的指令送入指令緩衝器
到目前為止,和直接定址沒有區別。不過現在要讀取並緩衝器的執行指令了;不同的是,暫存器間接定址的偏移地址在BX中讀取(段地址當然還是DS)
然後就執行指令,改變AX暫存器的值唄……
暫存器相對定址
適用於偏移地址為[BX+idata]、[SI+idata]、[DI+idata]、[BP+idata]
不變的CS:IP定址……
找到2013對應的記憶體單元,讀取指令程式碼
將指令送入指令緩衝器儲存,IP增加
根據指令讀取並執行;注意這裡有三個資料進入地址加法器(BX、DS、idata)
三位一體,合成物理地址……
根據實體地址找到對應的記憶體單元(這時候8B00這個記憶體單元看成是資料)
成功讀取到8B00的資料,送入覆蓋AX的值
基址變址定址
適用於偏移地址為[BX+SI]、[BX+DI]、[BP+SI]、[BP+DI]
的情形
開始的CS:IP我都懶得寫了
根據實體地址找到對應的記憶體單元
讀取指令,存進指令緩衝器,IP相應增加
注意段地址來自DS,偏移地址來自BX和SI(哦,還是三位一體)
那就三位合一,進入地址加法器,BOOM!產生了一個實體地址078B(對應資料)
找到這個實體地址對應的值,寫入AX暫存器中
相對基址變址定址
適用於[BX+SI+idata]、[BX+DI+idata]、[BP+SI+idata]、[BP+DI+idata]
的情形
最後寫一次,CS:IP……
然後根據指令指標找指令咯……
找到的指令放入緩衝器喲……
讀取並執行緩衝器的指令嗬……
找資料啊喂……
寫資料嘿嘿……
至此,定址的三種方式全部講解完畢!(撒花。)
相關推薦
組合語言入門:幾種定址方式之比較
考慮到上一章的“定址方式”太重要了,遂單獨成章,作文於此 直接定址 適用於偏移地址為[idata]的情形 CS: IP存放程式碼指標(2000: 000E) 地址加法器合成C
組合語言——彙編的8種定址方式,以及2個預設段暫存器
1.立即定址方式 MOV AH, 80H(直接給暫存器賦值)2. 暫存器定址方式(源或者目的有一個是暫存器) 2.1) 源運算元是暫存器定址方式 如:ADD VARD, EAX ADD VARW, AX MOV VARB, BH等。 其中:VARD、VARW和VARB是雙字,字和位元組
微控制器的幾種定址方式
定址就是尋找指令中運算元或運算元所在的地址。所謂定址方式,就是如何找到存放運算元的地址,把運算元提取出來的方法。通常指源運算元的定址方式。 MCS-51系列微控制器定址方式共有七種:暫存器定址、直接定址、立即數定址、暫存器間接定址、變址定址、相對定址、位定址。 1、暫存器定址 暫
組合語言的七種定址方式
立即定址 指令中直接給出運算元 MOV A, #30H ;把立即數30H傳送到累加器A,執行後(A)=30H 直接定址 指令中直接給出運算元內部RAM單元地址 MOV A,
Android 進階13:幾種程序通訊方式的對比總結
讀完本文你將瞭解: RPC 是什麼 IDL 是什麼 IPC 是什麼 Android 幾種程序通訊方式 如何選擇這幾種通訊方式 Thanks RPC 是什麼 RPC 即 Remote Procedure Call (遠端過程呼叫) 是一種計算機通訊協議,它為我們定義了計算機 C 中的程式如何呼叫另
ARM的9種定址方式
1)立即定址 運算元是立即數,以“#”為字首,表示 16 進位制數值時以“0x”表示。 例: MOV R0,#0xFF00 ;0xFF00 -> R0 SUBS R0,R0,#1 ;R0 – 1 -> R0 2)暫存器定址
暫存器與七種定址方式
一、暫存器 總共有14個16位暫存器,8個8位暫存器。 通用暫存器: 資料暫存器: AH(8位) AL(8位) AX(16位) (AX和AL又稱累加器) BH(8位) BL(8位) BX(16位) (BX又稱基址暫存器,唯一作為儲
微機原理 暫存器和七種定址方式
16位cpu 八個通用暫存器 指令指標IP 標誌暫存器FR 段暫存器 AX BX CX DX BP SP SI DI 其中前四個又分為高八位和低八位 AX 累加器 BX 基址暫存器 CX 計數暫存器 DX 資料暫存器 BP 基址指標暫存器 SP 堆疊指標暫存器
ARM處理器 八種定址方式
ARM處理器的八種定址方式: 前言:1.什麼是定址?資料都存在儲存器中,定址簡單地說就是找到儲存資料或指令的地址。儲存器有很多儲存單元,用於儲存資料。或者說,定址就是讀取資料所在儲存裝置中對應地址編號中儲存的內容。以儲存單位定址分為位,字,節,字,雙字定址。以功能定址分為直
彙編的8種定址方式,以及2個預設段暫存器
16位CPU所含有的暫存器有(見圖2.1中16位暫存器部分): 4個數據暫存器(AX、BX、CX和DX) 2個變址和指標暫存器(SI和DI) 2個指標暫存器(SP和BP) ,32位CPU增加2個16位的段暫存器:FS和GS。 4個段暫存器(ES、CS、SS和DS) 1個指令
組合語言基礎四 —— 運算元的定址方式
另外,在32位微機系統中,為了擴大對儲存單元的定址能力,增加了一種新的定址方式——32位地址的定址方式。 1.立即定址方式 運算元作為指令的一部分而直接寫在指令中,這種運算元稱為立即數,這種定址方式也就稱為立即數定址方式。 立即數可以是8位、16位或32位,該數值緊跟在操作碼之後。如果立即數為16
王爽 組合語言 第二版 實驗七 定址方式在結構化資料訪問中的使用 原始碼
這是學習彙編以來遇到的最繁瑣的一個程式,其實思路理清了也就是那麼回事,但還是花了一整個晚上才把它寫出來,晒晒 assume cs:code data segment db '1975','1976','1977','1978','1979','1980','1981
java指定編碼的按行讀寫txt檔案(幾種讀寫方式的比較)
輸入輸出的幾種形式 1.FileReader,FileWriter File r = new File("temp.txt") FileReader f = new FileReader(name);//讀取檔案name BufferedReader b = new Buf
GoLang幾種讀檔案方式的比較
GoLang提供了很多讀檔案的方式,一般來說常用的有三種。使用Read加上buffer,使用bufio庫和ioutil 庫。 那他們的效率如何呢?用一個簡單的程式來評測一下: Go程式碼 package main import( "fmt"
Kafka入門三:幾種消費方式
1.消費位移確認 Kafka消費者消費位移確認有自動提交與手動提交兩種策略。在建立KafkaConsumer物件時,通過引數enable.auto.commit設定,true表示自動提交(預設)。自動提交策略由消費者協調器(ConsumerCoordinator)每隔$
第四節課:幾種常見的攻擊方式
pxc wql ptc hvm oid hsv ffd stl -1 1.中間人攻擊 局域網ARP攻擊 受害者經過攻擊者向網關發送數據。當主機A、和主機B通信時,都由主機C來為其“轉發”,如圖一,而A、B之間並沒有真正意思上的直接通信,他們之間的信息傳遞同C作為中介來完成
組合語言資料定址方式
資料定址方式 1、 立即數定址 立即數定址:指令需要的運算元緊跟在操作碼之後稱之為指令機器碼的一部分,並隨著處理器的取址操作需要從主存進入指令暫存器。這些運算元用常量形式直接表達,從指令程式碼中立即得到立即數,立即數定址方式只用於指令的原運算元,在傳送指令過程中常用來給暫存器和儲存單
組合語言的定址方式(針對16位定址)
定址方式 立即定址 mov ax,3064H(運算元放在指令的下一個單元中) 暫存器定址 mov ax,bx,(運算元放在暫存器中) 前兩種地址都是基於本程式碼段的 直接定址 mov ax,[2000H],(運算元放在記憶體中,指令中直接給出記憶體地址)(其實是
組合語言(王爽第三版)實驗7 定址方式在結構化資料訪問中的應用
這個實驗我自己摸索了好幾個小時才弄出來,最後想通了發現自己把問題想複雜了。 1、個人認為最簡單的方法 assume cs:code,ds:data data segment db '1975','1976','1977','1978','1979','1980','19
8086彙編學習之定址方式、資料型別以及幾個資料操作指令
一、and、or指令與應用: 1、描述: and指令:按位與 or指令:按位或 and register value or register value 其按位操作關係與C、C++等是一樣的,無需贅言。 eg: