在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言控制硬件工作的原理和方式

j4AI_wujianying ? 2017-12-20 15:57 ? 次閱讀

大家都知道我們可以使用C語(yǔ)言寫一段程序來控制硬件工作,但你知道其工作原理嗎?

網(wǎng)友北極

c語(yǔ)言在實(shí)際運(yùn)行中,都是以匯編指令的方式運(yùn)行的,由編譯器把C語(yǔ)言編譯成匯編指令,CPU直接執(zhí)行匯編指令。

所以這個(gè)問題就變成,匯編指令是如何操作硬件的?

如果把硬件平臺(tái)限制在x86環(huán)境下,那么匯編指令操作硬件基本上只有兩種方式:

方式一:

通過向內(nèi)存空間寫數(shù)據(jù)。硬件會(huì)把硬件上的各種寄存器(外行可以理解為訪問硬件的接口或者操作硬件的工具)映射到某一塊內(nèi)存地址空間上,之后只要用匯編指令,甚至C語(yǔ)言去讀寫這一段內(nèi)存地址空間(并非真正操作物理內(nèi)存),就可以達(dá)到操作硬件的目的了。

如果題主還有WindowsXP環(huán)境(虛擬機(jī)也可以),就可以用匯編指令直接操作顯存:

MOV AX,B800

MOV ES,AX

XOR DI,DI

MOV CX,0800

MOV AX,5555

REPZ STOSB

硬件的各種寄存器會(huì)被映射到某一塊物理內(nèi)存中,這種方式稱為MMIO,在Windows的設(shè)備管理器里,右鍵點(diǎn)設(shè)備,看屬性-》資源里,不少硬件設(shè)備都有“內(nèi)存范圍”的參數(shù),這里的內(nèi)存范圍就表示這個(gè)硬件的資源可以通過訪問這一段內(nèi)存來控制它。

方式二:

x86匯編中,還有兩個(gè)特殊的指令是IN和OUT,這是x86平***有的,上面圖里的I/O范圍,就是用IN/OUT這兩個(gè)指令來訪問和控制的。

以上兩種訪問硬件的方式,第一種是可以用C語(yǔ)言實(shí)現(xiàn)的,上面一段匯編,本質(zhì)上類似于C語(yǔ)言代碼:

char ptr = 0xB8000;

int i;

for (i = 0; i 《0x800; i++)

{ptr + i = 0x55;

}

第二種IN/OUT方式?jīng)]有直接的C語(yǔ)言語(yǔ)法對(duì)應(yīng),需要自己封裝匯編。

那么為什么平時(shí)很難用C語(yǔ)言操作硬件呢?這是因?yàn)槠綍r(shí)寫的代碼大多數(shù)都在保護(hù)模式下,保護(hù)模式下,直接訪問物理地址會(huì)受到限制,C語(yǔ)言操作的地址都是虛地址。

對(duì)于Windows來說,要訪問物理地址,需要工作在內(nèi)核模式,也就是的寫驅(qū)動(dòng)才行。

而在顯存方面,首先,題主要先明白物理地址和虛擬地址的概念。

原來的8086cpu設(shè)計(jì)的時(shí)候,地址空間有一塊區(qū)域(640K-1M)之間,有一塊作為顯存使用

這里你說的預(yù)留的地址,是指物理地址,這一段地址的準(zhǔn)確范圍是000A0000-000BFFFF,不管是32位還是64位CPU,這一段物理內(nèi)存地址一直都保留給顯存使用,不區(qū)分32位還是64位,也不區(qū)分保護(hù)模式還是實(shí)模式。

可見這一段內(nèi)存至今仍然是留給顯卡使用的。

那么現(xiàn)在為什么不能直接用這段內(nèi)存了?

因?yàn)楝F(xiàn)在的軟件都運(yùn)行在保護(hù)模式下,訪問的地址都是虛擬地址,而并非物理地址,包括你使用cmd命令打開的環(huán)境,都是虛擬地址,雖然32位XP里能用debug命令向000B8000上寫數(shù)據(jù)并能顯示在cmd的界面里,但本質(zhì)上,這都是虛擬出來的。

