亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASM > 正文

x86內(nèi)聯(lián)匯編

2019-11-17 05:14:38
字體:
供稿:網(wǎng)友

  本文提供了在 linux 平臺上使用和構(gòu)造 x86 內(nèi)聯(lián)匯編的概括性介紹。他介紹了內(nèi)聯(lián)匯編及其各種用法的基礎(chǔ)知識,提供了一些基本的內(nèi)聯(lián)匯編編碼指導(dǎo),并解釋了在 Linux 內(nèi)核中內(nèi)聯(lián)匯編代碼的一些實例。
假如您是 linux 內(nèi)核的開發(fā)人員,您會發(fā)現(xiàn)自己經(jīng)常要對與體系結(jié)構(gòu)高度相關(guān)的功能進行編碼或優(yōu)化代碼路徑。您很可能是通過將匯編語言指令插入到 C 語句的中間(又稱為內(nèi)聯(lián)匯編的一種方法)來執(zhí)行這些任務(wù)的。讓我們看一下 Linux 中內(nèi)聯(lián)匯編的特定用法。(我們將討論限制在 IA32 匯編。)
[目錄]

--------------------------------------------------------------------------------
簡述

GNU 匯編程序簡述
讓我們首先看一下 linux 中使用的基本匯編程序語法。GCC(用于 Linux 的 GNU C 編譯器)使用 AT&T 匯編語法。下面列出了這種語法的一些基本規(guī)則。(該列表肯定不完整;只包括了與內(nèi)聯(lián)匯編相關(guān)的那些規(guī)則。)
寄存器命名
寄存器名稱有 % 前綴。即,假如必須使用 eax,它應(yīng)該用作 %eax。

源操作數(shù)和目的操作數(shù)的順序
在所有指令中,先是源操作數(shù),然后才是目的操作數(shù)。這與將源操作數(shù)放在目的操作數(shù)之后的 Intel 語法不同。
mov %eax, %ebx, transfers the contents of eax to ebx.

操作數(shù)大小
根據(jù)操作數(shù)是字節(jié) (byte)、字 (Word) 還是長型 (long),指令的后綴可以是 b、w 或 l。這并不是強制性的;GCC 會嘗試通過讀取操作數(shù)來提供相應(yīng)的后綴。但手工指定后綴可以改善代碼的可讀性,并可以消除編譯器猜測不正確的可能性。

movb %al, %bl -- Byte move
movw %ax, %bx -- Word move
movl %eax, %ebx -- Longword move

立即操作數(shù)
通過使用 $ 指定直接操作數(shù)。

movl $0xffff, %eax -- will move the value of 0xffff into eax register.

間接內(nèi)存引用
任何對內(nèi)存的間接引用都是通過使用 ( ) 來完成的。

movb (%esi), %al -- will transfer the byte in the memory
pointed by esi into al register



[目錄]

--------------------------------------------------------------------------------


內(nèi)聯(lián)匯編

內(nèi)聯(lián)匯編
GCC 為內(nèi)聯(lián)匯編提供非凡結(jié)構(gòu),它具有以下格式:
asm ( assembler template
: output Operands (optional)
: input operands (optional)
: list of clobbered registers (optional)
);
本例中,匯編程序模板由匯編指令組成。輸入操作數(shù)是充當(dāng)指令輸入操作數(shù)使用的 C 表達式。輸出操作數(shù)是將對其執(zhí)行匯編指令輸出的 C 表達式。

內(nèi)聯(lián)匯編的重要性體現(xiàn)在它能夠靈活操作,而且可以使其輸出通過 C 變量顯示出來。因為它具有這種能力,所以 "asm" 可以用作匯編指令和包含它的 C 程序之間的接口。

一個非常基本但很重要的區(qū)別在于簡單內(nèi)聯(lián)匯編只包括指令,而擴展內(nèi)聯(lián)匯編包括操作數(shù)。要說明這一點,考慮以下示例:

