C51汇编语言寻址方式,80C51单片机指令系统的7种寻址方式
尋址方式就是尋找操作數或指令地址的方式。尋址方式包含兩方面的內容:一是操作數的尋址,二是指令地址的尋址(如轉移指令、調用指令)。尋址方式是計算機性能的具體體現,也是編寫匯編語言程序的基礎,必須非常熟悉并靈活運用。
對于兩操作數指令,源操作數有尋址方式,目的操作數也有尋址方式。若不特別聲明,后面提到的尋址方式均指源操作數的尋址方式。
80C51單片機指令系統共有7種尋址方式,包括:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址。現以7條指令為例說明這7種尋址方式。
(1)立即尋址:將操作數直接寫在指令中。
如指令①: MOV? A,#3AH? 執行的操作是將立即數3AH送到累加器A中,因為指令中有立即數3AH,所以稱此尋址方式為立即尋址。注意,立即數前面必須加“#”號,以區別立即數和直接尋址。該指令的執行過程如圖1所示。
圖1 立即數尋址示意圖
(2)寄存器尋址:是指將指令操作數存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。
如指令②: MOV? A,R0??? ;(A)←(R0)
該指令將寄存器R0中的數送入累加器A中,因為指令源操作數為寄存器R0,所以稱此尋址方式為寄存器尋址。
如果程序狀態寄存器PSW的RS1RS0=00(選中第0組工作寄存器,對應地址為(00H~07H),設RAM區00H的內容為20H,則執行MOV A,R0指令后,累加器A中的內容變為20H。該指令執行過程如圖2所示。
圖2 寄存器尋址示意圖
(3)直接尋址 :是指把存放操作數的內存單元的地址直接寫在指令中。在80C51單片機中可以直接尋址的存儲器主要有內部RAM區和特殊功能寄存器SFR區。
如指令③:MOV? A,30H??? ;(A)←(30H)
該指令將地址為30H的存儲單元的內容送入累加器A,因為指令源操作數為地址直接給出的存儲單元,故稱此尋址方式為直接尋址。若(30H)=3AH,指令③執行后,(A)=3AH,該指令的執行過程如圖3所示。
圖3 直接尋址示意圖
(4)寄存器間接尋址:將存放操作數的存儲單元的地址放在寄存器中,指令中只給出該寄存器。執行指令時,首先根據寄存器的內容,找到所需要的操作數地址,再由該地址找到操作數并完成相應操作。在80C51指令系統中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱為寄存器間接尋址寄存器。
注意:間接尋址寄存器前面必須加上符號“@”。
如指令④:MOV? A,@R0? ;(A)←((R0))
該指令將以R0中內容為地址的存儲單元的內容送入累加器A中,因為指令操作數是存儲單元,其地址由寄存器R0間接給出,所以稱此尋址方式為寄存器間接尋址。
設R0=3AH,內部RAM 3AH中的值是65H,則指令MOV? A,@R0的執行結果是累加器A的值為65H,該指令的執行過程如圖4所示。
圖4 寄存器間接尋址示意圖
(5)變址尋址 :是指將基址寄存器與變址寄存器的內容相加,結果作為操作數的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。這種尋址方式稱為變址尋址。該尋址方式主要用于查表操作。
當執行指令⑤時,設(A)=50H ,(DPTR)=2007H,(2057H)=60H ,指令⑤執行后MOVC A,@A+DPTR ;(A)←((A)+(DPTR))=(50H+2007H)=(2057H)=60H。
該指令將DPTR中的基地址2007H與A中的偏移地址50H相加,形成實際地址2057H,再將地址為2057H的存儲單元中的內容60H送入累加器A中。顯然這種尋址方式稱為變址尋址。該指令執行過程如圖5所示。
圖5 變址尋址示意圖
(6)相對尋址 :是指程序計數器PC的當前內容與指令中的操作數相加,其結果作為跳轉指令的轉移地址(也稱目的地址)。這種尋址方式稱為相對尋址。該類尋址方式主要用于跳轉指令。
如指令⑥:SJMP rel??? ;(PC)←(PC)+rel
當執行指令⑥時,設當前(PC)=2009H,而相對偏移量rel=02H,則執行該指令后,(PC)=2009H+02H=200BH,即程序由地址為2009H處跳轉到200BH處執行,其跳轉的距離為相對偏移量rel=02H。由于指令中的操作數為相對偏移量rel ,所以稱這種尋址方式為相對尋址。該指令的執行過程如圖6所示。
圖6 相對尋址示意圖
(7)位尋址 :指令中操作數為8位二進制數某一位,稱為位尋址。80C51單片機中,操作數不僅可以按字節為單位進行操作,也可以按位進行操作。當我們把某一位作為操作數時,這個操作數的地址稱為位地址。
位尋址區包括專門安排在內部RAM中的兩個區域:一是內部RAM的位尋址區,地址范圍是20H~2FH,共16個RAM單元,位地址為00H~7FH;二是特殊功能寄存器SFR中有11個寄存器可以位尋址。參見位地址的定義。
例如:SETB? ACC.0? ;(ACC.0)←1? 該指令將累加器的最低位ACC.0置1,由于指令中的操作數為一位二進數,故稱此尋址方式為位尋址。該指令的執行過程如圖7所示。
圖7 位尋址示意圖
由尋址方式的討論可知,操作數按類型可分為:立即數、寄存器、存儲單元、位操作數、相對偏移量。而存儲單元地址又可有直接尋址,寄存器間接尋址,變址尋址三種。
各種尋址方式對應操作數的指令符號規定如下。
(1)#data:表示8位立即數,如#3AH。
(2)#data16:表示16位立即數,即0000H~FFFFH。
(2)Rn:表示寄存器R0~R7。
(3)direct:表示片內存儲單元的直接地址, 如30H。
(4)addr16,addr11:表示指令中的16位或11位轉移地址。
(5)rel:表示相對偏移量,如 02H。
(6)bit:表示位地址,如ACC.0。
(7)(?? ):表示存儲單元的內容,如(30H)=40H。
(8)((? )):表示間接尋址的存儲單元內容,((R0))=(7FH)=50H。
總結
以上是生活随笔為你收集整理的C51汇编语言寻址方式,80C51单片机指令系统的7种寻址方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 举个栗子!Tableau 技巧(202)
- 下一篇: 无序列表的介绍