如果要想用這段顯存怎么辦?

自己寫一個(gè)簡(jiǎn)易的操作系統(tǒng),不啟動(dòng)顯卡的各種圖形加速功能,CPU進(jìn)入保護(hù)模式后在GDT里映射一個(gè)4G的數(shù)據(jù)段,與物理地址一致,那么向000B8000上寫數(shù)據(jù),就會(huì)像過去DOS一樣顯示在屏幕上,所以保護(hù)模式下也可以訪問這一段內(nèi)存。所以,保護(hù)模式下,也可以用它。

顯卡那么多顯存是怎么映射的?

有很多內(nèi)存地址被映射給顯存了,就是通過這種映射關(guān)系,把一些物理地址留給顯存,使得CPU能像訪問內(nèi)存一樣訪問顯存資源。

當(dāng)然,實(shí)際情況是,2G顯存未必完全映射,而是只映射一部分地址,顯卡有一些開放的寄存器能夠控制哪部分顯存映射過來,這樣就能使得CPU在使用比較少的物理地址范圍的情況下,訪問全部的顯存。

還有一個(gè)很有意思的事情:在虛擬機(jī)里,找到映射的高地址部分的第一塊內(nèi)存區(qū)域,寫一個(gè)能直接訪問物理地址的程序(比如一個(gè)驅(qū)動(dòng)),去讀這一塊內(nèi)存,然后寫到文件里,再用屏幕截圖,也寫到文件里,會(huì)發(fā)現(xiàn)截圖的內(nèi)容和顯存里讀出來的內(nèi)容基本上是一樣的。

網(wǎng)友a(bǔ)wayisblue

要回答你的問題,我們需要要知道:

硬件是一種什么樣的存在

什么是驅(qū)動(dòng)。

C語(yǔ)言怎么操作硬件

我就不嚴(yán)格去定義這些概念了,我就以一個(gè)例子來通俗地講解一下吧。

首先講硬件:

先介紹一款單片機(jī)芯片STM8

這款芯片里面有cpu, 內(nèi)存,寄存器(先不要覺得看到新名詞壓力大,繼續(xù)往下看)等等,相當(dāng)于我們的電腦了,但還要外接其它硬件。

這里你需要知道的概念是:

芯片的引腳跟寄存器是相對(duì)應(yīng)的,寄存器是8位的內(nèi)存單元(對(duì),存在于內(nèi)存上面),當(dāng)你往這個(gè)內(nèi)存單元里面寫入數(shù)據(jù)時(shí),芯片的引腳的電壓會(huì)發(fā)生變化,比如說我寫入的是01100001,則芯片上與之對(duì)應(yīng)的8個(gè)引腳的電壓狀態(tài)(分為高電平與低電平兩種)會(huì)輸出:低高高低低低低高。

cpu可以執(zhí)行代碼指令,指令可以操作內(nèi)存。

結(jié)論:所以從上面兩點(diǎn)可以我們可以知道,cpu可以執(zhí)行指令,使芯片的引腳電平(電壓)發(fā)生變化。

關(guān)于這款顯示器,我們需要知道的是:

它是有引腳的,這些引腳可以跟到前面介紹的那款單片機(jī)芯片的引腳相連。

該顯示器有自帶的內(nèi)存,用于存儲(chǔ)要顯示的字符,顯示器從該內(nèi)存里面讀取字符來來顯示。

單片機(jī)芯片與該顯示器相連后,可以通過引腳往該顯示器的內(nèi)存里寫數(shù)據(jù)(通過多個(gè)引腳電平的高低不同來代表不同的數(shù)據(jù),比如說:低高高低低低低高 代表01100001,這個(gè)數(shù)據(jù)寫在顯示器的內(nèi)存里面,被顯示器所顯示,當(dāng)然,會(huì)根據(jù)ASCII來顯示數(shù)字對(duì)應(yīng)的字符,01100001對(duì)應(yīng)的字符是‘a(chǎn)’),除了接收數(shù)據(jù)的引腳外,還有控制顯示器的引腳(這個(gè)我們會(huì)在驅(qū)動(dòng)那里介紹,繼續(xù)往下看)。