內(nèi)聯(lián)匯編的基本要素

{
int a=10, b;
asm ("movl %1, %%eax;
movl %%eax, %0;"
:"=r"(b) /* output */
:"r"(a) /* input */
:"%eax"); /* clobbered register */
}

在上例中,我們使用匯編指令使 "b" 的值等于 "a"。請注重以下幾點:
"b" 是輸出操作數(shù),由 %0 引用,"a" 是輸入操作數(shù),由 %1 引用。
"r" 是操作數(shù)的約束,它指定將變量 "a" 和 "b" 存儲在寄存器中。請注重,輸出操作數(shù)約束應(yīng)該帶有一個約束修飾符 "=",指定它是輸出操作數(shù)。
要在 "asm" 內(nèi)使用寄存器 %eax,%eax 的前面應(yīng)該再加一個 %,換句話說就是 %%eax,因為 "asm" 使用 %0、%1 等來標(biāo)識變量。任何帶有一個 % 的數(shù)都看作是輸入/輸出操作數(shù),而不認為是寄存器。
第三個冒號后的修飾寄存器 %eax 告訴將在 "asm" 中修改 GCC %eax 的值,這樣 GCC 就不使用該寄存器存儲任何其它的值。

movl %1, %%eax 將 "a" 的值移到 %eax 中,movl %%eax, %0 將 %eax 的內(nèi)容移到 "b" 中。
因為 "b" 被指定成輸出操作數(shù),因此當(dāng) "asm" 的執(zhí)行完成后,它將反映出更新的值。換句話說,對 "asm" 內(nèi) "b" 所做的更改將在 "asm" 外反映出來。




[目錄]

--------------------------------------------------------------------------------


程序模板

匯編程序模板是一組插入到 C 程序中的匯編指令(可以是單個指令,也可以是一組指令)。每條指令都應(yīng)該由雙引號括起,或者整組指令應(yīng)該由雙引號括起。每條指令還應(yīng)該用一個定界符結(jié)尾。有效的定界符為新行 (
) 和分號 (icon_wink.gif。 '
' 后可以跟一個 tab( ) 作為格式化符號,增加 GCC 在匯編文件中生成的指令的可讀性。 指令通過數(shù) %0、%1 等來引用 C 表達式(指定為操作數(shù))。
假如希望確保編譯器不會在 "asm" 內(nèi)部優(yōu)化指令,可以在 "asm" 后使用要害字 "volatile"。假如程序必須與 ANSI C 兼容,則應(yīng)該使用 __asm__ 和 __volatile__,而不是 asm 和 volatile。



[目錄]

--------------------------------------------------------------------------------


操作數(shù)

C 表達式用作 "asm" 內(nèi)的匯編指令操作數(shù)。在匯編指令通過對 C 程序的 C 表達式進行操作來執(zhí)行有意義的作業(yè)的情況下,操作數(shù)是內(nèi)聯(lián)匯編的主要特性。
每個操作數(shù)都由操作數(shù)約束字符串指定,后面跟用括弧括起的 C 表達式,例如:"constraint" (C eXPRession)。操作數(shù)約束的主要功能是確定操作數(shù)的尋址方式。

可以在輸入和輸出部分中同時使用多個操作數(shù)。每個操作數(shù)由逗號分隔開。

在匯編程序模板內(nèi)部,操作數(shù)由數(shù)字引用。假如總共有 n 個操作數(shù)(包括輸入和輸出),那么第一個輸出操作數(shù)的編號為 0,逐項遞增,最后那個輸入操作數(shù)的編號為 n-1??偛僮鲾?shù)的數(shù)目限制在 10,假如機器描述中任何指令模式中的最大操作數(shù)數(shù)目大于 10,則使用后者作為限制。



[目錄]

--------------------------------------------------------------------------------


修飾寄存器列表

