日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

C51汇编语言寻址方式,80C51单片机指令系统的7种寻址方式

發布時間:2023/12/14 windows 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C51汇编语言寻址方式,80C51单片机指令系统的7种寻址方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

尋址方式就是尋找操作數或指令地址的方式。尋址方式包含兩方面的內容:一是操作數的尋址,二是指令地址的尋址(如轉移指令、調用指令)。尋址方式是計算機性能的具體體現,也是編寫匯編語言程序的基礎,必須非常熟悉并靈活運用。

對于兩操作數指令,源操作數有尋址方式,目的操作數也有尋址方式。若不特別聲明,后面提到的尋址方式均指源操作數的尋址方式。

80C51單片機指令系統共有7種尋址方式,包括:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址?,F以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种寻址方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。