結(jié)論:?jiǎn)纹瑱C(jī)芯片與顯示器相連,可以通過引腳輸出的電平來控制顯示器的字符顯示。

那么,綜合上面,也就是說,單片機(jī)芯片cpu可以通過執(zhí)行指令來控制顯示器的字符顯示。

而這里,題主所說的硬件,指的就是這個(gè)顯示器了。

接下來講驅(qū)動(dòng):

那么,什么是驅(qū)動(dòng)呢?驅(qū)動(dòng)無非就是硬件跟軟件的中間層,但我們不糾結(jié)這種關(guān)系,直接來看一下,對(duì)于我們這個(gè)例子,驅(qū)動(dòng)指的是什么。首先我們要知道:

顯示器支持很多種操作,比如說清除顯示,光標(biāo)移動(dòng),讀取數(shù)據(jù),寫數(shù)據(jù)等等。

這些操作數(shù)據(jù)引腳和控制引腳來實(shí)現(xiàn)。

引腳可以通過單片機(jī)芯片來控制。

結(jié)論:我們可以通過在單片機(jī)芯片里面寫顯示器的“驅(qū)動(dòng)”程序來屏蔽掉硬件(顯示器硬件)層。

于是這里驅(qū)動(dòng)程序,指的是顯示器所支持操作的程序表示。比如說清除顯示,我們可以編寫一個(gè)clear()函數(shù),光標(biāo)移動(dòng),我們編寫一個(gè)move_cursor()函數(shù),讀取數(shù)據(jù)和寫數(shù)據(jù)分別為read()和write(),然后分別實(shí)現(xiàn)就可以了(通過向寄存器里寫數(shù)據(jù)的形式,進(jìn)而控制引腳的電平變化,再而控制顯示器,這個(gè)過程前面已有介紹)。這些函數(shù)就是驅(qū)動(dòng)程序了。為什么上面說驅(qū)動(dòng)程序可以屏蔽掉硬件呢?因?yàn)?a href="http://m.xsypw.cn/v/tag/1730/" target="_blank">程序員可以使用前面的驅(qū)動(dòng)程序來直接操作顯示器(硬件),而不用知道太多關(guān)于硬件的事情,而一般的驅(qū)動(dòng)程序也可以由廠家來提供。

再說明一點(diǎn):一般這些驅(qū)動(dòng)程序可以用匯編寫(出于運(yùn)行效率的考慮),也可以用C語(yǔ)言來編寫的,比如說我上面的例子,就可以直接用C語(yǔ)言來編寫。當(dāng)然C語(yǔ)言內(nèi)聯(lián)匯編的形式也可以。

最后講C語(yǔ)言怎么操作硬件:

相信到這里,C語(yǔ)言是怎么操作硬件的已經(jīng)比較明白了。

這里總結(jié)一下:

C語(yǔ)言由CPU運(yùn)行(實(shí)際上是先編譯成機(jī)器碼存在芯片里面然后執(zhí)行),可以去操作內(nèi)存。

內(nèi)存里有一段是跟寄存器相對(duì)應(yīng)的,而寄存器是跟芯片的引腳相對(duì)應(yīng)的,于是操作該段內(nèi)存就能控制芯片引腳的電壓變化。

硬件(比如說顯示器)有引腳(或者說排線,這些也是一樣的東西),這些引腳跟芯片的引腳相連可以接受芯片的控制。

可以把對(duì)某個(gè)硬件的操作做成一系列操作函數(shù),這些操作函數(shù)就是驅(qū)動(dòng)程序了。

于是我們的C語(yǔ)言只要去調(diào)用這個(gè)驅(qū)動(dòng)程序就可以直接操作硬件了。(當(dāng)然驅(qū)動(dòng)程序也可以由C語(yǔ)言來編寫,所以C語(yǔ)言操作硬件并不一定要經(jīng)過驅(qū)動(dòng)程序)。

網(wǎng)友Chow Anod

北極已經(jīng)說的很到位了。我補(bǔ)充一些知識(shí)點(diǎn):

1 語(yǔ)言層面上,C能直接操作的“硬件”只有內(nèi)存地址。雖然C支持register關(guān)鍵字,但是不能指定某個(gè)特定的寄存器,所以只有內(nèi)存地址。而C中操作內(nèi)存地址的方式就是指針。例如:

char p = 。..;p = 。..;

2 根據(jù)1反推,可以明白如果要開放給C來操作某個(gè)硬件,最直接的方案就是設(shè)計(jì)硬件的時(shí)候預(yù)先分配好一些固定的地址的用途,然后實(shí)際項(xiàng)目中往這些固定地址寫入合法的數(shù)據(jù)。這樣就可以通過類似

uint32_t p = SCREEN_ADDR;p = RGBA(0xff,0xff,0xff,0xff);

這樣的代碼來實(shí)現(xiàn)對(duì)硬件的操作了。

3 那這個(gè)地址怎么拿到呢?什么樣的數(shù)據(jù)才是合法的呢?要解答這些問題,就需要查閱具體設(shè)備的spec了。例如這個(gè)一眼看過去就能的明白的例子(一眼沒看明白請(qǐng)反復(fù)閱讀以完全理解上面第二點(diǎn)內(nèi)容):

PS:x86架構(gòu)的代碼不能這么寫,原因見北極的回答。

網(wǎng)友北極

我們是用電腦的鍵盤來輸入的指令,每一個(gè)指令都對(duì)應(yīng)一個(gè)ASCII碼,而這里的ASCII碼就是有序的電壓的高低(或電流的有無,下面只提電壓的高低),即我們輸入的是電壓的高低,你所看到代碼是這些電壓的高低控制顯示器所顯示的圖像,其實(shí)電腦也不知道它是什么,只知道這樣顯示。

結(jié)論:代碼其實(shí)就是存儲(chǔ)在存儲(chǔ)器(內(nèi)存、硬盤或者閃存等等)中有序的電壓的高低。

再說編譯:

編譯是一個(gè)有序的電壓的高低向另一種有序的電壓高低的一種轉(zhuǎn)換過程,下面以52單片機(jī)為例,我們編譯是從表示ASCII碼的那種有序電壓高低轉(zhuǎn)換為52單片機(jī)能夠識(shí)別的另一種規(guī)定好的有序電壓高低,即表示HEX文件的電壓高低。

結(jié)論:編譯出的結(jié)果還是電腦中存儲(chǔ)的有序電壓高低。

到單片機(jī)燒錄:

接下倆就是燒錄,理解了上面兩點(diǎn)就很容易理解下面的內(nèi)容,燒錄就是電腦中的有序電壓高低通過數(shù)據(jù)線傳輸?shù)絾纹瑱C(jī)中的ROM中。

接下來ROM就可以釋放其中的電壓來控制外圍的電路。

總結(jié):從代碼的編輯到最后對(duì)電路的控制都是電壓在起作用,只是為了方面我們而給我們展現(xiàn)的形式不一樣而已,而其本質(zhì)都是電壓,這樣也就不存在轉(zhuǎn)換。

理解這句話:世界上沒有軟件,軟件只是對(duì)硬件的一種反映,就像意識(shí)是對(duì)世界的一種反映是一樣的!

相信這樣就很容易理解了。

看到有人贊同了我的觀點(diǎn),很開心,針對(duì)題目我再補(bǔ)充一點(diǎn):

只要你提到0/1,提到軟件,這個(gè)問題就沒法理解。..因?yàn)檐浖景?/1】和硬件始終存在一道無法跨越的鴻溝;