假如 "asm" 中的指令指的是硬件寄存器,可以告訴 GCC 我們將自己使用和修改它們。這樣,GCC 就不會假設(shè)它裝入到這些寄存器中的值是有效值。通常不需要將輸入和輸出寄存器列為 clobbered,因為 GCC 知道 "asm" 使用它們(因為它們被明確指定為約束)。不過,假如指令使用任何其它的寄存器,無論是明確的還是隱含的(寄存器不在輸入約束列表中出現(xiàn),也不在輸出約束列表中出現(xiàn)),寄存器都必須被指定為修飾列表。修飾寄存器列在第三個冒號之后,其名稱被指定為字符串。
至于要害字,假如指令以某些不可預(yù)知且不明確的方式修改了內(nèi)存,則可能將 "memory" 要害字添加到修飾寄存器列表中。這樣就告訴 GCC 不要在不同指令之間將內(nèi)存值高速緩存在寄存器中。



[目錄]

--------------------------------------------------------------------------------


操作數(shù)約束

前面提到過,"asm" 中的每個操作數(shù)都應(yīng)該由操作數(shù)約束字符串描述,后面跟用括弧括起的 C 表達式。操作數(shù)約束主要是確定指令中操作數(shù)的尋址方式。約束也可以指定:
·是否答應(yīng)操作數(shù)位于寄存器中,以及它可以包括在哪些種類的寄存器中
·操作數(shù)是否可以是內(nèi)存引用,以及在這種情況下使用哪些種類的地址
·操作數(shù)是否可以是立即數(shù)

約束還要求兩個操作數(shù)匹配。

常用約束

在可用的操作數(shù)約束中,只有一小部分是常用的;下面列出了這些約束以及簡要描述。有關(guān)操作數(shù)約束的完整列表,請參考 GCC 和 GAS 手冊。

