『壹』 PLC中為什麼要間接定址直接定址不得嗎求解釋
你應該是用的西門子的PLC吧,就直接拿一個應用的例子來解釋吧。
例如,
直接定址是你直接對一個區間的變數賦值或者搬移,例如MOV
500,VB100;
間接定址是你對一個地址賦值或者搬移,例如,你先將
VB100的地址賦給AC1,指令是
MOVD
&VB100,AC1
然後再MOVD
500,*AC1。
這樣的兩種做法的結果相同;
這樣看,感覺好像直接定址更方便,其實不然,比如如果你是要根據條件賦值給VB100~VB200中的其中一個;
如果你用直接定址,那麼你得根據條件寫一百個這樣的指令;例如MOV
500,VB100;MOV
500,VB101。。。。。。
如果你用間接定址,那麼你還是用上述兩句話,
MOVD
&VB100,AC1;
這時候你的AC1就相當於有了VB100的地址,你再加一句,ADDD
AC1,VB10;
之後再用MOVD
500,*AC1;以後你只需要對VB10賦值,就可以隨意的進行更改你要用的VB,例如VB10
=
1的話,就相當於給VB101賦值。這樣的用法在大規模的程序中,是非常方便的。
『貳』 簡述直接定址,間接定址
直接定址的對象是顯式的,可能是個直接數代表內存地址,或者寄存器名;間接定址是隱式的,直接操作數是一個寄存器,這個寄存器里的值才是真正的讀寫地址。比如,奧巴馬是黑人,這里奧巴馬就是直接定址;現任美國總統是黑人,這就是間接定址了。
『叄』 間接定址的優點
間接定址是不得已而用之,沒有什麼特別的優點。
『肆』 間接定址有什麼作用啊
間接定址:你需要的操作數是存在存儲器中的,每個存儲單元有個地址編碼,當你把這個地址編碼存到某個通用寄存器中(如BX,AX,DI,SI。。。)意思就是現在寄存器中存放的是你需要的操作數在內存(存儲器)中的位置,即存儲單元地址,當你使用指令通過這個寄存器調用這個數據的時候就是寄存器間接定址了 過程基本上就是「通過寄存器找到存儲器中的單元地址,再通過這個地址找到該單元裡面的數據」
比如指令 MOV AX,[BX] BX=0020H 存儲單元0020H裡面的內容是50D
那麼這條指令結果就是AX=50D
『伍』 用匯編語言,編子程序,採用間接定址、循環控制的方式,
寄存器間接定址,可以這么來理解:
1、首先必須有一個操作指令,這是必須的,指令做什麼。這是第一部分。
2、既然是寄存器間接定址,當然得有作為媒介的寄存器,這是第二部分。
3、既然是間接定址,當然得有定址的目標,這是第三部分。
『陸』 間接定址有什麼作用啊
不知道不要害人。
直接定址,告訴你的是地址,也就是地址是直接告訴你的,所以你需要的操作數是在
存儲器中,存放的地址就是指令告訴你的地址。
寄存器間接定址,寄存器中存放的是地址,也就是說地址不是直接告訴你,而是存放在寄存器中,所以說操作數也是在存儲器中,地址就是寄存器中的數。
比如
mov
ah,[1000h]
這個源操作數是直接定址,就是將數據段中有效地址為1000h中的數據傳給ah。
而
mov
ah,[bx],如果
bx=1000h,那麼這條指令的作用和上面的指令作用一樣。不過由於地址是在寄存器中,而不是直接給出,所以稱其為寄存器間接定址。
需要的操作數,同樣存放在存儲器中。
『柒』 51單片機間接定址問題
其實,這種程序純粹是為了使用指令而故意寫的,並沒有什麼意義。
這個程序就是為了講間接定址指令的使用。而目的並不是為了計算什麼數。
如果就是為了計算什麼數,採用什麼定址方式都行,只要能計算出來就行。
如果按你的想法來寫,還可以更簡化
MOV A,20H
ADD A,22H
MOV 20H,A
MOV A,21H
ADDC A,23H
MOV 21H,A
可問題是,如果數據多的時候,這種方式寫程序就會很長,採用間接定址方式程序就簡單。所以,要看具體情況而定。
另外,糾正一下你的程序
MOV A,20H
MOV R0,21H;這應該是MOV R0,22H,因21H中的數是第一個數的高8位。
ADD A,R0
『捌』 PLC中為什麼要間接定址
間接定址是你對一個地址賦值或者搬移,直接定址是你直接對一個區間的變數賦值或者搬移。
指令中給出的地址是存放數據的地址的地址稱為間接定址。間接定址方式是,指令給出了存放操作數地址的存儲單元的地址(也稱地址指針),按照這一地址找到的存儲單元中的數據才是所需要的操作數,相當於間接地取得數據。S7 - 200 PLC CPU以變數存儲器(V)、局部存儲器(L)或累加器(AC)的內容值為地址進行間接定址。
可間接定址的存儲器區域有:I、Q、V、M、S、T(僅當前值)和C(僅當前值)。對獨立的位( BIT)值或模擬量值不能進行間接定址。用間接定址方式存取數據時遵循以下步驟:建立指針、使用指針來存取數據(間接存取)和修改指針。使用方法和C語言中的指針應用基本相同。
(1)建立指針。間接定址前,應先建立指針。指針為雙字長,是所要訪問的存儲單元的32位的物理地址。只能使用變數存儲器(V)、局部存儲器(L)或累加器(AC1、AC2、AC3)作為指針,AC0不能用做間接定址的指針。為了建立指針,必須使用雙字傳送指令MOVD,將存儲器區中某個位置的地址移入存儲器的另一個位置或累加器作為指針,即將所要訪問的存儲器單元的地址裝入用來作為指針的存儲器單元或寄存器,裝入的是地址而不是數據本身。下面這條指令創建了一個指向VB200的指針:
MOVD &VB200,AC1
「&」為地址符號,與單元組合表示所對應單元的32位物理地址,VB200隻是一個直接地址編碼,並不是它的物理地址。指令中的&-VB200如果改為&-VW200或&4VD200效果完全相同。 指令中的第二個地址數據長度必須是雙字長,如AC、LD和VD。這里地址「VB200」要用32位表示,因而必須使用雙字傳送指令( MOVD)。
(2)間接存取。依據指針中的內容值作為地址存取數據。使用指針可存取位元組、字、雙字型的數據,下面兩條指令是建立指針和間接存取的應用方法:
MOVD &VB200,AC1
MOVW *AC1,AC0
執行指令MOVW*AC1,AC0,把指針AC1中的內容值(VB200)作為地址,由於指令MOVW的標識符是「W」,因而指令操作數的數據長度應是字型,把地址VB200、VB201處2位元組的內容(12 34)傳送到AC0。指針處的值(即12 34),為字型數據,如圖3-6所示,操作數(AC1)前面的「*」號表示該操作數( AC1)為指針。
圖3-7修改指針
修改指針值時,應根據存取的數據長度來進行調整。若對位元組進行存取,指針值加1(或。減1);若對字進行存取,或對定時器、計數器的當前值進行存取,指針值加2(或減2);若對雙字進行存取,則指針值加4(或減4)。圖3-7中,存取的數據長度是字型數據,因而指針值加2。
『玖』 什麼是plc的間接定址,直接定址,指針是什麼概念
直接定址:操作數就存放在數據的地址。基本邏輯指令都是直接定址方式。 你說的間接定址應該是變址定址吧,指針:指針實際上是程序發生轉移時,轉移去的入口地址的標號,一種為P標號,用於跳轉和子程序調用的轉移去的入口地址,一種為i標號,稱中斷指針。專用於中斷服務子程序的入口地址。
『拾』 PLC中為什麼要間接定址直接定址不得嗎求解釋
因為用樣的情況下,用間接定址比直接定址快。用間接定址1句話的場合,如果用直接定址,可能無法完成,或者能完成可卻要寫幾十幾百幾千句。
存儲器間接定址址給定格式是:址標識符+指針。指針所指示存儲單元中所包含數值,就是址確切數值單元。存儲器間接定址具有兩個指針格式:單字和雙字。單字指針是一個16bit結構,從0-15bit,指示一個從0-65535數值,這個數值就是被定址存儲區域編號。
(10)為什麼間接定址便於子程序返回擴展閱讀
寄存器間接定址為通過 CPU的地址寄存器AR1,AR2進行定址。AR1,AR2 均為 32 位寄存器,寄存器間接定址只使用 32 位指針。分為內部區域間接定址和交叉區域定址。
內部區域寄存器間接定址
指針格式與存儲器間接定址的 32 位指針相同,第 0 位~ 第 2 位作為定址操作的位地址,第 3 位~第 18 位作為定址操作的位元組地址,第 19 位 ~第 31 位沒有定義,32 位指針的格式。
交叉區域寄存器間接定址
包含有存儲器區域信息的指針,稱為交叉區域指針。同樣,交叉區域指針為 32 位,寄存器間接定址要使用地址寄存器 AR1 或 AR2。32 位交叉區域指針,左起 0~18 位格式與 32 位內部區域指針相同,19~23 位,27~20 位未定義,31 位為交叉區域指針標識位。
24~26 位是存儲區域地址標識,8 中組合表示 8 種存儲器區域。