編程串列定址
Ⅰ 匯編語言中操作數定址方式有哪些,各自有什麼特點,怎麼區分呢
形成操作數的有效地址的方法,稱為操作數的定址方式。
例如,一種單地址指令的結構如下所示,其中用X、I、D各欄位組成該指令的操作數地址。操作碼OP 變址X 間址I 形式地址D
指令中操作數欄位的地址碼是由形式地址和定址方式特徵位等組合形成,因此,一般來說,指令中所給出的地址碼,並不是操作數的有效地址。因此,定址過程就是把操作數的形式地址,變換為操作數的有效地址的過程。
一、隱含定址
在指令中不明顯的給出而是隱含著操作數的地址。例如,單地址的指令格式,沒有在地址欄位中指明第
二操作數地址,而是規定累加寄存器AC作為第二操作數地址,AC對單地址指令格式來說是隱含地址。
二、立即定址
指令的地址欄位指出的不是操作數的地址,而是操作數本身。這種方式的特點是指令執行時間很短,不需要訪問內存取數。
例如:單地址的移位指令格式為 OP(移位) F D
這里D不是地址,而是一個操作數。F為標志位,當F=1,操作數進行右移;當F=0時,操作數進行左移。
三、直接定址
直接定址特點是:在指令格式的地址欄位中直接指出操作數在內存的地址D。點擊演示
採用直接定址方式時,指令字中的形式地址D就是操作數的有效地址E,既E=D。因此通常把形式地址。 點擊演示
D又稱為直接地址。此時,由定址模式給予指示。 如果用S表示操作數,那麼直接定址的邏輯表達式為
S=(E)=(D)
四、間接定址
間接定址的情況下,指令地址欄位中的形式地址D不是操作數的真正地址,而是操作數地址的指示器,D單元的內容才是操作數的有效地址。
如果把直接定址和間接定址結合起來,指令有如下形式:操作碼 I D
定址特徵位I=0,表示直接定址,這時有效地址E=D;I=1,表示間接定址,這時有效地址E=(D)。
間接定址方式是早期計算機中經常採用的方式,但由於兩次訪存,影響指令執行速度,現在已不大使用。
五、寄存器定址方式和寄存器間接定址方式
當操作數不放在內存中,而是放在CPU的通用寄存器中時,可採用寄存器定址方式。此時指令中給出的操作數地址不是內存的地址單元號,而是通用寄存器的編號。
寄存器間接定址方式與寄存器定址方式的區別在於:指令格式中的寄存器內容不是操作數,而是操作數的地址,該地址指明的操作數在內存中。
六、相對定址方式
相對定址是把程序計數器PC的內容加上指令格式中的形式地址D而形成操作數的有效地址。程序計數器的內容就是當前指令的地址。「相對」定址,就是相對於當前的指令地址而言。 點擊演示
採用相對定址方式的好處是程序員無須用指令的絕對地址編程,所編程序可以放在內存任何地方。
此時形式地址D通常稱為偏移量,其值可正可負,相對於當前指令地址進行浮動。
七、基址定址方式
基址定址方式是將CPU中基址寄存器的內容加上指令格式中的形式地址而形成操作數的有效地址。點擊演示
它的優點是可以擴大定址能力。同形式地址相比,基址寄存器的位數可以設置得很長,從而可以在較大的存儲空間中定址。
八、變址定址方式
變址定址方式與基址定址方式計算有效地址的方法很相似,它把CPU中某個變址寄存器的內容與偏移量D相加來形成操作數有效地址。 但使用變址定址方式的目的不在於擴大定址空間,而在於實現程序塊的規律性變化。
九、塊定址方式
塊定址方式經常用在輸入輸出指令中,以實現外存儲器或外圍設備同內存之間的數據塊傳送。塊定址方式在內存中還可用於數據塊搬家。 塊定址時,通常在指令中指出數據塊的起始地址(首地址)和數據塊的長度(字數或位元組數)。
如果數據塊是變長的,可用三種方法指出它的長度:
(1)指令中劃出欄位指出長度;
(2)指令格式中指出數據塊的首地址與末地址;
(3)由塊結束字元指出數據塊長度。 操作碼 首地址 標志位 末地址
十、段定址方式
微型機中採用了段定址方式,例如它們可以給定一個20位的地址,從而有1M存儲空間的直接定址能力。為此將整個1M空間存儲器以64K為單位劃分成若干段。在定址一個內存具體單元時,由一個基地址再加上某些寄存器提供的16位偏移量來形成實際的20位物理地址。這個基地址就是CPU中的段寄存器。在形成20位物理地址時,段寄存器中的16位數會自動左移4位,然後以16位偏移量相加,即可形成所需的內存地址。
這種定址方式的實質還是基址定址。 點擊演示
Ⅱ 使用stm32單片機做畢設 c語言編程 老師問我定址方式是什麼 怎麼回答
用C語言編程不關心什麼定址方式,在匯編語言中有體現,定址方式是指尋找操作數的方法。匯編指令一般格式是
操作碼,操作數1 操作數2
一般操作碼和操作數1是固定搭配的,尋找第二個操作數的方法就是定址方式。
例如 ADD A,#12H
操作碼和操作數1共同組成一個8位的機器碼,而操作數2的來源有很多
上例中操作數2是立即數,這種定址方式就叫立即定址,
ADD A,30H
30H 是直接地址,這種定址方式就是直接定址
此外還有寄存器定址,寄存器間接定址等多種方式。