寄存器操作數(shù)約束 (r)
使用這種約束指定操作數(shù)時,它們存儲在通用寄存器中。請看下例:
asm ("movl %%cr3, %0
" :"=r"(cr3val));
這里,變量 cr3val 保存在寄存器中,%cr3 的值復(fù)制到寄存器上,cr3val 的值從該寄存器更新到內(nèi)存中。指定 "r" 約束時,GCC 可以將變量 cr3val 保存在任何可用的 GPR 中。要指定寄存器,必須通過使用特定的寄存器約束直接指定寄存器名。

a %eax
b %ebx
c %ecx
d %edx
S %esi
D %edi

內(nèi)存操作數(shù)約束 (m)
當(dāng)操作數(shù)位于內(nèi)存中時,任何對它們執(zhí)行的操作都將在內(nèi)存位置中直接發(fā)生,這與寄存器約束正好相反,后者先將值存儲在要修改的寄存器中,然后將它寫回內(nèi)存位置中。但寄存器約束通常只在對于指令來說它們是絕對必需的,或者它們可以大大提高進程速度時使用。當(dāng)需要在 "asm" 內(nèi)部更新 C 變量,而您又確實不希望使用寄存器來保存其值時,使用內(nèi)存約束最為有效。例如,idtr 的值存儲在內(nèi)存位置 loc 中:
("sidt %0
" : :"m"(loc));

匹配(數(shù)字)約束
在某些情況下,一個變量既要充當(dāng)輸入操作數(shù),也要充當(dāng)輸出操作數(shù)。可以通過使用匹配約束在 "asm" 中指定這種情況。


asm ("incl %0" :"=a"(var):"0"(var));

在匹配約束的示例中,寄存器 %eax 既用作輸入變量,也用作輸出變量。將 var 輸入讀取到 %eax,增加后將更新的 %eax 再次存儲在 var 中。這里的 "0" 指定第 0 個輸出變量相同的約束。即,它指定 var 的輸出實例只應(yīng)該存儲在 %eax 中。該約束可以用于以下情況:

·輸入從變量中讀取,或者變量被修改后,修改寫回到同一變量中
·不需要將輸入操作數(shù)和輸出操作數(shù)的實例分開
·使用匹配約束最重要的意義在于它們可以導(dǎo)致有效地使用可用寄存器。




[目錄]

--------------------------------------------------------------------------------


示例

一般內(nèi)聯(lián)匯編用法示例
以下示例通過各種不同的操作數(shù)約束說明了用法。有如此多的約束以至于無法將它們一一列出,這里只列出了最經(jīng)常使用的那些約束類型。



[目錄]

--------------------------------------------------------------------------------


寄存器約束

"asm" 和寄存器約束 "r"
讓我們先看一下使用寄存器約束 r 的 "asm"。我們的示例顯示了 GCC 如何分配寄存器,以及它如何更新輸出變量的值。
int main(void)
{
int x = 10, y;
asm ("movl %1, %%eax;
"movl %%eax, %0;"
:"=r"(y) /* y is output operand */
:"r"(x) /* x is input operand */
:"%eax"); /* %eax is clobbered register */
}

在該例中,x 的值復(fù)制為 "asm" 中的 y。x 和 y 都通過存儲在寄存器中傳遞給 "asm"。為該例生成的匯編代碼如下:

main:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
movl $10,-4(%ebp)
movl -4(%ebp),%edx /* x=10 is stored in %edx */
#APP /* asm starts here */
movl %edx, %eax /* x is moved to %eax */
movl %eax, %edx /* y is allocated in edx and updated */
#NO_APP /* asm ends here */
movl %edx,-8(%ebp) /* value of y in stack is updated with the value in %edx */

當(dāng)使用 "r" 約束時,GCC 在這里可以自由分配任何寄存器。在我們的示例中,它選擇 %edx 來存儲 x。在讀取了 %edx 中 x 的值后,它為 y 也分配了相同的寄存器。

因為 y 是在輸出操作數(shù)部分中指定的,所以 %edx 中更新的值存儲在 -8(%ebp),堆棧上 y 的位置中。假如 y 是在輸入部分中指定的,那么即使它在 y 的臨時寄存器存儲值 (%edx) 中被更新,堆棧上 y 的值也不會更新。

因為 %eax 是在修飾列表中指定的,GCC 不在任何其它地方使用它來存儲數(shù)據(jù)。

輸入 x 和輸出 y 都分配在同一個 %edx 寄存器中,假設(shè)輸入在輸出產(chǎn)生之前被消耗。請注重,假如您有許多指令,就不是這種情況了。要確保輸入和輸出分配到不同的寄存器中,可以指定 & 約束修飾符。下面是添加了約束修飾符的示例。

int main(void)
{
int x = 10, y;
asm ("movl %1, %%eax;
"movl %%eax, %0;"
:"=&r"(y) /* y is output operand, note the & constraint modifier. */
:"r"(x) /* x is input operand */
:"%eax"); /* %eax is clobbered register */
}

以下是為該示例生成的匯編代碼,從中可以明顯地看出 x 和 y 存儲在 "asm" 中不同的寄存器中。

main:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
movl $10,-4(%ebp)
movl -4(%ebp),%ecx /* x, the input is in %ecx */
#APP
movl %ecx, %eax
movl %eax, %edx /* y, the output is in %edx */
#NO_APP
movl %edx,-8(%ebp)

特定寄存器約束的使用
現(xiàn)在讓我們看一下如何將個別寄存器作為操作數(shù)的約束指定。在下面的示例中,cpuid 指令采用 %eax 寄存器中的輸入,然后在四個寄存器中給出輸出:%eax、%ebx、%ecx、%edx。對 cpuid 的輸入(變量 "op")傳遞到 "asm" 的 eax 寄存器中,因為 cpuid 希望它這樣做。在輸出中使用 a、b、c 和 d 約束,分別收集四個寄存器中的值。

asm ("cpuid"
: "=a" (_eax),
"=b" (_ebx),
"=c" (_ecx),
"=d" (_edx)
: "a" (op));


在下面可以看到為它生成的匯編代碼(假設(shè) _eax、_ebx 等... 變量都存儲在堆棧上):

movl -20(%ebp),%eax /* store 'op' in %eax -- input */
#APP
cpuid
#NO_APP
movl %eax,-4(%ebp) /* store %eax in _eax -- output */
movl %ebx,-8(%ebp) /* store other registers in
movl %ecx,-12(%ebp)
respective output variables */
movl %edx,-16(%ebp)

strcpy 函數(shù)可以通過以下方式使用 "S" 和 "D" 約束來實現(xiàn):

asm ("cld

rep

movsb"
: /* no input */
:"S"(src), "D"(dst), "c"(count));

通過使用 "S" 約束將源指針 src 放入 %esi 中,使用 "D" 約束將目的指針 dst 放入 %edi 中。因為 rep 前綴需要 count 值,所以將它放入 %ecx 中。

在下面可以看到另一個約束,它使用兩個寄存器 %eax 和 %edx 將兩個 32 位的值合并在一起,然后生成一個64 位的值:

#define rdtscll(val)
__asm__ __volatile__ ("rdtsc" : "=A" (val))
The generated assembly looks like this (if val has a 64 bit memory space).
#APP
rdtsc
#NO_APP
movl %eax,-8(%ebp) /* As a result of A constraint
movl %edx,-4(%ebp)
%eax and %edx serve as outputs */
Note here that the values in %edx:%eax serve as 64 bit output.





[目錄]

--------------------------------------------------------------------------------


匹配約束

使用匹配約束
在下面將看到系統(tǒng)調(diào)用的代碼,它有四個參數(shù):
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4)
{
long __res;
__asm__ volatile ("int $0x80"
: "=a" (__res)
: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)),
"d" ((long)(arg3)),"S" ((long)(arg4)));
__syscall_return(type,__res);
}

