天天看點

【尋址】尋址方式前言指令尋址操作數尋址總結

前言

        尋址方式就是處理器根據指令中給出的位址資訊來尋找實體位址的方式。在存儲器中,操作數或指令字寫入或讀出的方式,有位址指定方式、相聯存儲方式和堆棧存取方式。幾乎所有的計算機,在記憶體中都采用位址指定方式。當采用位址指定方式時,形成操作數或指令位址的方式稱為尋址方式。尋址方式分為兩類,即指令尋址方式和資料尋址方式,前者比較簡單,後者比較複雜。值得注意的是,在傳統方式設計的計算機中,記憶體中指令的尋址與資料的尋址是交替進行的。

指令尋址

        指令尋址有兩種,一種是順序存址,一種是跳躍尋址。

順序存址

        由于指令位址在記憶體中按順序安排,當執行一段程式時,通常是一條指令接一條指令地順序進行。也就是說,從存儲器取出第1條指令,然後執行這條指令;接着從存儲器取出第2條指令,再執行第二條指令;接着再取出第3條指令。

        這種程式順序執行的過程,稱為指令的順序尋址方式。為此,必須使用程式計數器(又稱指令計數器)PC來計數指令的順序号,該順序号就是指令在記憶體中的位址。

跳躍尋址

        當程式轉移執行的順序時,指令的尋址就采取跳躍尋址方式。所謂跳躍,是指下條指令的位址碼不是由程式計數器給出,而是由本條指令給出。注意,程式跳躍後,按新的指令位址開始順序執行。是以,程式計數器的内容也必須相應改變,以便及時跟蹤新的指令位址。

        采用指令跳躍尋址方式,可以實作程式轉移或構成循環程式,進而能縮短程式長度,或将某些程式作為公共程式引用。指令系統中的各種條件轉移或無條件轉移指令,就是為了實作指令的跳躍尋址而設定的。

操作數尋址

        操作數尋址的方式很多,我們常用的幾種有立即尋址,直接尋址,間接尋址,寄存器尋址和寄存器間接尋址,相對尋址,基址尋址,變址尋址,以及隐含尋址和塊尋址。

立即尋址

        指令的位址字段指出的不是操作數的位址,而是操作數本身,這種尋址方式稱為立即尋址。立即尋址方式的特點是指令執行時間很短,因為它不需要通路記憶體取數,進而節省了通路記憶體的時間。 如:MOV AX,5678H 注意:立即數隻能作為源操作數,不能作為目的操作數。

直接尋址

        直接尋址是一種基本的尋址方法,其特點是:在指令格式的位址的字段中直接指出操作數在記憶體的位址。由于操作數的位址直接給出而不需要經過某種變換,是以稱這種尋址方式為直接尋址方式。在指令中直接給出參與運算的操作數及運算結果所存放的主存位址,即在指令中直接給出有效位址。

間接尋址

        間接尋址是相對直接尋址而言的,在間接尋址的情況下,指令位址字段中的形式位址不是操作數的真正位址,而是操作數位址的訓示器,或者說此形式位址單元的内容才是操作數的有效位址。

寄存器尋址

        當操作數不放在記憶體中,而是放在CPU的通用寄存器中時,可采用寄存器尋址方式。顯然,此時指令中給出的操作數位址不是記憶體的位址單元号,而是通用寄存器的編号(可以是8位也可以是16位(AX,BX,CX,DX))。指令結構中的RR型指令,就是采用寄存器尋址方式的例子。如:MOV DS,AX。

寄存器間接尋址

        寄存器間接尋址方式與寄存器尋址方式的差別在于:指令格式中的寄存器内容不是操作數,而是操作數的位址,該位址指明的操作數在記憶體中。

相對尋址

        相對尋址是把程式計數器PC的内容加上指令格式中的形式位址D而形成操作數的有效位址。程式計數器的内容就是目前指令的位址。"相對"尋址,就是相對于目前的指令位址而言。采用相對尋址方式的好處是程式員無須用指令的絕對位址程式設計,因而所程式設計式可以放在記憶體的任何地方。 指令格式:MOV AX,[BX+1200H] 操作數實體位址PA=(DS/SS)*10H+EA EA=(BX/BP/SI/DI)+(6/8)位偏移量Disp 對于BX,SI,DI寄存器來說段寄存器預設為DS,對于SP來說,段寄存器預設為SS。

基址尋址

        在基址尋址方式中将CPU中的基址寄存器的内容,加上變址寄存器的内容而形成操作數的有效位址。基址尋址的優點是可以擴大尋址能力,因為與形式位址相比,基址寄存器的位數可以設定得很長,進而可以在較大的存儲空間中尋址。

變址尋址

        變址尋址方式與基址尋址方式計算有效位址的方法很相似,它把CPU中某個變址寄存器的内容與偏移量D相加來形成操作數有效位址。

        但使用變址尋址方式的目的不在于擴大尋址空間,而在于實作程式塊的規律變化。為此,必須使變址寄存器的内容實作有規律的變化(如自增1、自減1、乘比例系數)而不改變指令本身,進而使有效位址按變址寄存器的内容實作有規律的變化。

隐含尋址

        這種類型的指令,不是明顯地給出操作數的位址。而是在指令中隐含着操作數的位址。例如,單位址的指令格式,就不明顯地在位址字段中指出第2操作數的位址,而是規定累加寄存器AC作為第2操作數位址。指令格式明顯指出的僅是第1操作數的位址D。是以,累加寄存器AC對單位址指令格式來說是隐含位址。 如:DAA 。

塊尋址

        塊尋址方式經常用在輸入輸出指令中,以實作外存儲器或外圍裝置同記憶體之間的資料塊傳送。塊尋址方式在記憶體中還可用于資料塊移動。

總結

        這麼多的尋址方式,什麼時候該用什麼方式,是我們該學習的,要想把部落格裡的東西變成自己的,需要刻苦的努力才行。

繼續閱讀