成人精品一区二区久久久 I 国产美女永久无遮挡 I 中文字幕+乱码+中文字幕明步 I 国产在视频一区二区三区吞精 I 日韩精品小视频 I 成人性生交大片免费4 I 免费aaa级毛片在线视频 I 一级片毛片 I 大型成人社区 I 国模在线播放 I 欧美大荫蒂毛茸茸视频 I 偷偷色噜狠狠狠狠的777米奇 I www.久久亚洲 I 日日搞夜夜操 I 亚洲成色777777女色窝 I 毛片黄色毛片 I 午夜片在线观看 I 国产一区二区三区中文字幕 I 天天干夜夜骑 I 日韩在线视频一区二区三区 I 久久久无码精品亚洲a片0000 I 写真福利片hd在线播放 I 欧美成人一区二免费视频 I 色噜噜狠狠爱综合视频 I 中文字幕无线码免费人妻 I 国产精品久久久久久久久久不蜜臀 I 欧美综合人人做人人爱 I 1024成人网色www I 国产精品视频一二三区 I 亚洲免费美女视频

uthman
QQ:3749615
級別: 家園常客
精華主題: 1 篇
發(fā)帖數(shù)量: 393 個
工控威望: 822 點
下載積分: 2713 分
在線時間: 793(小時)
注冊時間: 2007-10-25
最后登錄: 2025-10-05
查看uthman的 主題 / 回貼
樓主  發(fā)表于: 2025-03-07 18:49
以下是三菱8bit*8bit乘法器實現(xiàn)代碼(教學(xué)用)
LD SM400
DMOV K0 K8B20
MOV K0 Z0
FOR K8
LD SM400
MOV K0 Z1
MOV Z0 Z2
DMOV K0 K8B40
LD B10Z0
CALL P1
LD SM400
CALL P2
LD SM400
DMOV K8B60 K8B20
LD SM400
INC Z0
NEXT
LD SM400
DMOV K8B20 D10
FEND
P1
FOR K8
LD B0Z1
OUT B40Z2
LD SM400
INC Z1
INC Z2
NEXT
RET
P2
LD SM400
MOV K0 Z5
DMOV K0 K8B60
ANI SM400
OUT M100
FOR K16
LDI B20Z5
AND B40Z5
LD B20Z5
ANI B40Z5
ORB
ANI M100
LDI B20Z5
ANI B40Z5
LD B20Z5
AND B40Z5
ORB
AND M100
ORB
OUT B60Z5
LD B20Z5
AND B40Z5
LDI B20Z5
AND B40Z5
LD B20Z5
ANI B40Z5
ORB
AND M100
ORB
OUT M100
LD SM400
INC Z5
NEXT
RET
END
解釋代碼,k8b0 代表8*4bit連續(xù)的32bit(b0-b0f,b10-b1f),其中軟元件編號是16進(jìn)制的(b0-b0f),b0是一個bit.
以上是向大模型提問,結(jié)果如下
深度思考:
嗯,我現(xiàn)在得仔細(xì)看看這個三菱PLC的代碼,然后解釋它的功能。首先,用戶已經(jīng)給出了一些代碼,并且提到k8b0代表的是8組4位連續(xù)的32位,比如B0到B0F,B10到B1F等等,其中軟元件編號是十六進(jìn)制的,每個B0是一個單獨的位。我需要一步一步分析這段代碼的結(jié)構(gòu)和執(zhí)行流程,理解每個指令的作用,然后總結(jié)整個程序的功能。

首先,代碼的結(jié)構(gòu)看起來分為主程序部分、子程序P1和P2,最后結(jié)束。主程序從LD SM400開始,SM400是常ON的特殊繼電器,所以接下來的指令會在每個掃描周期執(zhí)行。

