UPD78F0411 CPU指令地址尋址
一條指令的地址是由程序計數(shù)器(PC)決定的。根據(jù)執(zhí)行指令時所獲取的下一條指令字節(jié)數(shù),程序計數(shù)器(PC)的內(nèi)容自動增加(每個字節(jié)加1)。在執(zhí)行轉(zhuǎn)移指令時,將程序計數(shù)器(PC)的內(nèi)容設(shè)置為轉(zhuǎn)移目的地址,并按以下尋址方式確定地址。(要了解每條指令的詳細信息,請參閱78K/0 系列指令用戶手冊(U12326E))。
1.1 相對尋址
[功能]
將一條指令的8 位立即數(shù)(偏移量: jdisp8)與下一條指令的起始地址相加,結(jié)果賦給程序計數(shù)器(PC),然后轉(zhuǎn)向相加結(jié)果指向的地址。這個偏移量是帶符號數(shù)的補碼(–128 ~ +127),其中第7 位是符號位。
換句話說,在相對尋址中,分支的范圍是從下一條指令起始地址的-128 到+127 之間。
當(dāng)執(zhí)行“BR $addr16”指令或條件轉(zhuǎn)移指令時,將執(zhí)行相對尋址功能。
1.2 立即尋址
[功能]
將指令中的立即數(shù)賦給程序計數(shù)器(PC),然后轉(zhuǎn)向該地址。
在執(zhí)行“CALL !addr16”指令、“BR !addr16”指令或“CALLF !addr11”指令時,將執(zhí)行立即尋址功能。
CALL !addr16 和BR !addr16 指令的轉(zhuǎn)移地址范圍是所有存儲空間。
CALLF !addr11 指令的轉(zhuǎn)移地址范圍在0800H 與0FFFH 之間。
[圖示]
CALL !addr16 和BR !addr16 指令
1.3 表間接尋址
[功能]
通過指令碼第1 位到第5 位的立即數(shù),訪問特定存儲區(qū)中表的內(nèi)容(轉(zhuǎn)移目的地址),并將表的內(nèi)容賦給程序計數(shù)器(PC),然后轉(zhuǎn)向該地址執(zhí)行程序。
在執(zhí)行CALLT [addr5]指令時,進行表間接尋址。
該指令訪問的地址范圍是表40H~7FH 中所存儲的地址,轉(zhuǎn)移地址范圍可以是整個存儲器空間。
1.4 寄存器尋址
[功能]
將寄存器對(AX)的內(nèi)容賦給程序計數(shù)器(PC),然后轉(zhuǎn)向該地址。
“BR AX”指令將執(zhí)行寄存器尋址功能。