你說你在單片機(jī)中寫0,請(qǐng)問你是如何寫0的?在鍵盤上敲個(gè)0?實(shí)際還是電平【和我們理解的數(shù)字沒關(guān)系】,那個(gè)0只是你在電腦顯示器上電平的呈現(xiàn)形式,那個(gè)所謂的0【實(shí)質(zhì)是電平】可以傳輸?shù)絾纹瑱C(jī)中的ROM中,電平控制電平?jīng)]什么疑問吧,這樣就輸出低電平了。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

    140758

原文標(biāo)題:你知道到嗎,C語(yǔ)言竟是如何調(diào)用硬件的?

文章出處:【微信號(hào):wujianying_danpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮?b class='flag-5'>方式 C++中的class的運(yùn)行原理

    這里主要介紹下在C語(yǔ)言中是如何實(shí)現(xiàn)的面向?qū)ο蟆V懒?b class='flag-5'>C語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮?b class='flag-5'>方式,再聯(lián)想下,C++中
    發(fā)表于 10-21 09:00 ?1331次閱讀

    C語(yǔ)言是如何控制硬件的?

    提到C語(yǔ)言就會(huì)想到單片機(jī)編程,像java python 這些就是純軟件編程語(yǔ)言,不會(huì)和硬件打交道。為什么C可以和
    發(fā)表于 07-18 08:06

    使用C語(yǔ)言方式來點(diǎn)亮LED的問題

    與上一次不同,本次使用C語(yǔ)言方式來點(diǎn)亮LED,那么關(guān)鍵的問題來了,程序怎么跳到C語(yǔ)言的main函數(shù)的入口呢?即便程序跳到了main函數(shù)入口
    發(fā)表于 12-15 07:29

    AGV的工作原理、控制方式及應(yīng)用

    AGV的工作原理、控制方式及應(yīng)用AGV的工作原理、控制方式及應(yīng)用
    發(fā)表于 12-18 16:31 ?151次下載

    C語(yǔ)言和指針之間的關(guān)系分析

    C語(yǔ)言直接映射了CPU的工作方式,而且是用極其簡(jiǎn)單的方式,這就是C語(yǔ)言的藝術(shù)。
    發(fā)表于 03-15 11:15 ?1272次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>和指針之間的關(guān)系分析

    華為硬件/C語(yǔ)言/天線/通信技術(shù)資料合集

    華為硬件/C語(yǔ)言/天線/通信技術(shù)資料合集
    發(fā)表于 05-19 10:37 ?82次下載

    500W 無橋PFC開關(guān)電源設(shè)計(jì)資料,C語(yǔ)言源碼。硬件原理 500W 無橋PFC開關(guān)電源設(shè)計(jì)資料,C語(yǔ)言源碼。硬件原理

    500W 無橋PFC開關(guān)電源設(shè)計(jì)資料,C語(yǔ)言源碼。硬件原理 500W 無橋PFC開關(guān)電源設(shè)計(jì)資料,C語(yǔ)言源碼。
    發(fā)表于 11-07 11:36 ?130次下載
    500W 無橋PFC開關(guān)電源設(shè)計(jì)資料,<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>源碼。<b class='flag-5'>硬件</b>原理 500W 無橋PFC開關(guān)電源設(shè)計(jì)資料,<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>源碼。<b class='flag-5'>硬件</b>原理

    硬件編程--根據(jù)時(shí)序圖寫C語(yǔ)言驅(qū)動(dòng)

    AD芯片和Max6675芯片的數(shù)據(jù)。要完成這個(gè)工作,實(shí)際上要做一件橫跨硬件電路設(shè)計(jì)、驅(qū)動(dòng)編寫、純C軟件編寫的工程,對(duì)于我這么一個(gè)硬件新手來說還是有不小的難度的。在完成這些
    發(fā)表于 01-13 14:22 ?11次下載

    硬件工程師必知的10個(gè)C語(yǔ)言技巧

    硬件設(shè)計(jì)師最常見的工作內(nèi)容,就是通過寫代碼來測(cè)試硬件。這10個(gè)C語(yǔ)言技巧(C
    的頭像 發(fā)表于 02-23 15:35 ?2185次閱讀
    <b class='flag-5'>硬件</b>工程師必知的10個(gè)<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>技巧

    ?為什么嵌入式開發(fā)要選擇C語(yǔ)言?

    簡(jiǎn)潔緊湊,使用靈活的語(yǔ)法機(jī)制,并能直接訪問硬件能夠直接訪問硬件語(yǔ)言有:匯編和C語(yǔ)言匯編屬于低級(jí)語(yǔ)言
    的頭像 發(fā)表于 03-11 10:21 ?1448次閱讀

    怎么使用C語(yǔ)言控制硬件

    C語(yǔ)言的應(yīng)用編程在單片機(jī)的領(lǐng)域占了很大一部分,使用的比較多的51單片機(jī)和STM32單片機(jī)都可以使用MDK軟件編寫固件。
    的頭像 發(fā)表于 06-04 17:31 ?4874次閱讀

    C語(yǔ)言控制器模塊用戶手冊(cè)(硬件設(shè)計(jì)/功能解說篇)

    C語(yǔ)言控制器模塊用戶手冊(cè)(硬件設(shè)計(jì)/功能解說篇) 產(chǎn)品規(guī)格書.在使用三菱 C 語(yǔ)言
    發(fā)表于 08-25 09:58 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>控制</b>器模塊用戶手冊(cè)(<b class='flag-5'>硬件</b>設(shè)計(jì)/功能解說篇)

    C語(yǔ)言應(yīng)用】使用余式表的方式計(jì)算CRC16

    C語(yǔ)言應(yīng)用】使用余式表的方式計(jì)算CRC16
    的頭像 發(fā)表于 08-31 13:10 ?2386次閱讀

    訓(xùn)練大語(yǔ)言模型帶來的硬件挑戰(zhàn)

    生成式AI和大語(yǔ)言模型(LLM)正在以難以置信的方式吸引全世界的目光,本文簡(jiǎn)要介紹了大語(yǔ)言模型,訓(xùn)練這些模型帶來的硬件挑戰(zhàn),以及GPU和網(wǎng)絡(luò)行業(yè)如何針對(duì)訓(xùn)練的
    的頭像 發(fā)表于 09-01 17:14 ?2044次閱讀
    訓(xùn)練大<b class='flag-5'>語(yǔ)言</b>模型帶來的<b class='flag-5'>硬件</b>挑戰(zhàn)

    C語(yǔ)言運(yùn)行環(huán)境是什么

    C語(yǔ)言運(yùn)行環(huán)境(C language runtime environment)是指在執(zhí)行C語(yǔ)言程序時(shí)所需的軟件及
    的頭像 發(fā)表于 11-27 16:13 ?4405次閱讀
    主站蜘蛛池模板: 色偷偷91久久综合噜噜噜噜 | 亚洲a在线观看 | 欧美人与动欧交视频 | 免费番茄社区性色大片 | 欧美三级在线视频 | 欧美日本一区二区三区 | 乱色伦短篇小说 | 欧美另类网 | 色多多a| 天天干视频网站 | 色综合天天综合中文网 | 91大神网址 | 狠狠色狠狠色综合久久一 | 亚洲乱亚洲乱妇13p 亚洲免费mv | 亚洲 欧美 精品 | 黄色成人在线 | 婷婷丁香五 | 一区二区三区无码高清视频 | 欧美激情综合色综合啪啪五月 | 好紧好湿好黄的视频 | 在线天堂中文在线网 | 三级在线免费 | 久久久久久91精品色婷婷 | 伦理片日本韩国电影三级在线观看 | 亚洲欧美日韩在线精品2021 | 无毒在线 | 爱射综合 | 免费的很黄很色的床小视频 | 成片免费的禁v影片 | 操插干| 日韩美女三级 | 亚洲97在线| 2021年最热新版天堂资源中文 | av在线色 | 免费看吻胸亲嘴激烈网站 | 黄网在线看 | 日日干狠狠干 | 亚州色吧 | 免费一区二区视频 | 很黄网站| 明日花在线观看 |