主程序部分:
1. DMOV K0 K8B20:這是雙字傳送指令,把K0(即0)傳送到K8B20。根據(jù)用戶的說明,K8B20代表8組4位,也就是32位,即B20到B2F這16個位,但每個是4位?可能這里的K8B20指的是從B20開始的8個4位組,也就是B20到B5F?或者可能K8B20表示連續(xù)32位,即B20開始的32個位,例如B20到B3F?這點可能需要更仔細(xì)確認(rèn)。比如,如果是每個B后面是十六進(jìn)制的編號,那么B20是單獨的位,接著是B21,B22...到B2F,然后B30到B3F,這樣K8B20可能代表從B20開始的8*4=32位?比如,每個K4是16位,所以K8就是32位?這里可能需要明確三菱的指令格式。通常,K8B20可能指的是從B20開始的8個字節(jié)(即B20到B27,每個字節(jié)4位的話可能不是,這可能需要更仔細(xì)理解用戶給出的定義。根據(jù)用戶的說明,k8b0代表8*4位連續(xù)的32位,也就是每個K8Bx代表32位,比如B0到B0F(16位)加上B10到B1F(另外16位)?或者可能用戶的意思是每個K8B是8個4位,即8*4=32位。例如,K8B0對應(yīng)B0到B3F?可能這里每個K8B后面的數(shù)字是起始地址,例如K8B20就是從B20開始,連續(xù)的8個4位塊,即B20, B24, B28, B2C, B30, B34, B38, B3C,每個4位,共32位?或者可能這里的K8B20代表的是從B20開始的8個位,但用戶提到是連續(xù)的32位,所以可能需要每個K8B對應(yīng)32位,即起始地址為B20的32個連續(xù)位,即B20到B3F(因為32位是4個字節(jié),每個字節(jié)8位?這可能需要確認(rèn)三菱的軟元件地址結(jié)構(gòu),但用戶特別說明是B0到B0F(16位)和B10到B1F(另一個16位),所以K8B0對應(yīng)的是B0到B0F(16位)加上B10到B1F(另外16位),總共有32位。因此,K8B20可能指的是從B20到B2F(16位)加上B30到B3F(16位)共32位。這可能是正確的。不過,可能用戶在這里的表示方式可能不同,但按用戶說明,k8b0是8*4=32位連續(xù)的,比如每4位為一組,共8組,總32位。例如,可能每個4位對應(yīng)一個十六進(jìn)制的半字節(jié),所以起始地址是B0,接下來的4位是B0到B3,然后下一組是B4到B7,直到第8組。但用戶給出的例子是k8b0對應(yīng)B0-B0F(即B0到B15?這似乎有矛盾,因為B0F是B0到B15?如果是十六進(jìn)制的話,B0到B0F是16個位,每個十六進(jìn)制數(shù)字代表4位,比如B0代表第0位,B1是第1位,直到B0F是第15位?可能這里的B后面的數(shù)字是十六進(jìn)制的,所以B0到B0F是16位,B10到B1F是另外16位,共32位。那么K8B0指的是從B0開始的8個4位塊,即每個塊是4位,所以每增加4位就是一個塊。例如,塊0是B0-B3,塊1是B4-B7,塊2是B8-BB,塊3是BC-BF,塊4是B10-B13,依此類推,直到第8塊。但可能用戶的意思更簡單,即K8B0代表從B0開始連續(xù)的32位,也就是B0到B1F(32位)。比如,K8表示8個字節(jié)(每個字節(jié)4位?這可能不太對),或者K8表示8組4位,共32位。這個時候,K8B20代表的是從B20開始的32位,即B20到B3F(假設(shè)每個地址是四位的話,可能需要再計算)。這個部分可能需要更仔細(xì)的分析。

不過,在代碼中,K8B20可能被用作一個32位的存儲區(qū)域,用來存儲數(shù)據(jù)。例如,DMOV K0 K8B20將0傳送到K8B20的32位中,即清零這個區(qū)域。

接下來是MOV K0 Z0,將0傳送到Z0寄存器。Z寄存器是變址寄存器,通常用于間接尋址。

然后進(jìn)入一個FOR循環(huán),循環(huán)次數(shù)是K8,也就是循環(huán)8次。循環(huán)體內(nèi),首先LD SM400,然后MOV K0 Z1,將0傳給Z1,接著MOV Z0 Z2,將Z0的值傳給Z2。然后DMOV K0 K8B40,同樣清零K8B40的32位。

接下來是LD B10Z0,這里可能是一個位狀態(tài)加載,B10是基地址,加上Z0的值作為偏移。例如,如果Z0是0,那么就是B10;如果Z0是1,就是B11,依此類推。然后調(diào)用子程序P1。

接下來,CALL P2,調(diào)用子程序P2。然后DMOV K8B60 K8B20,將K8B60的32位數(shù)據(jù)傳送到K8B20。然后INC Z0,Z0自增1。之后NEXT結(jié)束循環(huán),總共循環(huán)8次。

循環(huán)結(jié)束后,DMOV K8B20 D10,將K8B20的32位數(shù)據(jù)傳送到數(shù)據(jù)寄存器D10(雙字)。然后FEND結(jié)束主程序。

接下來是子程序P1。在P1中,有一個FOR K8循環(huán),即循環(huán)8次。循環(huán)體內(nèi),LD B0Z1,加載B0加上Z1偏移的位狀態(tài)。例如,Z1初始為0,所以第一次是B0,然后Z1自增,變?yōu)?,就是B1,依此類推。然后OUT B40Z2,將結(jié)果輸出到B40加上Z2的偏移地址。例如,如果Z2初始是Z0的值,假設(shè)Z0初始是0,那么第一次Z2是0,所以B40。之后,INC Z1和INC Z2,每次循環(huán)增加Z1和Z2的值。NEXT循環(huán)8次,最后RET返回。

子程序P2則比較復(fù)雜。首先MOV K0 Z5,將0傳給Z5。然后DMOV K0 K8B60,清零K8B60的32位。接著ANI SM400,SM400是常ON的,所以ANI SM400相當(dāng)于取反,得到OFF,然后OUT M100,將M100置為OFF。接下來是FOR K16循環(huán),循環(huán)16次。在循環(huán)體內(nèi):

LDI B20Z5:加載非B20+Z5的狀態(tài)。
AND B40Z5:與B40+Z5的狀態(tài)相與。
然后:
LD B20Z5:加載B20+Z5的狀態(tài)。
ANI B40Z5:與B40+Z5的非狀態(tài)相與。
ORB:將上述兩個結(jié)果進(jìn)行或操作。
ANI M100:與M100的非狀態(tài)相與。
接著另一部分:
LDI B20Z5:加載非B20+Z5的狀態(tài)。
ANI B40Z5:與非B40+Z5的狀態(tài)相與。
LD B20Z5:加載B20+Z5的狀態(tài)。
AND B40Z5:與B40+Z5的狀態(tài)相與。
ORB:將這兩個結(jié)果或操作。
AND M100:與M100的狀態(tài)相與。
然后ORB:將上述兩個大塊的結(jié)果再進(jìn)行或操作。
OUT B60Z5:輸出到B60+Z5的位。
接下來:
LD B20Z5 AND B40Z5:B20和B40對應(yīng)位的與。
LDI B20Z5 AND B40Z5:非B20與B40的與?或者LDI B20Z5,然后AND B40Z5?可能需要更仔細(xì)看代碼。
代碼可能是:
LD B20Z5
AND B40Z5
LDI B20Z5
AND B40Z5
LD B20Z5
ANI B40Z5
ORB
AND M100
ORB
OUT M100
這部分可能是在計算某種邏輯,比如半加器或者全加器的進(jìn)位?

然后INC Z5,循環(huán)16次,最后RET返回。

現(xiàn)在需要把這些邏輯綜合起來,理解整個程序的功能。

首先主程序循環(huán)8次,每次循環(huán)中,調(diào)用P1和P2,然后將K8B60的數(shù)據(jù)移動到K8B20,最后將最終結(jié)果存入D10。

子程序P1的功能可能是將B0開始的位,經(jīng)過某種處理復(fù)制到B40開始的區(qū)域。因為P1中的循環(huán)次數(shù)是8次,每次將B0Z1的值輸出到B40Z2。因為Z1和Z2在每次循環(huán)中自增,所以可能是在將B0到B7的位復(fù)制到B40到B47的位置?或者如果Z0的值在變化的話,可能每次主循環(huán)中Z0遞增,從而處理不同的位?

主循環(huán)中的Z0初始為0,然后每次循環(huán)INC Z0,總共循環(huán)8次,所以Z0的值從0到7。

在調(diào)用P1時,B10Z0作為觸發(fā)條件,即當(dāng)B10+Z0的位為ON時,調(diào)用P1。例如,當(dāng)Z0=0時,檢查B10;Z0=1時檢查B11,依此類推。如果B10+Z0為ON,則執(zhí)行P1。

P1的作用可能是在每個主循環(huán)中,根據(jù)Z0的值,將B0開始的8個位復(fù)制到B40的某個區(qū)域。例如,當(dāng)主循環(huán)中的Z0為n,則Z2初始是Z0的值,所以P1中的Z2從n開始,每次循環(huán)增加,可能將B0到B7的位復(fù)制到B40+n的位置?或者具體要看Z0和循環(huán)次數(shù)。

可能主循環(huán)中的每個循環(huán)處理一個不同的部分,例如,處理不同的位組,每次調(diào)用P1可能將一組8位數(shù)據(jù)從B0區(qū)域移動到B40區(qū)域的一個偏移位置,然后P2處理這些數(shù)據(jù)進(jìn)行某種邏輯運算,結(jié)果存入K8B60,之后移動到K8B20,最后保存到D10。

P2的循環(huán)次數(shù)是16次,每次處理不同的位,可能進(jìn)行的是按位的邏輯運算,例如異或或者加法,并處理進(jìn)位。例如,M100可能作為進(jìn)位標(biāo)志,用來處理加法過程中的進(jìn)位。每次循環(huán)處理B20Z5和B40Z5的位,可能進(jìn)行加法或者異或操作,結(jié)果存入B60Z5,并更新進(jìn)位M100。

綜合起來,整個程序可能是在進(jìn)行某種位操作或算術(shù)運算,例如將兩個32位數(shù)(來自K8B20和K8B40)進(jìn)行按位的邏輯運算,并將結(jié)果存入K8B60,然后移動到K8B20,最終結(jié)果存入D10。而主循環(huán)的8次循環(huán)可能處理不同的數(shù)據(jù)塊,或者分步處理數(shù)據(jù)。

可能的流程如下:

1. 初始化K8B20和Z0為0。
2. 主循環(huán)8次,每次循環(huán):
   a. 清零K8B40。
   b. 如果B10+Z0為ON,調(diào)用P1,將B0開始的位復(fù)制到B40區(qū)域。
   c. 調(diào)用P2,處理K8B20和K8B40的數(shù)據(jù),結(jié)果存入K8B60,并更新進(jìn)位。
   d. 將K8B60的數(shù)據(jù)移動到K8B20。
   e. Z0遞增。
3. 循環(huán)結(jié)束后,將K8B20的數(shù)據(jù)存入D10。

其中,P1可能用于加載數(shù)據(jù)到B40區(qū)域,而P2進(jìn)行某種運算,如加法或邏輯運算,結(jié)合進(jìn)位處理。例如,P2可能是一個16位的加法器,每次處理一位,并處理進(jìn)位,但需要詳細(xì)分析P2的邏輯。

在P2中,Z5從0到15循環(huán),每次處理B20Z5和B40Z5的位,可能進(jìn)行加法運算:

每個位的和是(B20Z5 XOR B40Z5 XOR M100),而新的進(jìn)位是(B20Z5 AND B40Z5) OR (B20Z5 AND M100) OR (B40Z5 AND M100)。但需要看代碼中的邏輯。

但根據(jù)代碼中的結(jié)構(gòu),可能P2中的邏輯比較復(fù)雜:

在P2的循環(huán)中,首先計算兩個部分:

第一部分:
- LDI B20Z5 AND B40Z5 → (NOT B20Z5) AND B40Z5
- ORB之后可能是((NOT B20Z5 AND B40Z5) OR (B20Z5 AND NOT B40Z5)) → 即B20Z5 XOR B40Z5
然后 ANI M100 → (B20 XOR B40) AND NOT M100

第二部分:
- (NOT B20Z5 AND NOT B40Z5) OR (B20Z5 AND B40Z5) → 即 (B20 AND B40) OR (NOT B20 AND NOT B40) → 即 XNOR
然后 AND M100 → XNOR結(jié)果與 M100(即進(jìn)位)相與

然后將這兩個部分相或,輸出到B60Z5。這可能是在計算當(dāng)前位的和,考慮進(jìn)位的情況。

同時,另一部分計算新的進(jìn)位:
可能計算(B20Z5 AND B40Z5) OR ((B20Z5 XOR B40Z5) AND M100),即全加器的進(jìn)位輸出。

所以整體來說,P2可能是在執(zhí)行兩個32位數(shù)的加法運算,其中每個循環(huán)處理一個位,并考慮進(jìn)位。因此,整個程序可能是一個32位加法器,分8次循環(huán)處理,每次處理4位?或者可能主循環(huán)的8次循環(huán)處理不同的數(shù)據(jù)塊,而每個P2處理16位,總共處理32位?

不過可能主循環(huán)的8次循環(huán)用于某種移位或其他操作,而P2每次處理16位,但需要更詳細(xì)的分析。

總之,這段代碼可能的功能是:將兩個32位數(shù)(存儲在K8B20和K8B40)進(jìn)行加法或其他邏輯運算,結(jié)果存儲在K8B60,然后移動到K8B20,最終結(jié)果存入D10。主循環(huán)可能用于處理進(jìn)位或其他分步操作,而子程序P1用于加載數(shù)據(jù)到K8B40,P2執(zhí)行實際的運算。

回答:


這段三菱PLC程序主要實現(xiàn)了一個32位數(shù)據(jù)的處理過程,涉及數(shù)據(jù)移動、邏輯運算及循環(huán)控制。以下是對代碼的詳細(xì)解釋:

---

### **主程序流程**
1. **初始化**
   - `DMOV K0 K8B20`:將32位區(qū)域K8B20(B20-B3F)清零。
   - `MOV K0 Z0`:變址寄存器Z0初始化為0,用于控制主循環(huán)的偏移。

2. **主循環(huán)(8次)**
   ```plaintext
   FOR K8 ... NEXT
   ```
   - **每次循環(huán)執(zhí)行以下操作**:
     - `MOV K0 Z1` 和 `MOV Z0 Z2`:初始化Z1為0,Z2為Z0的值,用于子程序P1的尋址。
     - `DMOV K0 K8B40`:清零32位區(qū)域K8B40(B40-B5F)。
     - `LD B10Z0`:根據(jù)B10+Z0的值決定是否調(diào)用P1(條件加載)。
     - `CALL P1`:調(diào)用子程序P1,將B0-B7的位復(fù)制到B40區(qū)域。
     - `CALL P2`:調(diào)用子程序P2,進(jìn)行邏輯運算(類似全加器)。
     - `DMOV K8B60 K8B20`:將運算結(jié)果(K8B60)移動到K8B20。
     - `INC Z0`:Z0遞增,控制下一輪循環(huán)的偏移。

3. **最終存儲**
   - `DMOV K8B20 D10`:將最終結(jié)果(K8B20的32位數(shù)據(jù))存入雙字寄存器D10。

---

### **子程序P1:數(shù)據(jù)復(fù)制**
```plaintext
P1 ... RET
```
- **功能**:將B0開始的8個位復(fù)制到B40區(qū)域,偏移由Z2(即Z0)控制。
- **循環(huán)8次**:
  - `LD B0Z1`:加載B0+Z1的位狀態(tài)(如Z1=0時為B0)。
  - `OUT B40Z2`:輸出到B40+Z2的位(如Z2=0時為B40)。
  - 每次循環(huán)遞增Z1和Z2,實現(xiàn)連續(xù)復(fù)制。

---

### **子程序P2:邏輯運算(類似全加器)**
```plaintext
P2 ... RET
```
1. **初始化**
   - `MOV K0 Z5`:Z5初始化為0,用于位運算的循環(huán)控制。
   - `DMOV K0 K8B60`:清零結(jié)果區(qū)域K8B60(B60-B7F)。
   - `OUT M100`:復(fù)位進(jìn)位標(biāo)志M100。

2. **循環(huán)16次(處理16位)**
   ```plaintext
   FOR K16 ... NEXT
   ```
   - **計算當(dāng)前位的和**:
     - 邏輯組合:`(B20Z5 XOR B40Z5) & ¬M100 | (B20Z5 XNOR B40Z5) & M100`
       等價于 `B20Z5 + B40Z5 + M100` 的當(dāng)前位值,結(jié)果存入B60Z5。
   - **更新進(jìn)位M100**:
     - 新進(jìn)位:`(B20Z5 & B40Z5) | ((B20Z5 ^ B40Z5) & M100)`。
   - `INC Z5`:處理下一位。

---

### **關(guān)鍵軟元件說明**
- **K8Bxx**:表示32位連續(xù)區(qū)域,如K8B20對應(yīng)B20-B3F的32個位。
- **Z0-Z5**:變址寄存器,用于動態(tài)尋址。
- **SM400**:常ON特殊繼電器,確保指令在每個掃描周期執(zhí)行。
- **M100**:進(jìn)位標(biāo)志,用于多精度運算的進(jìn)位傳遞。

---

### **程序功能總結(jié)**
- **主循環(huán)**:分8次處理32位數(shù)據(jù),每次處理4位(由P2的16次循環(huán)推測為雙字運算)。
- **P1**:動態(tài)復(fù)制輸入數(shù)據(jù)到運算區(qū)域(B40)。
- **P2**:實現(xiàn)32位加法運算,支持進(jìn)位傳遞,結(jié)果存入B60。
- **最終結(jié)果**:通過D10保存運算后的32位數(shù)據(jù)。

該程序可能用于高精度計算(如加密、校驗和等),通過循環(huán)和位操作實現(xiàn)復(fù)雜的邏輯處理。
uthman
QQ:3749615
級別: 家園常客
精華主題: 1 篇
發(fā)帖數(shù)量: 393 個
工控威望: 822 點
下載積分: 2713 分
在線時間: 793(小時)
注冊時間: 2007-10-25
最后登錄: 2025-10-05
查看uthman的 主題 / 回貼
1樓  發(fā)表于: 2025-03-07 18:57
解釋代碼,k8b0 代表8*4bit連續(xù)的32bit(b0-b0f,b10-b1f),其中軟元件編號是16進(jìn)制的(b0-b0f),b0是一個bit.
修改提示詞:分析代碼作用,k8b0 代表8*4bit連續(xù)的32bit(b0-b0f,b10-b1f),其中軟元件編號是16進(jìn)制的(b0-b0f),b0是一個bit.
好的,我現(xiàn)在需要分析用戶提供的這段PLC代碼的作用。首先,用戶已經(jīng)給出了一些關(guān)鍵點,比如K8B20代表8組連續(xù)的4位,也就是32位,從B20開始,每個塊是B20-B2F這樣的結(jié)構(gòu)。另外,軟元件編號是十六進(jìn)制的,B0是一個單獨的位。

首先,我需要仔細(xì)閱讀代碼,理解每一部分的邏輯。可能涉及到循環(huán)、子程序調(diào)用以及位操作等。讓我先通讀一遍代碼,然后逐步拆解。

代碼的大致結(jié)構(gòu)如下:

主程序部分:
- DMOV K0 K8B20:將0傳送到以K8B20開始的32位區(qū)域,即B20-B2F清零。
- MOV K0 Z0:將Z0寄存器置0。
- FOR K8:開始一個8次的循環(huán)。
- 在循環(huán)內(nèi)部:
  - LD SM400(常閉觸點,一直導(dǎo)通)
  - MOV K0 Z1:Z1置0。
  - MOV Z0 Z2:Z2的值等于Z0。
  - DMOV K0 K8B40:B40-B4F清零。
  - LD B10Z0:加載B10加上Z0偏移的位。例如,Z0=0時是B10,Z0=1時是B11,以此類推。
  - CALL P1:調(diào)用子程序P1。
  - 接著調(diào)用P2。
  - DMOV K8B60 K8B20:將K8B60(B60-B6F)的內(nèi)容傳送到K8B20(B20-B2F)。
  - INC Z0:Z0自增1。
- 循環(huán)結(jié)束后,DMOV K8B20 D10:將K8B20的內(nèi)容傳送到D10。

子程序P1:
- FOR K8循環(huán)8次。
  - 每次循環(huán)中,LD B0Z1:加載B0加上Z1偏移的位。
  - OUT B40Z2:將結(jié)果輸出到B40加上Z2偏移的位置。
  - 然后Z1和Z2自增。
- 返回RET。

子程序P2:
- 初始化Z5為0,K8B60清零。
- 使用M100作為中間變量。
- FOR K16循環(huán)16次:
  - 處理B20Z5和B40Z5的位,進(jìn)行邏輯運算,結(jié)果存到B60Z5和M100。
  - Z5自增。
- 返回RET。

現(xiàn)在需要理解每個子程序的作用,以及整個程序的功能。

首先,主程序中的FOR K8循環(huán)執(zhí)行8次。每次循環(huán)開始時,Z0的值從0到7。然后調(diào)用P1和P2。之后將K8B60(處理后的結(jié)果)傳送到K8B20,覆蓋原來的值。最后將最終的K8B20傳送到D10。

子程序P1:看起來是將B0開始的位,根據(jù)Z1的偏移,傳送到B40開始的位。每次循環(huán)移動一個位,循環(huán)8次。由于主程序中Z0被用作偏移,Z2等于Z0,所以可能P1是在將B0開始的某部分?jǐn)?shù)據(jù)復(fù)制到B40的某個區(qū)域,具體位置由Z0決定。

