80C51單片機指令系統(tǒng)的7種尋址方式

發(fā)布時間:2024-03-08
尋址方式就是尋找操作數(shù)或指令地址的方式。尋址方式包含兩方面的內(nèi)容:一是操作數(shù)的尋址,二是指令地址的尋址(如轉(zhuǎn)移指令、調(diào)用指令)。尋址方式是計算機性能的具體體現(xiàn),也是編寫匯編語言程序的基礎,必須非常熟悉并靈活運用。
對于兩操作數(shù)指令,源操作數(shù)有尋址方式,目的操作數(shù)也有尋址方式。若不特別聲明,后面提到的尋址方式均指源操作數(shù)的尋址方式。
80c51單片機指令系統(tǒng)共有7種尋址方式,包括:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址?,F(xiàn)以7條指令為例說明這7種尋址方式。
(1)立即尋址:將操作數(shù)直接寫在指令中。
如指令①: mov a,#3ah 執(zhí)行的操作是將立即數(shù)3ah送到累加器a中,因為指令中有立即數(shù)3ah,所以稱此尋址方式為立即尋址。注意,立即數(shù)前面必須加“#”號,以區(qū)別立即數(shù)和直接尋址。該指令的執(zhí)行過程如圖1所示。
圖1 立即數(shù)尋址示意圖
(2)寄存器尋址:是指將指令操作數(shù)存放于寄存器中,寄存器包括工作寄存器r0~r7、累加器a、通用寄存器b、地址寄存器dptr等。
如指令②: mov a,r0 ;(a)←(r0)
該指令將寄存器r0中的數(shù)送入累加器a中,因為指令源操作數(shù)為寄存器r0,所以稱此尋址方式為寄存器尋址。
如果程序狀態(tài)寄存器psw的rs1rs0=00(選中第0組工作寄存器,對應地址為(00h~07h),設ram區(qū)00h的內(nèi)容為20h,則執(zhí)行mov a,r0指令后,累加器a中的內(nèi)容變?yōu)?0h。該指令執(zhí)行過程如圖2所示。
圖2 寄存器尋址示意圖
(3)直接尋址 :是指把存放操作數(shù)的內(nèi)存單元的地址直接寫在指令中。在80c51單片機中可以直接尋址的存儲器主要有內(nèi)部ram區(qū)和特殊功能寄存器sfr區(qū)。
如指令③:mov a,30h ;(a)←(30h)
該指令將地址為30h的存儲單元的內(nèi)容送入累加器a,因為指令源操作數(shù)為地址直接給出的存儲單元,故稱此尋址方式為直接尋址。若(30h)=3ah,指令③執(zhí)行后,(a)=3ah,該指令的執(zhí)行過程如圖3所示。
圖3 直接尋址示意圖
(4)寄存器間接尋址:將存放操作數(shù)的存儲單元的地址放在寄存器中,指令中只給出該寄存器。執(zhí)行指令時,首先根據(jù)寄存器的內(nèi)容,找到所需要的操作數(shù)地址,再由該地址找到操作數(shù)并完成相應操作。在80c51指令系統(tǒng)中,用于寄存器間接尋址的寄存器有r0、r1和dptr,稱為寄存器間接尋址寄存器。
注意:間接尋址寄存器前面必須加上符號“@”。
如指令④:mov a,@r0 ;(a)←((r0))
該指令將以r0中內(nèi)容為地址的存儲單元的內(nèi)容送入累加器a中,因為指令操作數(shù)是存儲單元,其地址由寄存器r0間接給出,所以稱此尋址方式為寄存器間接尋址。
設r0=3ah,內(nèi)部ram 3ah中的值是65h,則指令mov a,@r0的執(zhí)行結(jié)果是累加器a的值為65h,該指令的執(zhí)行過程如圖4所示。
圖4 寄存器間接尋址示意圖
(5)變址尋址 :是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。dptr或pc是基址寄存器,累加器a是變址寄存器。這種尋址方式稱為變址尋址。該尋址方式主要用于查表操作。
當執(zhí)行指令⑤時,設(a)=50h ,(dptr)=2007h,(2057h)=60h ,指令⑤執(zhí)行后movc a,@a+dptr ;(a)←((a)+(dptr))=(50h+2007h)=(2057h)=60h。
該指令將dptr中的基地址2007h與a中的偏移地址50h相加,形成實際地址2057h,再將地址為2057h的存儲單元中的內(nèi)容60h送入累加器a中。顯然這種尋址方式稱為變址尋址。該指令執(zhí)行過程如圖5所示。
圖5 變址尋址示意圖
(6)相對尋址 :是指程序計數(shù)器pc的當前內(nèi)容與指令中的操作數(shù)相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(也稱目的地址)。這種尋址方式稱為相對尋址。該類尋址方式主要用于跳轉(zhuǎn)指令。
如指令⑥:sjmp rel ;(pc)←(pc)+rel
當執(zhí)行指令⑥時,設當前(pc)=2009h,而相對偏移量rel=02h,則執(zhí)行該指令后,(pc)=2009h+02h=200bh,即程序由地址為2009h處跳轉(zhuǎn)到200bh處執(zhí)行,其跳轉(zhuǎn)的距離為相對偏移量rel=02h。由于指令中的操作數(shù)為相對偏移量rel ,所以稱這種尋址方式為相對尋址。該指令的執(zhí)行過程如圖6所示。
圖6 相對尋址示意圖
(7)位尋址 :指令中操作數(shù)為8位二進制數(shù)某一位,稱為位尋址。80c51單片機中,操作數(shù)不僅可以按字節(jié)為單位進行操作,也可以按位進行操作。當我們把某一位作為操作數(shù)時,這個操作數(shù)的地址稱為位地址。
位尋址區(qū)包括專門安排在內(nèi)部ram中的兩個區(qū)域:一是內(nèi)部ram的位尋址區(qū),地址范圍是20h~2fh,共16個ram單元,位地址為00h~7fh;二是特殊功能寄存器sfr中有11個寄存器可以位尋址。參見位地址的定義。
例如:setb acc.0 ;(acc.0)←1 該指令將累加器的最低位acc.0置1,由于指令中的操作數(shù)為一位二進數(shù),故稱此尋址方式為位尋址。該指令的執(zhí)行過程如圖7所示。
圖7 位尋址示意圖
由尋址方式的討論可知,操作數(shù)按類型可分為:立即數(shù)、寄存器、存儲單元、位操作數(shù)、相對偏移量。而存儲單元地址又可有直接尋址,寄存器間接尋址,變址尋址三種。
各種尋址方式對應操作數(shù)的指令符號規(guī)定如下。
(1)#data:表示8位立即數(shù),如#3ah。
(2)#data16:表示16位立即數(shù),即0000h~ffffh。
(2)rn:表示寄存器r0~r7。
(3)direct:表示片內(nèi)存儲單元的直接地址, 如30h。
(4)addr16,addr11:表示指令中的16位或11位轉(zhuǎn)移地址。
(5)rel:表示相對偏移量,如 02h。
(6)bit:表示位地址,如acc.0。
(7)( ):表示存儲單元的內(nèi)容,如(30h)=40h。
(8)(( )):表示間接尋址的存儲單元內(nèi)容,((r0))=(7fh)=50h。
上一個:導線測量現(xiàn)場踏勘要了解哪些工作內(nèi)容?
下一個:acer進入bios,宏基電腦進入bios應該怎么操作

小米手機怎么設置手動更新軟件(小米手機怎么打開手動更新)
適制顯毫類綠茶的品種
windows10激活密鑰專業(yè)版(最新w10專業(yè)版激活密鑰工具)
意大利sirai電磁閥l134
高精度超聲波風向風速儀-一款便于安裝的超聲波風向風速儀
什么云服務器便宜又快
mbi5353gfn-b_(mbi(臺灣聚積))mbi5353gfn-b中文資料_價格_
手持GPS使用方法
放大電路靜態(tài)工作點對波形失真的影響
如何每天定時發(fā)送微信群消息(如何每天定時發(fā)送微信信息)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos