色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用寄存器的邏輯操作指令是什么?

lhl545545 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-06-18 15:49 ? 次閱讀

操作系統中硬件相關的部分集中體現在匯編指令和對寄存器的操作中,因此我們對ARM體系結構的介紹也圍繞ARMv8-A的匯編指令和寄存器來展開。

處理器架構是處理器廠商為同一個系列的處理器規定的一個規范。ARM架構是一種精簡指令集(RISC)架構,具有以下RISC架構特點:

較大的通用寄存器堆。

load/store體系結構,其中數據處理操作僅對寄存器內容進行操作,而不是直接對內存內容。

簡單尋址模式,所有load/store地址由寄存器內容和指令確定。該體系結構定義了處理單元與內存(包括緩存)的交互,并包括內存地址翻譯系統。它還描述了多個處理單元如何相互作用。面積小、性能強和非常低的功耗是ARM體系結構的關鍵特性。本小節主要以ARMv8-A架構為例來介紹ARM體系結構的基本特性。ARMv8-A體系結構的一個重要特性是向后兼容,可以支持諸多標準和應用場景下的最優設計。ARMv8-A架構支持64bit的執行模式(AArch64)和32bit的執行模式(AArch32),這一模式兼容之前的ARM架構。兩種執行狀態都支持SIMD和浮點指令。

一、AMRv8架構概要

ARM體系結構自推出以來已經有了顯著的發展,并且ARM還在繼續開發它。到目前為止,已經有八個主要版本,由版本號1到8表示。其中前三個版本現在已經過時了。

通用名稱AArch64和AArch32描述了64位和32位執行狀態。AArch64是64位執行狀態,意味著地址保存在64位寄存器中,并且基本指令集可以使用64位寄存器進行處理。AArch64支持A64指令集。AArch32是32位執行狀態,這意味著地址保存在32位寄存器中,并且基本指令集使用32位寄存器進行處理。AArch32支持T32和A32指令集。

ARM支持三種架構配置:

A系列,面向應用場景的架構(Application Profile)。該系列支持基于內存管理單元(MMU)的虛擬內存系統體系結構(VMSA)。它支持A64、A32和T32指令集。

R系列,面向實時場景的架構配置。該系列支持基于內存保護單元(MPU)的受保護內存系統體系結構(PMSA)。它支持A32和T32指令集。

M系列,面向微處理器的架構。該系列實現了一個為低延遲中斷處理而設計的程序員模型(programmers’ model),該模型具有寄存器硬件堆棧和對中斷處理程序的高級語言支持。它支持T32指令集的變種。

(注:內存保護單元(MPU)是ARM中配備的有效保護系統資源的一種硬件,提供了內存區域保護功能。)

二、ARMv8-A指令集

在ARMv8-A中,可能的指令集取決于執行狀態:

AArch64:AArch64 state只支持A64指令集。這是一個固定長度的指令集,使用32位指令編碼。

Arch32:AArch32 state支持以下指令集:

A32:這是一個固定長度的指令集,使用32位指令編碼。它是與ARMv7 ARM指令集兼容。

T32:這是一個可變長度指令集,它同時使用16位和32位指令編碼。它與ARMv7 Thumb指令集兼容。

ARM指令的基本格式如下[2]:

《Opcode》{《Cond》}《S》《Rd》,《Rn》 {,《Opcode2》}

其中各個部分的含義為:

Opcode:操作碼,也就是助記符,說明指令需要執行的操作類型;

Cond:指令執行條件碼;

S:條件碼設置項,決定本次指令執行是否影響PSTATE寄存器相應狀態位值;

Rd/Xt:目標寄存器,A32指令可以選擇R0-R14,T32指令大部分只能選擇RO-R7,A64指令可以選擇X0-X30;

Rn/Xn:第一個操作數的寄存器,和Rd一樣,不同指令有不同要求;

Opcode2:第二個操作數,可以是立即數,寄存器Rm和寄存器移位方式(Rm,#shit);

ARMv8-A指令集的條件碼如下圖所示:

使用寄存器的邏輯操作指令是什么?

下面以A64指令集為例簡要介紹ARMv8-A的指令體系。A64指令集中的指令主要分為控制指令、訪存指令和計算指令。控制指令主要包括有條件分支指令、無條件分支指令、異常產生和返回指令、系統寄存器指令、系統指令、提示指令、同步指令和清除獨占訪問標志指令。訪存指令主要有Load指令和Store指令,這兩種指令有許多變種。計算指令包含算數指令、邏輯指令、MOVE指令、移位指令、位擴展指令和SIMD指令等等。以下列出了一些常用的控制指令的名稱與用途。

1. 控制指令:

條件分支指令:

使用寄存器的邏輯操作指令是什么?

無條件分支指令:

使用寄存器的邏輯操作指令是什么?

使用寄存器的無條件分支指令:

使用寄存器的邏輯操作指令是什么?

異常產生指令:

使用寄存器的邏輯操作指令是什么?

異常返回指令:

系統寄存器指令:

使用寄存器的邏輯操作指令是什么?

同步指令和獨占狀態清除指令:

使用寄存器的邏輯操作指令是什么?

例如:

使用寄存器的邏輯操作指令是什么?

2. 訪存指令:

ARMv8訪存指令支持以下尋址模式:

基址加上無符號立即數的尋址和基址加上有符號立即數的尋址;

基址加上寄存器偏移值;

基址加上擴展的寄存器偏移;

pre-index模式;

post-index模式;

PC相對尋址模式。

具體情形見下表:

使用寄存器的邏輯操作指令是什么?

其中對于A64指令集來說,64bit的基址來自通用寄存器X0-X30或來自棧指針SP,立即數或寄存器偏移值則是可選的,對尋址方式的解釋如下:

寄存器偏移尋址是指來自64bit基址寄存器的地址加上一個偏移值;

Pre-indexed模式是指尋址地址是64bit基址加上一個偏移值,這個計算和將會寫入基址寄存器;

Post-indexed模式是指尋址地址是64bit的基址,但之后基址和偏移值的和將會寫入基址寄存器;由此可見pre-indexed和post-indexed的區別在于使用的地址是先加上偏移值再使用還是先使用再加上偏移值;

PC相對尋址是指尋址地址是這條指令64bit的PC值加上一個19bit的有符號字偏移,這個地址在當前指令的PC值的 ±1MB范圍內并且是4byte對齊的。使用PC相對尋址所load的數據大小至少為32bit并且只能用來預取指令,且PC值不能被其他尋址方式使用。

一個立即數偏移可以為有符號的,也可以為無符號的,可以為scaled也可以為unscaled。當一個立即數偏移是scaled的時候,它被編碼為傳輸數據大小的整數倍。雖然匯編程序總是使用byte對齊的偏移,但匯編器或反匯編器會做必要的轉換工作,因此可用的byte偏移值取決于load/store指令類型和數據傳輸的大小。

下面列出了一些load/store指令:

例如Load寄存器指令:

使用寄存器的邏輯操作指令是什么?

上表中指令的尋址方式有:

基址加上12bit無符號scaled立即數偏移尋址;

基址加上9bit有符號unscaled立即數偏移尋址;

基址加上64bit寄存器偏移,可選為scaled;

基址加上32bit可拓展寄存器偏移,可選為scaled;

有unscaled9bit有符號立即數偏移的pre-indexed模式;

有unscaled9bit有符號立即數偏移的post-indexed模式;

Load至少32bit數據的PC相對尋址模式。

如果被load或store的指令的尋址模式會修改基址寄存器的內容,且被load/store寄存器恰好的是基址所在的寄存器,那么硬件的行為可能不確定。

3.計算指令:

在操作系統匯編語言中使用的計算指令主要是一些簡單的算數計算指令,用于對寄存器的move操作和對地址的計算操作,一般計算指令既可以使用立即數作為操作數,也可以使用寄存器中的數作為操作數。下面簡單列舉了一些算數指令:

使用立即數的簡單算數指令:

例如:

使用寄存器的邏輯操作指令是什么?

使用寄存器的邏輯操作指令:

使用寄存器的邏輯操作指令是什么?

例如:

使用寄存器的邏輯操作指令是什么?

其中:

寄存器移位指令:

例如:

使用寄存器的邏輯操作指令是什么?

02

ARM架構寄存器

在處理器中,寄存器用于保存需要被快速訪問的數據,在操作系統中需要特別注意的寄存器主要有棧指針寄存器(SP)、連接寄存器(LR)、程序計數器(PC)以及當前程序狀態寄存器(CPSR)和保存程序狀態寄存器(SPSR)。本小節主要以ARMv8-A為例介紹ARM架構的寄存器的基本情況。詳情可參見文獻[3],D1.6小節。

在這一小節中,我們主要介紹ARMv8架構中AArch64執行狀態下的寄存器使用情況。ARM架構中的寄存器主要有兩類,一類用于提供系統控制與狀態報告;另一類用于指令運行和異常處理。我們主要討論第二類。

通用寄存器主要用于基本指令集中的指令運行,通用寄存器共有31個,編號為R0-R31。這些通用寄存器可以被當成31個64bit的寄存器,編號為X0-X30;或者被作為31個32bit的寄存器,編號為W0-W30。

在AArch64執行狀態下,除了通用寄存器外,每一個異常級別都會有一個棧指針寄存器(StackPointer Register, SP),棧指針寄存器為SPEL0和SPEL1。異常級別用于區分指令的執行權限,我們將在本章的第四期介紹。如果處理器實現中包含EL2,那么還有SPEL2。如果處理器實現中包含EL3,那么還有SPEL3。詳情可參考鏈接[5]。

SIMD和浮點寄存器共用一系列寄存器,這些寄存器會用于浮點操作、向量操作和其它SIMD有關的標量操作。SIMD指令是能夠復制多個操作數、并把它們打包在大型寄存器的一組指令集[3]。以加法指令為例,單指令單數據(SISD)的CPU對加法指令譯碼后,執行部件先訪問內存,取得第一個操作數;之后再一次訪問內存,取得第二個操作數;隨后才能進行求和運算。而在SIMD型的CPU中,指令譯碼后幾個執行部件同時訪問內存,一次性獲得所有操作數進行運算。浮點寄存器和SIMD寄存器共包含32個128bit位寬的寄存器,V0-V31。這些寄存器可以作為:

32個雙字(64bit)寄存器,D0-D31。

32個單字(32bit)寄存器,S0-S31。

32個半字(16bit)寄存器,H0-H31。

32個單字(8bit)寄存器,B0-B31。

程序狀態寄存器(Current Program Status Register,CPSR) 在用戶級編程時用于存儲條件碼。CPSR包含條件碼標志,中斷禁止位,當前處理器模式以及其他狀態和控制信息

保存程序狀態寄存器(SPSR,Saved Program StatusRegister)用于保存CPSR的狀態,以便異常返回后恢復異常發生時的工作狀態。在A64中,不再使用單一的CPSR寄存器,來保存當前處理器狀態,而是用PSTATE來保存處理器狀態,而在A32中依然使用CPSR。有關PSTATE和CPSR的詳細信息可參考鏈接[4]。A64中SPSR 格式的示意圖如下圖所示:

使用寄存器的邏輯操作指令是什么?

其中N、Z、C、V均為條件碼標志位。它們的內容可被算術或邏輯運算的結果所改變,并且可以用于決定某條指令是否被執行,其含義如下表所示[8]:

標志位含義

N當兩個有符號整數運算時:N=1表示運算的結果為負數;N=0表示運算的結果為正數或零。

ZZ=1表示運算的結果為零,Z=0表示運算的結果非零。

C可以有4種方法設置C的值:

在加法指令中(包括比較指令CMP),當結果產生了進位,則C=1,表示無符號運算發生上溢出;其他情況C=0。

在減法指令中(包括減法指令CMP),當運算中發生借位,則C=0,表示無符號運算數發生下溢出;其他情況下C=1。

對于包含移位操作的非加減運算指令,C中包含最后一次溢出的位的數值。

對于其他非加減運算指令,C位的值通常不受影響。

V對于加減運算指令,當操作數和運算結果為二進制的補碼表示的帶符號數時,V=1表示符號為溢出,通常其他指令不影響V位。

M[3:0]則用來確定異常級別和SP:

有關SPSR中各個位的詳細信息可以參考文獻[1] 1.6.4小節。

連接寄存器LR(R14)的主要作用有兩個:

1. 保存子程序返回地址,用MOVE指令或BX指令可以用于實現返回,如MOV PC、LR或BXLR。若子程序中還需要調用子程序,則可以寫為:

使用寄存器的邏輯操作指令是什么?

第一條指令將LR中的內容入棧,最后一條將棧中保存的LR寄存器的內容存入PC中用于返回。

2. 當異常發生時,異常模式的LR用于保存異常返回地址,將LR內容入棧可以處理嵌套中斷。

PC是程序計數器,其中保存的是正在被加載的指令,而不是正在被執行的指令。例如,若指令長度為4byte,則PC指向當前正在被執行的指令的地址+8byte的地址。關于LR和PC的詳細內容可參考文獻[6]和[7]。

以下是異常級別EL3中使用的寄存器的例圖:

ARM架構中處理器有不同的運行模式,因此同一個功能的寄存器在不同的運行模式下可能對應不同的物理寄存器,這些寄存器被稱為備份寄存器。如SPSR_svc表示svc模式下使用的SPSR寄存器。ARM架構中常用的運行模式如下表所示[9]:

處理器模式描述

用戶模式(User, usr)正常程序執行的模式

快速中斷模式(FIQ, fiq)用于高速數據傳輸和通道處理

外部中斷模式(IRQ, irq)用于通常的中斷處理

特權模式(Supervisor, svc)供操作系統使用的一種保護模式

數據訪問中止模式(Abort, abt)當數據或指令預取中止時進入該模式,用于虛擬存儲及存儲保護

未定義指令中止模式(Undefined, und)當執行未定義指令時進入該模式,用于支持通過軟件仿真硬件的協處理器

系統模式(System, sys)用于運行特權級的操作系統任務

ARMv8-A架構還有Monitor(mon)工作模式,用于處理器安全狀態與非安全狀態的切換,Hypervisor(hyp)模式則用于對虛擬化有關功能的支持。有關安全狀態的詳細內容在后續的文章中會介紹。

03

ARM架構中的執行狀態

ARMv8-A有兩種執行模式,一種是AArch64執行模式,另一種是AArch32執行模式。執行狀態定義處理單元(Processing Element, PE)的執行環境,包括以下內容:

支持的寄存器寬度

支持的指令集

異常模型

虛擬存儲系統(Virtual Memory System Architecture, VMSA)架構

程序員模型

AArch64為64位執行狀態。對應上述內容,此執行狀態:

提供31個64位通用寄存器,其中X30用作過程鏈接寄存器(ProcedureLink Register)。

提供64位程序計數器(PC)、堆棧指針(SP)和異常鏈接寄存器(ELRs)。

提供32個128位寄存器以支持SIMD矢量和標量浮點運算。

提供單一指令集A64。

定義ARMv8異常模型,該模型最多有四個異常級別EL0-EL3,它們提供執行權限層次結構。

支持64位虛擬尋址。

定義一系列與PSTATE相關的寄存器。A64指令集包括能直接操作各種PSTATE寄存器的指令。

使用后綴命名每個系統寄存器,該后綴指示可以訪問寄存器的最低異常級別。

AArch32為32位執行狀態。對應上述內容,此執行狀態:

提供13個32位通用寄存器和一個32位PC、一個32位SP寄存器和一個32位鏈接寄存器(Link Register,LR)。鏈接寄存器用作異常鏈接寄存器和過程鏈接寄存器。其中一些寄存器有多個備份寄存器,用于不同的處理器工作模式。我們在上一期提到過,同一個功能的寄存器在不同的處理器運行模式下可能對應不同的物理寄存器,這些寄存器被稱為備份寄存器。

為從Hyp(hypervisor)模式返回的異常提供一個異常鏈接寄存器。

提供32個64位寄存器,用于對高級SIMD矢量和標量浮點計算的支持。

提供兩個指令集,A32和T32。

支持基于處理器工作模式的ARMv7-A異常模型,并將其映射到基于異常級別的ARMv8異常模型。

使用32位虛擬地址。

使用單個當前程序狀態寄存器(CPSR)保存處理器狀態。

在AArch64和AArch32執行狀態之間進行轉換稱為內部處理(interprocessing)。

04ARMv8-A架構的異常級別和安全狀態

ARMv8-A有四個異常級別,從EL0到EL3。對于異常級別ELn,整數n增加表示軟件執行的特權權限變大了。EL0級別下的執行叫非特權執行(unprivileged execution)。EL1主要用于運行操作系統內核。EL2可以支持非安全操作的虛擬化。EL3則支持安全狀態和非安全狀態之間的轉換。安全狀態與ARM TrustZone技術有關[2]。安全狀態可以運行可信執行環境(TEE, Trusted Execution Environment)及安全應用,用于保障隱私數據和程序運行環境的安全性。

ARMv8-A架構并未直接指定哪些軟件應該運行在哪些異常級別,但是在通常情況下,有如異常級別的使用模型:

1.應用程序運行在EL0;

2.操作系統內核和相關功能運行在EL1;

3.Hypervisor[3]運行在EL2;

4.安全世界狀態和正常世界狀態的切換在EL3完成。

下圖反映了ARM-v8A架構中的執行狀態、安全狀態和異常級別之間關系[1]:

使用寄存器的邏輯操作指令是什么?

從圖中我們可以看出,Hypervisor相關的支持特性主要是在EL2的非安全狀態實現的。Hypervisor可以支持虛擬機之間的切換,而虛擬機主要被包含在EL1的非安全狀態和EL0的非安全狀態中。一些Guest OS可以運行在EL1狀態里,每一個Guest OS可以運行在一個虛擬機上。而應用則運行在EL0的非安全狀態中,同時也運行在Guest OS上。
責任編輯:pj

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120952
  • PC
    PC
    +關注

    關注

    9

    文章

    2102

    瀏覽量

    154528
  • LR
    LR
    +關注

    關注

    1

    文章

    8

    瀏覽量

    10069
收藏 人收藏

    評論

    相關推薦

    什么是寄存器移位尋址

    寄存器移位尋址是一種特定的尋址方式,主要出現在某些處理架構中,如ARM指令集。這種尋址方式在處理數據移動和操作時提供了極大的靈活性和效率。下面將從定義、工作原理、特點、應用場景以及與
    的頭像 發表于 10-05 17:38 ?453次閱讀

    寄存器間接尋址和寄存器尋址的區別

    寄存器間接尋址和寄存器尋址是計算機體系結構中兩種重要的尋址方式,它們在指令執行過程中起著關鍵作用。下面將從定義、原理、特點、應用場景以及區別等方面對這兩種尋址方式進行詳細闡述。
    的頭像 發表于 10-05 17:13 ?1993次閱讀

    寄存器的類型和作用

    在計算機科學中,寄存器(Register)是一種高速存儲單元,它位于CPU內部,與CPU的運算單元和邏輯控制單元緊密相連。寄存器的主要作用是暫時存儲指令
    的頭像 發表于 09-05 14:11 ?2431次閱讀

    寄存器根據功能的不同分為哪兩種

    Registers) 通用寄存器是處理中最常見的寄存器類型,它們沒有特定的功能,可以用于存儲任意類型的數據或指令。這些寄存器通常用于執行
    的頭像 發表于 08-06 09:27 ?1850次閱讀

    寄存器是什么意思?寄存器是如何構成的?

    在計算機科學中,寄存器(Register)是一個高速存儲單元,它位于中央處理(CPU)內部,用于存儲計算機程序執行過程中所需要的數據、指令地址或狀態信息。寄存器是計算機體系結構中至關
    的頭像 發表于 08-02 18:23 ?4720次閱讀
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何構成的?

    寄存器尋址和直接尋址的區別

    寄存器尋址和直接尋址是計算機指令系統中的兩種基本尋址方式。它們在指令的執行過程中起著至關重要的作用,決定了指令操作數的來源和目標。下面我們將
    的頭像 發表于 07-12 10:42 ?2301次閱讀

    寄存器尋址的實現方式

    在計算機體系結構中,寄存器尋址是一種常見的尋址方式,它允許程序直接訪問CPU內部的寄存器寄存器尋址可以提高程序的執行效率,因為它避免了對內存的訪問。 寄存器尋址的基本概念
    的頭像 發表于 07-12 10:36 ?788次閱讀

    寄存器有哪幾種?可以實現什么功能?

    寄存器是計算機中最基本的寄存器類型,用于存儲數據和指令。它們通常具有相同的大小和功能,可以用于執行各種操作。通用寄存器的數量和大小因計算機架
    的頭像 發表于 07-12 10:32 ?1350次閱讀

    寄存器分為基本寄存器和什么兩種

    ,它們用于存儲指令、數據和地址等信息。基本寄存器的容量通常較小,但訪問速度非常快,因為它們與CPU的執行單元緊密相連。 基本寄存器的分類 基本寄存器可以分為以下幾類: (1)通用
    的頭像 發表于 07-12 10:31 ?1577次閱讀

    PLC移位寄存器指令的工作過程

    在工業自動化領域,可編程序控制(PLC)的應用日益廣泛。作為工業控制的核心設備,PLC不僅具備強大的數據處理能力,還擁有豐富的指令系統,以滿足各種復雜的控制需求。其中,移位寄存器指令
    的頭像 發表于 06-15 17:37 ?1890次閱讀

    干貨滿滿:ARM的內核寄存器講解

    內核寄存器與外設寄存器: 內核寄存器與外設寄存器是完全不同的概念。內核寄存器是指 CPU 內部的寄存器
    發表于 04-17 11:47 ?4190次閱讀
    干貨滿滿:ARM的內核<b class='flag-5'>寄存器</b>講解

    AFE模擬前端寄存器讀取操作

    AFE模擬前端寄存器讀取操作是電子系統設計和調試中不可或缺的一環。寄存器作為AFE模擬前端中的重要組成部分,存儲著各種配置參數和狀態信息,通過讀取這些寄存器,工程師可以了解AFE的工作
    的頭像 發表于 03-15 15:50 ?778次閱讀

    寄存器邏輯功能有保持功能嗎 寄存器的輸入輸出的方式有分別有哪幾種

    寄存器是計算機中用于存儲和操作數據的一種重要元件。它可以暫時存儲數據,提供對數據的讀取和寫入功能,并且可以進行各種數據操作和運算。在計算機體系結構中,寄存器可用于多種目的,如存儲
    的頭像 發表于 02-18 09:39 ?2153次閱讀

    寄存器屬于時序邏輯電路嗎 寄存器是什么邏輯電路

    寄存器是一種用來存儲數據的數字電路組件。它可以存儲一個或多個位的二進制數,并且能夠在時鐘信號的控制下將數據從輸入端復制到輸出端。寄存器通常用于存儲和操作計算機系統中的數據,是計算機的基本組
    的頭像 發表于 02-18 09:37 ?1736次閱讀

    loop指令執行時,隱含的寄存器

    當執行loop指令時,隱含的寄存器是CX寄存器。CX寄存器是循環計數寄存器,它存儲了循環的迭代
    的頭像 發表于 02-14 16:15 ?1023次閱讀
    主站蜘蛛池模板: 六六影院午夜伦理 | 粉嫩无套白浆第一次jk | 国产精品香蕉视频在线 | 草草久久久无码国产专区全集观看 | 午夜视频在线观看国产 | 国产精品69人妻无码久久久 | 最近高清中文字幕无吗免费看 | 欧美一级久久久久久久大 | 最近中文字幕免费高清MV视频 | 国产精品 中文字幕 亚洲 欧美 | 看看妇女的B免费看 | 永久精品免费影院在线观看网站 | 影音先锋av天堂 | 亚洲人美女肛交真人全程 | 国产亚洲精品久久久久 | 国产精品欧美亚洲 | 校园男男高h小黄文 | 爱穿丝袜的麻麻3d漫画免费 | MM131亚洲精品久久安然 | 涩涩涩涩爱网站 | 沙发上小泬12P| www色小姐| 免费观看男生桶美女私人部位 | 最近2019中文字幕MV免费看 | 美女叉腿掰阴大胆艺术照 | 国产亚洲精品久久久久久国模美 | 男人J进女人P | WWW国产精品内射熟女 | 亚洲黄色高清 | 女教师跟黑人男朋友激情过后 | 无限资源好看片2019免费观看 | 88蜜桃人妻无码精品系列 | 做你的爱人BD日本 | 色宅男看片午夜大片免费看 | 沟沟人体一区二区 | 一道本av免费不卡播放 | YIN荡的老师系列第6部分视频 | 曰批国产精品视频免费观看 | 久久re6热在线视频精品 | 国产精品视频国产永久视频 | 內射XXX韩国在线观看 |