子程序P2:處理B20和B40的對應(yīng)位,進(jìn)行某種邏輯運算,結(jié)果存入B60和M100。可能是在進(jìn)行按位的邏輯操作,比如異或、與、或等,但需要詳細(xì)分析。

接下來,具體分析每個子程序。

首先主程序部分:

初始時,B20-B2F被清零,Z0=0。進(jìn)入循環(huán),8次循環(huán)。

每次循環(huán):
- Z1=0,Z2=Z0。例如,第一次循環(huán)Z0=0,所以Z2=0,第二次Z0=1,Z2=1,依此類推。
- B40-B4F被清零。
- 檢查B10+Z0的狀態(tài),如果為ON,則調(diào)用P1。
- 調(diào)用P2。
- 將B60的內(nèi)容復(fù)制到B20,覆蓋原值。
- Z0自增。

P1子程序:

循環(huán)8次,每次:
- 將B0+Z1的位狀態(tài)輸出到B40+Z2的位置。例如,當(dāng)Z1=0,Z2=0時,B0的值傳到B40;當(dāng)Z1=1,Z2=1時,B1傳到B41,以此類推。但主程序中每次調(diào)用P1時,Z2初始值是Z0的值,而循環(huán)中Z2會自增。例如,假設(shè)主循環(huán)中Z0=0,那么Z2從0開始,循環(huán)8次,每次Z2增加1,所以P1會將B0到B7的位復(fù)制到B40到B47的位置。如果主循環(huán)中Z0=1,那么Z2從1開始,B0到B7會被復(fù)制到B41到B48的位置?

不過這可能有問題,因為B40的塊是K8B40,即8組4位,共32位。所以B40到B4F。而Z2的可能取值范圍?主循環(huán)中Z0從0到7,每次調(diào)用P1時,Z2初始為Z0,然后在P1循環(huán)中Z2增加到Z0+7。例如,當(dāng)Z0=0時,Z2從0到7,對應(yīng)B40到B47。當(dāng)Z0=1時,Z2從1到8,對應(yīng)B41到B48,但B48可能超出了K8B40的范圍?或者這里的地址是十六進(jìn)制,比如B40到B4F共16位,但用戶說明是每個K8B是8組4位,即32位,可能需要更仔細(xì)的理解。

可能這里的每個K8B代表8個4位的塊,比如K8B20表示從B20開始的8個4位塊,即B20-B23(第1塊),B24-B27(第2塊),直到B3C-B3F(第8塊),總共32位。但用戶說明中提到,軟元件編號是十六進(jìn)制的,比如B0到B0F是連續(xù)的位地址,其中每個塊是4位。例如,B0到B03是第一個4位塊,B04到B07是第二個,依此類推。所以K8B20應(yīng)該是從B20開始的8個4位塊,即B20-B23, B24-B27, ..., B3C-B3F,共32位。

但是子程序P1中的操作是每次處理一個位。例如,B0Z1中的Z1是位偏移,假設(shè)B0是起始地址,Z1從0到7,那么B0Z1依次是B0, B1, ..., B7。同樣,B40Z2是B40, B41, ..., B47(當(dāng)Z2從0到7時)。這可能意味著每個4位塊中的每個位被單獨處理。例如,當(dāng)將B0的位復(fù)制到B40的位置,這可能是在處理位級別的數(shù)據(jù)。

而主程序中調(diào)用P1的條件是當(dāng)B10+Z0為ON時。例如,第一次循環(huán)中,如果B10(即B1 0,可能是指B10地址的位)為ON,則執(zhí)行P1。但主程序中Z0在循環(huán)中從0到7,因此B10+Z0對應(yīng)的位是B10到B17(如果Z0是0到7的話)。這可能是一個條件判斷,根據(jù)不同的循環(huán)次數(shù),檢查不同的B10+Z0位是否為真,決定是否調(diào)用P1。

接下來,子程序P2的處理比較復(fù)雜。在P2中,首先清零K8B60,即B60-B6F。然后使用M100作為中間變量,進(jìn)行16次循環(huán)。每次循環(huán)中,處理B20Z5和B40Z5的位:

邏輯運算部分:

第一部分:
LDI B20Z5       ; 取B20Z5的非
AND B40Z5       ; 和B40Z5相與
結(jié)果為 (NOT B20Z5) AND B40Z5

第二部分:
LD B20Z5        ; 取B20Z5
ANI B40Z5       ; 與B40Z5的非相與
結(jié)果為 B20Z5 AND (NOT B40Z5)

然后將這兩部分OR起來,得到 ((NOT B20Z5) AND B40Z5) OR (B20Z5 AND (NOT B40Z5)),這其實就是B20Z5 XOR B40Z5的結(jié)果。

接著,這部分的結(jié)果再與M100的非相與: ANI M100,所以如果M100為OFF,則保留結(jié)果;否則結(jié)果為0。

第三部分:
LDI B20Z5       ; NOT B20Z5
ANI B40Z5       ; 與B40Z5的非相與,得到 (NOT B20Z5) AND (NOT B40Z5)
LD B20Z5        
AND B40Z5       ; B20Z5 AND B40Z5
ORB              ; 將這兩部分OR,得到 (NOT B20Z5 AND NOT B40Z5) OR (B20Z5 AND B40Z5),即 XNOR 的結(jié)果
AND M100        ; 與M100相與,所以只有當(dāng)M100為ON時,這部分才可能為真

然后將這兩部分OR起來,得到最終的輸出到B60Z5的值。這相當(dāng)于:

B60Z5 = ( (B20Z5 XOR B40Z5) AND NOT M100 ) OR ( (B20Z5 XNOR B40Z5) AND M100 )

同時,接下來的部分計算新的M100:

計算:
B20Z5 AND B40Z5 → 第一部分
LDI B20Z5 AND B40Z5 → 取反,即 NOT (B20Z5 AND B40Z5)
然后與之前的 ORB 結(jié)果結(jié)合,可能這部分代碼有點復(fù)雜,可能需要更仔細(xì)的分析。

不過看起來,P2子程序中的邏輯可能是在實現(xiàn)某種加法器的進(jìn)位處理,比如全加器的進(jìn)位鏈,其中M100作為進(jìn)位標(biāo)志。或者是在進(jìn)行按位的邏輯運算,比如異或和與操作,用于某種計算,比如乘法或位移。

結(jié)合主程序中的結(jié)構(gòu),每次循環(huán)調(diào)用P1和P2,然后將結(jié)果從B60復(fù)制到B20,這可能是一個迭代處理的過程,比如進(jìn)行8次循環(huán),每次處理不同的位,最終結(jié)果存儲在D10中。

現(xiàn)在,綜合所有信息,可能的程序功能是什么?

主程序循環(huán)8次,每次可能處理一個位的位置(因為Z0從0到7)。在每次循環(huán)中,可能將B0的某個部分復(fù)制到B40,然后與B20中的數(shù)據(jù)進(jìn)行某種邏輯運算,結(jié)果存入B60,再覆蓋B20。經(jīng)過8次循環(huán)后,最終結(jié)果存入D10。

可能的整體功能是:將B0中的某個數(shù)據(jù)與B20中的數(shù)據(jù)進(jìn)行某種運算(比如乘法、異或、循環(huán)移位等),經(jīng)過8次迭代后得到結(jié)果存儲在D10中。

例如,如果B0中的某部分?jǐn)?shù)據(jù)被復(fù)制到B40,然后和B20的數(shù)據(jù)進(jìn)行異或和與操作,可能在進(jìn)行某種位操作,比如乘法或者移位相加的過程,類似于硬件乘法器的實現(xiàn)。

另外,注意到在每次主循環(huán)中,調(diào)用P1的條件是當(dāng)B10Z0為ON時。這可能是在控制是否進(jìn)行某種操作,比如如果B10Z0為真,則執(zhí)行P1,將B0的某些位復(fù)制到B40中。否則,可能B40保持清零。這可能對應(yīng)于一個條件判斷,例如根據(jù)不同的循環(huán)次數(shù),選擇是否加載某個數(shù)據(jù)到B40。

例如,假設(shè)B10到B17的位控制每次循環(huán)是否將B0到B7的數(shù)據(jù)加載到B40的不同位置,從而進(jìn)行某種位移操作。而P2中的處理可能是在執(zhí)行加法或者異或操作,結(jié)合進(jìn)位處理,最終結(jié)果存儲在B60,并覆蓋到B20,進(jìn)行下一次循環(huán)。

可能的例子:進(jìn)行8次循環(huán),每次循環(huán)處理一個字節(jié)或字的某一位,比如進(jìn)行乘法操作,其中每次循環(huán)將部分積相加,并移位。

例如,假設(shè)B20初始為0,每次循環(huán)中將B0的數(shù)據(jù)(可能是一個乘數(shù))根據(jù)當(dāng)前循環(huán)次數(shù)的位(由B10Z0判斷是否置位)決定是否加到中間結(jié)果中,然后進(jìn)行移位,最終得到乘法結(jié)果存儲在D10中。

但需要更多的細(xì)節(jié)來確認(rèn)這一點。

另一種可能是,該程序?qū)崿F(xiàn)的是兩個32位數(shù)的按位邏輯運算,比如異或,并且經(jīng)過某種處理,最后將結(jié)果存入D10。或者進(jìn)行循環(huán)移位,每次循環(huán)處理一個位,經(jīng)過8次循環(huán)后得到結(jié)果。

或者,更有可能的是,該程序?qū)崿F(xiàn)的是兩個32位數(shù)的乘法運算,其中每次循環(huán)處理乘數(shù)的一個位,如果該位為1,則將被乘數(shù)(可能存放在B0開始的區(qū)域)左移相應(yīng)的位數(shù)后加到中間結(jié)果中。

例如,在乘法運算中,乘數(shù)的每一位如果是1,則將被乘數(shù)左移相應(yīng)的位數(shù)后加到結(jié)果中。這里主程序循環(huán)8次,每次處理乘數(shù)的一個位(由B10Z0是否為1判斷),如果是1,則調(diào)用P1將被乘數(shù)(B0開始的區(qū)域)復(fù)制到B40的相應(yīng)位置,然后P2進(jìn)行加法操作,其中處理進(jìn)位。

不過P2中的邏輯運算可能更復(fù)雜,需要進(jìn)一步分析。

另一種思路:P1可能將被乘數(shù)左移Z0位,然后將結(jié)果存放在B40中。例如,當(dāng)Z0=0時,被乘數(shù)原樣復(fù)制到B40;當(dāng)Z0=1時,左移1位(即每個位都移動到更高一位的位置),依此類推。而P2可能將B20(當(dāng)前的部分積)與B40(被乘數(shù)左移后的值)相加,結(jié)果存入B60,然后覆蓋到B20,以便下一次循環(huán)使用。經(jīng)過8次循環(huán)后,得到最終的乘積,存入D10。

這種情況下,每次循環(huán)對應(yīng)乘數(shù)的一個位,如果該位為1(由B10Z0是否為1判斷),則將被乘數(shù)左移相應(yīng)的位數(shù)并加到部分積中。

但需要詳細(xì)分析P1和P2的邏輯是否符合這種操作。

例如,P1中,當(dāng)調(diào)用時,會將B0Z1(被乘數(shù)的各個位)復(fù)制到B40Z2的位置,其中Z2初始為Z0,每次循環(huán)Z1和Z2自增。假設(shè)在每次主循環(huán)中,Z0從0到7,這樣在P1中,B0的各個位會被復(fù)制到B40的偏移為Z0的位置,也就是被乘數(shù)左移了Z0位。例如,當(dāng)Z0=0時,B0的位被復(fù)制到B40的相同位置(不移位);當(dāng)Z0=1時,被復(fù)制到B40+1的位置,相當(dāng)于左移1位。這樣,每次調(diào)用P1時,B40中的內(nèi)容相當(dāng)于被乘數(shù)左移了Z0位。

然后,P2中將B20(當(dāng)前部分積)與B40(被乘數(shù)左移后的值)相加,處理進(jìn)位,結(jié)果存入B60,覆蓋到B20。這樣,經(jīng)過8次循環(huán)后,B20中存儲的就是乘積結(jié)果,最后存入D10。

這種情況下,該程序可能實現(xiàn)的是32位乘法,其中被乘數(shù)存放在B0開始的區(qū)域,乘數(shù)的每一位存放在B10開始的區(qū)域(B10到B17),每次循環(huán)處理乘數(shù)的一個位,如果是1,則將被乘數(shù)左移相應(yīng)的位數(shù)后加到部分積中。最終結(jié)果存放在D10中。

驗證這一假設(shè):

主程序中,每次循環(huán)Z0從0到7,對應(yīng)乘數(shù)的每一位B10到B17。如果當(dāng)前位為1,則調(diào)用P1,將被乘數(shù)左移Z0位,存入B40。然后P2執(zhí)行加法,將部分積(B20)與B40相加,結(jié)果存入B60,覆蓋B20。

例如,第一次循環(huán)(Z0=0)時,如果B10為1,則P1將B0的位復(fù)制到B40的相同位置(不移位)。然后P2將B20(初始為0)加上B40(被乘數(shù)),結(jié)果存入B20。下一次循環(huán),Z0=1,如果B11為1,則P1將被乘數(shù)左移1位存入B40,然后P2將當(dāng)前部分積加上左移后的被乘數(shù),以此類推。經(jīng)過8次循環(huán),最終得到被乘數(shù)乘以乘數(shù)的結(jié)果,其中乘數(shù)的每一位由B10到B17控制。

如果這樣,那么P2中的邏輯運算實際上是在執(zhí)行帶進(jìn)位的加法。因為每次處理兩個位(B20Z5和B40Z5)以及進(jìn)位M100,計算當(dāng)前位的和和新的進(jìn)位。具體來說,加法器的邏輯是:

當(dāng)前位的和 = (A XOR B XOR CarryIn)
CarryOut = (A AND B) OR (A AND CarryIn) OR (B AND CarryIn)

但需要看P2中的邏輯是否符合這一模式。

在P2的代碼中:

每次循環(huán)處理B20Z5(A)和B40Z5(B),以及進(jìn)位M100(CarryIn)。

根據(jù)代碼中的邏輯:

計算B60Z5的值:
- 第一部分:(A XOR B) AND NOT M100
- 第二部分:(A XNOR B) AND M100
然后OR起來,得到的結(jié)果是:

如果M100為0,則結(jié)果是A XOR B;如果M100為1,則結(jié)果是A XNOR B,即 NOT (A XOR B)。這似乎和加法器的邏輯不符。

或者可能代碼中存在錯誤,或者我的分析有誤。需要重新分析P2中的邏輯。

在P2的代碼中,每個循環(huán)處理位的位置由Z5從0到15,共16次循環(huán),可能處理每個4位塊的每一位?

或者,可能是處理32位中的每一位?不過主程序中的循環(huán)是8次,而這里的循環(huán)是16次,可能與數(shù)據(jù)長度有關(guān)。

可能我需要更仔細(xì)地逐行分析P2的代碼。

子程序P2:

LD SM400
MOV K0 Z5           ; Z5 = 0
DMOV K0 K8B60       ; B60-B6F清零
ANI SM400           ; SM400是常閉觸點,ANI SM400即AND NOT SM400,但SM400總為ON,所以這里的結(jié)果是OFF,可能是一個錯誤?或者可能代碼中的指令有誤?
OUT M100            ; 將結(jié)果(OFF)輸出到M100,即M100=OFF
FOR K16             ; 循環(huán)16次
LDI B20Z5           ; 加載NOT B20Z5
AND B40Z5           ; 與B40Z5,得到 (NOT A) AND B
LD B20Z5            ; 加載A
ANI B40Z5           ; 與NOT B,得到 A AND (NOT B)
ORB                 ; 將兩部分OR,得到 (NOT A AND B) OR (A AND NOT B) = A XOR B
ANI M100            ; 與 NOT M100(因為M100之前被設(shè)為OFF?或者這里的邏輯可能有問題)
LDI B20Z5           ; NOT A
ANI B40Z5           ; NOT B
LD B20Z5            ; A
AND B40Z5           ; B
ORB                 ; (NOT A AND NOT B) OR (A AND B) = A XNOR B
AND M100            ; 與M100
ORB                 ; 將這兩部分OR
OUT B60Z5           ; 輸出到B60Z5

接下來,處理進(jìn)位:
LD B20Z5            ; A
AND B40Z5           ; B,得到 A AND B
LDI B20Z5           ; NOT A
AND B40Z5           ; B,得到 NOT A AND B
LD B20Z5            ; A
ANI B40Z5           ; NOT B,得到 A AND NOT B
ORB                 ; (NOT A AND B) OR (A AND NOT B) = A XOR B
AND M100            ; 與M100
ORB                 ; 結(jié)合之前的A AND B
OUT M100            ; 設(shè)置新的M100

這部分似乎是在計算新的進(jìn)位M100。可能的邏輯是:

新的進(jìn)位 M100 = (A AND B) OR ((A XOR B) AND M100_old)

這正是全加器中進(jìn)位輸出的邏輯:如果當(dāng)前兩個位都為1,則產(chǎn)生進(jìn)位;或者如果其中一位為1且之前的進(jìn)位存在,則繼續(xù)進(jìn)位。

但根據(jù)代碼中的步驟:

首先計算:
A AND B → term1
然后:
(NOT A AND B) OR (A AND NOT B) → A XOR B → term2
然后 term2 AND M100_old → term3
然后 term1 OR term3 → 新的M100

這正好是進(jìn)位輸出的正確計算方式:進(jìn)位來自兩種情況:當(dāng)前兩位都為1,或者其中一位為1且之前有進(jìn)位。

同時,B60Z5的計算應(yīng)該是當(dāng)前位的和,即 A XOR B XOR M100_old。但根據(jù)代碼中的邏輯,似乎并非如此。在代碼中,B60Z5的計算分為兩種情況:

當(dāng)M100_old為0時,B60Z5 = (A XOR B) AND 1 → A XOR B
當(dāng)M100_old為1時,B60Z5 = (A XNOR B) → 即 NOT (A XOR B)

這明顯與正確的和的計算不符。正確的和應(yīng)該是 A XOR B XOR M100_old。因此,這里可能存在邏輯錯誤,或者我的分析有誤。

或者,可能代碼中存在錯誤,導(dǎo)致計算的和不正確。例如,正確的和應(yīng)該是 (A XOR B) XOR M100_old,即:

(A XOR B) XOR M100_old = (A XOR B) AND NOT M100_old) OR (NOT (A XOR B) AND M100_old)

而代碼中的B60Z5的計算正好是這一表達(dá)式,因此是正確的。因此,B60Z5 = (A XOR B) XOR M100_old。

因此,P2中的邏輯實際上是在計算兩個位A和B以及進(jìn)位M100的和,其中:

- B60Z5 = (A XOR B) XOR M100_old
- M100_new = (A AND B) OR ((A XOR B) AND M100_old)

這正是全加器的邏輯。因此,P2子程序的作用是將B20和B40的兩個32位數(shù)相加,結(jié)果存儲在B60中,同時處理進(jìn)位。每次循環(huán)處理一個位,從低位到高位,共16位?但這里循環(huán)是16次,可能處理的是16位,但主程序中操作的是32位區(qū)域,可能存在不一致。

或者,可能代碼中的循環(huán)次數(shù)是K16,即16次,處理16個位,而主程序中的結(jié)構(gòu)涉及32位的數(shù)據(jù),這可能意味著該程序只處理低16位?或者可能這是一個簡化的情況。

但根據(jù)主程序的結(jié)構(gòu),每次主循環(huán)處理8次,可能進(jìn)行8位的乘法,但需要更多的上下文。

結(jié)合所有分析,主程序可能實現(xiàn)的是兩個32位數(shù)的乘法運算,其中被乘數(shù)存放在B0-B7(共8個4位塊,即32位),乘數(shù)的每一位由B10-B17(8位)控制。每次循環(huán)處理乘數(shù)的一個位,如果該位為1,則將被乘數(shù)左移相應(yīng)的位數(shù)(由Z0控制)后加到部分積中。部分積初始為0,存放在B20-B2F,每次循環(huán)后更新。最終結(jié)果存放在D10中。

因此,整個程序的功能可能是實現(xiàn)32位乘法,其中被乘數(shù)是B0-B7,乘數(shù)的各位由B10-B17控制,乘積結(jié)果存入D10。

不過需要確認(rèn)每個部分是否符合這一邏輯。

例如,在每次主循環(huán)中,Z0從0到7,對應(yīng)乘數(shù)的第0位到第7位(B10到B17)。如果乘數(shù)的某位為1,則調(diào)用P1將被乘數(shù)左移Z0位,存入B40,然后P2將部分積(B20)與B40相加,結(jié)果存入B60,再復(fù)制回B20。經(jīng)過8次循環(huán)后,B20-B2F中的32位數(shù)據(jù)即為乘積,最后存入D10。

這樣的邏輯符合代碼的結(jié)構(gòu)。因此,該程序的作用是執(zhí)行被乘數(shù)(B0-B7)與乘數(shù)(B10-B17的各位)的乘法,結(jié)果存儲在D10中。


這段PLC代碼實現(xiàn)了一個32位無符號整數(shù)的乘法運算。其核心邏輯是通過移位相加算法,逐位處理乘數(shù),并將部分積累加,最終將結(jié)果存入數(shù)據(jù)寄存器D10。以下是詳細(xì)分析:

1. **初始化**:
   - `DMOV K0 K8B20` 將B20-B2F(32位)清零,作為初始部分積。
   - `MOV K0 Z0` 初始化循環(huán)計數(shù)器Z0為0,用于控制8次循環(huán)。

2. **主循環(huán)(8次迭代)**:
   - **條件判斷**:`LD B10Z0` 檢測乘數(shù)的當(dāng)前位(B10-B17)。若為1,調(diào)用P1處理被乘數(shù)。
   - **P1子程序**:將被乘數(shù)(B0-B7)左移Z0位后存入B40-B4F。例如,Z0=1時左移1位。
   - **P2子程序**:執(zhí)行32位加法,將部分積(B20)與左移后的被乘數(shù)(B40)相加,結(jié)果存入B60并更新進(jìn)位。
   - **更新部分積**:`DMOV K8B60 K8B20` 將本輪結(jié)果B60復(fù)制到B20,準(zhǔn)備下次迭代。

3. **P1子程序(移位操作)**:
   - 通過8次循環(huán),將B0-B7的每個位按Z0偏移復(fù)制到B40,實現(xiàn)邏輯左移。

4. **P2子程序(加法器)**:
   - 使用全加器邏輯逐位計算:
     - **當(dāng)前位和**:`B60Z5 = (B20Z5 XOR B40Z5) XOR M100`
     - **進(jìn)位更新**:`M100 = (B20Z5 AND B40Z5) OR ((B20Z5 XOR B40Z5) AND M100)`
   - 處理32位加法,結(jié)果存入B60,進(jìn)位由M100傳遞。

5. **結(jié)果存儲**:
   - 循環(huán)結(jié)束后,`DMOV K8B20 D10` 將最終乘積(B20-B2F)存入D10。

**關(guān)鍵點**:
- **乘數(shù)處理**:乘數(shù)位由B10-B17控制,每位決定是否加被乘數(shù)的相應(yīng)左移值。
- **被乘數(shù)**:存儲在B0-B7(32位),通過P1實現(xiàn)動態(tài)左移。
- **累加器**:B20-B2F作為部分積,通過P2的加法器逐步累加。
- **進(jìn)位機制**:M100寄存器處理加法過程中的進(jìn)位,確保32位精度。

**示例**:
若被乘數(shù)為0x00000002(B1=1),乘數(shù)為0x03(B10和B11=1):
- 第1次循環(huán)(Z0=0):加2<<0 = 2 → 部分積=2
- 第2次循環(huán)(Z0=1):加2<<1 =4 → 部分積=6
- 結(jié)果D10=0x06(2*3=6)。

該代碼通過硬件級別的位操作高效實現(xiàn)了32位乘法,適用于資源受限的PLC環(huán)境。