在上例中,通過使用 b、c、d 和 S 約束將系統(tǒng)調(diào)用的四個自變量放入 %ebx、%ecx、%edx 和 %esi 中。請注重,在輸出中使用了 "=a" 約束,這樣,位于 %eax 中的系統(tǒng)調(diào)用的返回值就被放入變量 __res 中。通過將匹配約束 "0" 用作輸入部分中第一個操作數(shù)約束,syscall 號 __NR_##name 被放入 %eax 中,并用作對系統(tǒng)調(diào)用的輸入。這樣,這里的 %eax 既可以用作輸入寄存器,又可以用作輸出寄存器。沒有其它寄存器用于這個目的。另請注重,輸入(syscall 號)在產(chǎn)生輸出(syscall 的返回值)之前被消耗(使用)。



[目錄]

--------------------------------------------------------------------------------


內(nèi)存操作數(shù)約束

內(nèi)存操作數(shù)約束的使用
請考慮下面的原子遞減操作:
__asm__ __volatile__(
"lock; decl %0"
:"=m" (counter)
:"m" (counter));

為它生成的匯編類似于:

#APP
lock
decl -24(%ebp) /* counter is modified on its memory location */
#NO_APP.

您可能考慮在這里為 counter 使用寄存器約束。假如這樣做,counter 的值必須先復(fù)制到寄存器,遞減,然后對其內(nèi)存更新。但這樣您會無法理解鎖定和原子性的全部意圖,這些明確顯示了使用內(nèi)存約束的必要性。



[目錄]

--------------------------------------------------------------------------------


修飾寄存器

使用修飾寄存器
請考慮內(nèi)存拷貝的基本實現(xiàn)。
asm ("movl $count, %%ecx;
up: lodsl;
stosl;
loop up;"
: /* no output */
:"S"(src), "D"(dst) /* input */

:"%ecx", "%eax" ); /* clobbered list */

當(dāng)lodsl 修改 %eax 時,lodsl 和 stosl 指令隱含地使用它。%ecx 寄存器明確裝入 count。但 GCC 在我們通知它以前是不知道這些的,我們是通過將 %eax 和 %ecx 包括在修飾寄存器集中來通知 GCC 的。在完成這一步之前,GCC 假設(shè) %eax 和 %ecx 是自由的,它可能決定將它們用作存儲其它的數(shù)據(jù)。請注重,%esi 和 %edi 由 "asm" 使用,它們不在修飾列表中。這是因為已經(jīng)聲明 "asm" 將在輸入操作數(shù)列表中使用它們。這里最低限度是,假如在 "asm" 內(nèi)部使用寄存器(無論是明確還是隱含地),既不出現(xiàn)在輸入操作數(shù)列表中,也不出現(xiàn)在輸出操作數(shù)列表中,必須將它列為修飾寄存器。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

午夜在线观看视频18| 亚洲一区二区三区美女| 亚洲国产日韩欧美在线观看| 日韩欧美国产成人一区二区| 九九九九精品| 四虎精品一区二区免费| 午夜在线观看一区| 免费看的国产视频网站| 日韩一区二区三区在线看| 夜夜春成人影院| 中文字幕视频在线播放| 91黄色小网站| 亚洲国产综合自拍| 日韩久久久久久久久久久久久| 国产麻豆精品一区| 91av视频在线| japanese色国产在线看视频| 日韩在线观看视频一区二区三区| jizzjizzjizzjizz| 亚洲调教视频在线观看| 亚洲成人一品| 日韩精品一区二区三区色欲av| 亚洲国产综合色| 日韩欧美亚洲视频| 中国一级片在线观看| 91精品一区国产高清在线gif| 五月综合久久| 7777精品伊人久久久大香线蕉经典版下载| 日本三级理论片| 亚洲精品成人久久久| 亚洲一区二区三区久久久| 亚洲综合区在线| 欧洲日本亚洲国产区| 久久一日本道色综合久久| 精品国产一区二区三区久久久| 日韩国产精品一区二区三区| 亚洲女人久久久| 男人在线资源站| heyzo一本久久综合| 欧美日韩免费精品| 国产精品高潮呻吟久久| 日本一区二区三区视频在线播放| 日韩欧美一区二区三区免费观看| 97在线免费公开视频| 国产成人短视频在线观看| 国产精品久久久久久久无码| 日本黄色三级大片| 欧美精产国品一二三区| 久久免费精品一区二区| 欧美亚洲成人xxx| 亚洲国产精品18久久久久久| 天堂在线观看一卡二卡三卡四卡| 日本在线视频一区二区| 日韩在线视频观看正片免费网站| 国产日本欧美在线| 亚洲成人第一区| 欧美xxxx吸乳| 日韩超碰人人爽人人做人人添| а√天堂8资源中文在线| 日韩欧美国产综合| 日韩精品一区二区三区swag| 国产麻豆xxxvideo实拍| 女人被狂躁到高潮的免费| 欧美优质美女网站| 国产又色又爽又黄又免费| 日韩电影在线观看完整免费观看| 偷拍自拍在线| 中文字幕视频一区二区三区久| 天天综合五月天| 欧美另类z0zxhd电影| 免费在线观看黄视频| 福利片在线看| 欧美黑人xx片| 日韩免费高清在线| 精品国产一区二区三区久久久狼| 亚洲欧美成人综合| 99一区二区| 91亚洲成人| 97碰在线观看| 偷拍一区二区三区| 激情深爱综合网| 小荡货+程雪柔| 日韩av在线播放观看| 成人精品国产亚洲| 亚洲日本香蕉视频| 免费黄色av网站| 国产美女网站视频| 91色视频在线导航| 四虎影院免费在线| 国产激情视频一区| 99久久夜色精品国产亚洲狼| 不卡视频一二三四| 实拍女处破www免费看| 日韩精品综合在线| 欧美激情一区二区三区在线视频| 免费成人看片网址| 亚洲激情偷拍| 91久久国产综合久久| 国产福利免费在线观看| 精品丰满人妻无套内射| 香蕉久久国产av一区二区| 日韩av在线一区二区| 麻豆精品久久| 中文字幕在线亚洲| 国产色婷婷国产综合在线理论片a| 欧美日韩午夜视频在线观看| 亚洲免费精品视频| 成人午夜在线观看视频| 欧美精品videos极品| 国产精品久久久久久一区二区三区| 成人精品一区二区三区| 亚洲黄色在线播放| 亚洲一区二区网站| 十八禁视频网站在线观看| 国产xxx在线| 在线免费av播放| 国产高清无密码一区二区三区| 国产日产精品一区二区三区四区的观看方式| 国内国产精品天干天干| 91视频在线视频| 91看片在线免费观看| 波多野结衣一区二区| 91视频综合| 伊人久久在线| 最新69国产成人精品视频免费| 成人一区二区三区在线观看| 久久久久久久片| 国产精品美女久久久免费| 日韩欧美在线网址| 午夜剧场免费在线观看| 亚洲欧洲精品一区二区| 亚洲成av人片在线观看无| 伊人久久综合| 亚洲人被黑人高潮完整版| 欧美片网站免费| 久久久蜜桃一区二区| av资源种子在线观看| 天堂网.www在线资源| 色视频免费在线观看| 51亚洲精品| 色的视频在线免费看| 亚洲人成网站在线在线观看| 激情六月丁香婷婷| 欧美日韩国产免费观看视频| 久久久久久五月天久久久久久久久| 波多野结衣视频播放| 欧洲美女亚洲激情| 亚洲成年人电影网站| 亚洲欧美一区二区三区在线播放| 自拍偷拍视频在线| 亚洲资源网你懂的| 西西444www无码大胆| 日韩激情小视频| 亚洲综合在线网站| 99久久亚洲国产日韩美女| 欧美在线关看| 蜜臀av免费观看| 视色视频在线观看| 亚洲福利在线观看视频| 亚洲欧美偷拍自拍| 亚洲综合中文字幕68页| 国产成人综合网站| 综合久久久久| 日韩a级片在线观看| 日韩精品导航| 中文字幕一区二区人妻在线不卡| 污污网址在线观看| 国产精品日韩专区| 久久亚洲精选| 波多野结衣一区二区| 亚洲国产aⅴ精品一区二区| 精品欠久久久中文字幕加勒比| 在线亚洲伦理| 欧美日韩大片在线观看| 91精品国产欧美日韩| 九九九热视频| 国产精品一区二区视频| 99久久99久久综合| 日韩在线观看不卡| 激情综合闲人网| 97精品一区| 亚洲www在线观看| 大桥未久av一区二区三区中文| 青青草成人免费视频| 亚洲最大福利视频网站| 国产精品三级在线观看无码| 国内精品久久久久久影视8| 久久精品99国产精| 中文文字幕文字幕高清| 国产欧美高清| 99国产精品久久久久老师| 日本在线不卡一区二区| 欧美日韩在线电影| 丰满人妻一区二区三区53视频| 亚洲男人天堂av在线| 夜夜爽99久久国产综合精品女不卡| 在线视频自拍| 欧洲一级视频| 日本一级淫片演员| 国产精品亚洲一区二区三区在线观看| 小舞被吸乳羞羞网站视频| 日本怡春院一区二区| 日本国产一级片| 亚洲第一页自拍| 亚洲男人第一天堂| 91麻豆精品国产91久久久平台| 九九热精品在线观看| 色狠狠久久aa北条麻妃| 精品国产乱码久久久久久久软件| 日韩中文在线不卡| 意大利激情丛林无删减版dvd| 亚洲一区二区三区四区中文| 欧洲中文字幕精品| 有色激情视频免费在线| 999热精品视频| 亚洲精品乱码久久久久久久| jvid一区二区三区| 精品无码国产一区二区三区av| 一区二区三区欧美在线观看| 久久视频www| 宅男深夜国产| 欧美精品一区二区蜜臀亚洲| 麻豆91小视频| 国产伊人精品| 精品久久久久久| 黄色成人在线网| 国产无遮挡裸体免费久久| 国产欧美精品xxxx另类| 北条麻妃在线一区| 97在线播放免费观看| 你微笑时很美电视剧整集高清不卡| 国产一区二区三区在线看麻豆| 久久久久久久久久久久久国产精品| 亚洲免费黄色录像| 亚洲免费在线观看| 操人视频在线播放| 国产一二三区在线观看| 亚洲伦理一区二区三区| 久久艹这里只有精品| 黄页网站大全在线观看| 男人c女人视频| 国产欧美一区二区在线观看| 亚洲欧美一区二区三区四区五区| 国产视频精品久久| 99国产成+人+综合+亚洲欧美| 亚洲国产91精品在线观看| 欧美在线a视频| 国产av第一区| 国产不卡一区二区三区在线观看| 欧美成人一区二区三区高清| 亚洲日本成人网| 亚洲第一精品电影| 写真福利理论片在线播放| 国产日韩精品一区二区| 久久9999免费视频| 国产精品一区二区视频| 97碰碰碰免费公开在线视频| 精品国产一二三四区| 999热视频| 91九色鹿精品国产综合久久香蕉| www.日本在线视频| 日韩三级视频在线播放| 中文字幕 自拍偷拍| 一区二区视频在线免费| 男女啪啪在线观看| 一区二区高清不卡| aaa欧美日韩| 黄色片网站在线观看| 久久成人精品电影| 日韩欧美国产片| 亚洲精品国产精品乱码不99按摩| 日韩av首页| 精品国产凹凸成av人网站| 精品亚洲精品福利线在观看| 久久精品一区二区| 亚洲在线视频福利| 国产精品一二一区| 国产99久久久国产精品潘金网站| 一区二区三区午夜视频| 欧美午夜性囗交xxxx| 精品免费视频| 欧美日韩国产123区| 已婚少妇美妙人妻系列| 免费高清一区二区三区| 久久精品日产第一区二区三区精品版| 欧美尺度大的性做爰视频| 99综合电影在线视频| www污在线观看| 每日更新成人在线视频| 91九色在线播放| 日韩在线视频不卡| 国产成人精品视频ⅴa片软件竹菊| 国产欧美一区二区三区久久人妖| 亚洲免费av网| 在线观看h网址| 久久久av网站| 亚洲热av色在线播放| 亚洲人做受高潮| 91精品国产综合久久香蕉最新版| 777免费视频| 在线精品一区二区三区| 欧美日韩中文字幕在线播放| 在线小视频你懂的| 中文字幕免费观看一区| 51精品国产黑色丝袜高跟鞋| 国产强被迫伦姧在线观看无码| 伊人精品视频| a天堂中文在线官网在线| av无码精品一区二区三区宅噜噜| 国产一区二区导航在线播放| 一区二区三区在线观看免费视频| 亚洲色图一区二区三区| 欧美一级二级三级蜜桃| 国产精品久久久久久人| 中文字幕在线观看视频免费| 一区二区三区精品视频在线观看| 国产麻豆精品95视频| 美女被黑人爆操网站| 玖玖玖国产精品| 午夜dj在线观看高清视频完整版| yiren22亚洲综合| 久久精品国产av一区二区三区| 国产精品av一区二区三区| www.五月婷婷.com| 亚洲色图第一区| 亚洲色图美腿丝袜| 亚洲国产精品嫩草影院| 91精品国产色综合久久不卡蜜臀|