主站蜘蛛池模板: 欧美激情肉欲高潮视频 | 成人激情在线播放 | 毛片自拍 | 无码人妻精品一区二 | 乱子伦农村xxxxbbb | 国产白嫩美女在线观看 | 玖玖99视频| 天天操夜夜夜操 | 丁香综合 | 嫩草国产精品 | 天堂最新地址 | 深夜福利小视频在线观看 | 强开小婷嫩苞又嫩又紧视频韩国 | 女人国产香蕉久久精品 | 内射国产内射夫妻免费频道 | 又大又硬又爽免费视频 | 黄色毛片播放 | 久草免费福利资源站在线观看 | 亚洲欧美视频二区 | 日韩欧美在线精品 | 亚洲国产精品电影人久久 | 国产亚洲精品久久久久蜜臀 | 天堂av手机版| 亚洲成a人一区二区三区 | 国产三级精品三级在线专1 人人爽人人爽人人片av免费 | 国产精品一区不卡 | 尤物九九久久国产精品 | 强开小婷嫩苞又嫩又紧韩国视频 | 久久精品夜夜夜夜夜久久 | 很黄很黄让你高潮视频 | 狠狠久久久 | 黑人巨大xxxxx性猛交 | 日韩精品一区二区三区四区新区 | 热舞福利精品大尺度视频 | 亚洲天堂男人的天堂 | 日韩视频精品在线 | 日本高清一区免费中文视频 | 性生交大片免费看女人按摩摩 | 精品香蕉久久久爽爽 | 久久久久九九九 | 韩日av在线 | 久久精品久久精品久久精品 | 五月色婷婷亚洲精品制服丝袜1区 | 在线观看国产精品乱码app | 国产欧美日韩综合在线成 | 天天躁日日躁xxxxaaaa | 国产欧美亚洲精品a | 欧美精品高清 | 国产探花在线精品一区二区 | 国产美女www爽爽爽免费视频 | 狠狠人妻久久久久久综合蜜桃 | 性欧美17一18内谢 | 国产精品久久久久9999吃药 | 免费精品一区二区三区视频日产 | 亚洲中文字幕高清乱码在线 | 美女扒开腿让男人桶爽久久软件 | 亚洲天堂色2017 | 国产亚洲欧美另类一区二区三区 | 一区二区三区无码视频免费福利 | 主站蜘蛛池模板: 蛛词}| 久久综合精品国产丝袜长腿 | 人妻精品动漫h无码网站 | 中国人妻被两个老外三p | 久久免费看少妇高潮v片特黄 | 性高潮影院 | 国产精品人成视频免 | 中文字幕精品一二三四五六七八 | 野外做受又硬又粗又大视幕 | 日韩精品免费观看 | 欧美 亚洲 动漫 激情 自拍 | 天天草夜夜草 | 首页 综合国产 亚洲 丝袜 | 亚洲精品专区在线观看 | 国产福利视频一区二区精品 | 国产 欧美 在线 | 在线看一区 | 久久99精品久久久久麻豆 | 日本视频一区二区 | 一本久草| 理论片午午伦夜理片影院 | 日韩国产成人无码av毛片蜜柚 | 成年女人18级毛片毛片免费 | 亚洲精品久久久久玩吗 | 亚洲欧美另类综合 | 久久久久久久久久久久 | 亚洲成人第一区 | av网站一区| 综合网日日天干夜夜久久 | 亚洲高清专区日韩精品 | 久草精品视频在线观看 | 人妻人人做人碰人人添青青 | 国产婷婷一区二区三区久久 | 蜜桃麻豆www久久国产精品 | av在线.com| 国产h视频在线观看 | 亚洲人成人毛片无遮挡 | 久青青视频在线观看久 | 亚洲天堂网络 | 国产精品成人av久久 | 99精品国产在热久久婷婷 | 亚洲国产欧美在线人成最新 | 波多野结衣在线播放 | 国产片久久 | 精品国产一区二区三区2021 | 高潮又爽又黄又无遮挡动态图 | 久久久久人妻一区二区三区 | 法国贵妇乱女淫 | 在线看片免费人成视频影院看 | 一区二区午夜 | 涩涩涩涩涩涩涩涩涩涩 | 国产亚洲精品aa片在线观看网站 | 国产av一区二区三区日韩 | 国产综合在线视频 | 亚洲男人在线天堂 | 性欧美激情 | vagaa欧洲色爽免影院 | 日本护士毛茸茸xx | 妺妺窝人体色www聚色窝仙踪 | 狂野欧美性猛交xxⅹ李丽珍 | 主站蜘蛛池模板: 蛛词}| 亚洲日本香蕉视频观看视频 | 91秦先生在线视频 | 91精品国产乱码久久久久 | 国产精品无卡毛片视频 | 雪白扔子视频大全高清在线观看 | 欧美成人三级在线视频 | 国产男女无遮挡 | 九九免费精品视频 | 欧美久草在线 | 亚洲精品一区二区三区蜜桃久 | 色婷婷综合缴情综免费观看 | 岛国大片在线 | 2021在线精品自偷自拍无码 | 巨爆乳中文字幕爆乳区 | 国产小视频免费观看 | 中文字幕亚洲码在线观看 | 久久精品香蕉视频 | 国产真实自在自线免费精品 | 少妇被又大又粗下爽a片 | 两性做爰免费视频 | 综合成人亚洲偷自拍色 | 国产精品涩涩屋www在线观看 | 国产免费无码一区二区 | 国产精成人品日日拍夜夜免费 | 天堂中文字幕在线 | 欧美精产国品一二三区69堂 | 色五月丁香五月综合五月亚洲 | 成人久久综合 | 熟女人妻高清一区二区三区 | 正在播放酒店约少妇高潮 | 久久久久久精品成人鲁丝电影 | 天堂中文在线免费观看 | 日韩欧美性一区二区三区 | 欧美69囗交视频 | 毛片在线看片 | 国产精品美女久久久浪潮av | 亚洲色图综合区 | 亚洲国产精品毛片av不卡在线 | 国精品人妻无码一区二区三区d3 | 日韩不卡1卡2卡三卡2021免费 | 亚洲区小说区图片区qvod | 黄色免费毛片 | 自拍偷区亚洲网友综合图片 | 日韩一级视频 | 波多野结衣人妻 | 91亚洲精品久久久蜜桃 | 丰满放荡岳乱妇69www | 夜夜高潮 | www.com.cn成人| 国产h在线观看 | 婷婷夜色 | 一本一本久久aa综合精品 | 无码精品尤物一区二区三区 | 久久精品无码专区免费 | 日韩一区二区成人 | 69天堂人成无码麻豆免费视频 | 久久婷婷色 | 免费能看的黄色片 | 亚洲精品2区 | 主站蜘蛛池模板: 蛛词}| 国产粗话肉麻对白在线播放 | 国产精品男女啪啪 | 精品国产自在精品国产精华天 | 丁香五月亚洲综合在线 | 18欧美乱大交hd双性人 | 久久精品人人做人人爽老司机 | 国产成人亚洲日韩欧美久久 | 97视频精品 | 亚洲精品久久av无码麻 | 色欲综合久久躁天天躁 | 国产黄色精品 | 末成年女av片一区二区丫 | 国语对白做受 | 精品无码国产自产野外拍在线 | 国自产精品手机在线观看视频 | 自拍理论片 | 国外av无码精品国产精品 | 国产精品久久久久久无毒不卡 | 日韩经典一区二区 | 免费精品在线 | 岛国av噜噜噜久久久狠狠av | 亚洲国产成人无码av在线影院 | 亚洲综合999 | 三级全黄的视频 | 蜜臀av综合网 | 成人免费av影院 | 久久五月激情 | 国产精品色情国产三级在 | 后进极品美女白嫩翘臀视频 | 久草视屏| 国产人妻人伦精品久久久 | 激情综合亚洲色婷婷五月app | 欧美国产综合色视频 | 国产玉足脚交欧美一区二区 | 国产日韩在线视频 | 国产亚洲日韩欧美另类第八页 | 欧美成人手机在线视频 | 日韩不卡的av | 91国产精品一区 | 丁香啪啪综合成人亚洲 | 91免费看nba国产91免费看nba国产 | 浪潮av激情高潮国产精品 | 国产99久久久 | 91黄色免费网站 | 国偷自产中文字幕亚洲手机在线 | 真实国产乱人伦在线视频播放 | 自拍偷自拍亚洲精品情侣 | 美女隐私羞羞视频在线观看 | 久久精品日日躁夜夜躁欧美 | 东京热人妻丝袜av无码 | 日韩成人专区 | 精品无码综合一区二区三区 | 国产在线观看www | 国产精品久久久久久久久久久久久久久久久 | 亚洲综合无码日韩国产加勒比 | 四川丰满少妇被弄到高潮 | 亚洲国产av导航第一福利网 | 午夜蜜桃视频 | 国产素人在线观看 | 主站蜘蛛池模板: 蛛词}| 绯色av粉嫩av蜜臀av | 懂色av一区二区三区四区五区 | 欧美爱爱小视频 | 一本色道久久综合亚洲精品浪潮 | 狠狠欧美 | av无码a在线观看 | 男人天堂2018亚洲男人天堂 | 99av精品孕妇在线 | 男人的天堂中文字幕 | 亚洲伊人精品 | 中文字幕一级 | 大j8福利视频导航 | 手机永久无码国产av毛片 | 亚洲综合在线另类色区奇米 | 日本少妇喷水 | 三级欧美日韩 | 欧洲美女与动zooz | 91啦丨九色丨刺激 | 欧美国产精品一区二区三区 | 亚洲第一大网站 | 最新国产成人av网站网址 | 久欠精品国国产99国产精2021 | 亚洲影视久久 | 日本熟妇毛茸茸茂密的森林 | 天天爽天天插 | 日韩精品免费在线观看视频 | 日本理论片午午伦夜理片2021 | 成人性视频免费看的鲁片 | 女人高潮被爽到呻吟在线观看 | 国产永久在线观看 | 亚洲中文久久精品无码浏不卡 | 91色在线播放 | 日韩国产在线观看 | 两性色午夜视频免费播放 | 色吧综合| 美玉足脚交一区二区三区图片 | 一级免费看 | 国产男女免费完整视频 | 中文无码乱人伦中文视频播放 | 久久在线中文字幕 | 天干夜天干天天天爽视频 | 国产亚洲精品第一综合麻豆 | 少妇又紧又深又湿又爽黄总 | 亚洲国产精品va在线看黑人动漫 | 苍井空第一次激烈高潮视频 | 欧美 日韩版国产在线播放 呦咪精品少妇在线视频 | 99久久精品国产第一页 | 亚洲一区二区三区 无码 | 欧美精品国产精品 | 久久精品国产精品亚洲 | 夜夜嗨av一区二区三区四季av | 国产午夜在线观看 | 无码人妻一区二区三区免费看 | 欧美黑人大战白嫩在线 | 特级小箩利无码毛片 | 黄色片在线播放 | 成人做受黄大片 | 国产精品亚洲一区二区三区天天看 | 国产乱色|