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

首頁 > 學院 > 操作系統 > 正文

3.2 GUN as匯編(本文內容大部分引用原文,非原創)

2024-06-28 13:28:25
字體:
來源:轉載
供稿:網友
3.2 GUN as匯編(本文內容大部分引用原文,非原創)

  as86匯編僅僅用于編譯內核中的boot/bootsect.s引導扇區程序和實模式下的設置程序boot/setup.s。內核中其余所有匯編語言程序(包括C語言產生的匯編程序)均使用gas來編譯,并與C語言程序編譯產生的模塊鏈接。

3.2.2 GUN匯編語法與INTEL匯編語法的主要區別:

  *AT&T語法(即GUN匯編語法)中立即操作數前面要加一個字符'$';寄存器操作數前面要加字符百分號'%';絕對跳轉/調用(相對于與程序計數器有關的跳轉/調用)操作數前面要加星號'*'。而intel匯編語法沒有這些限制。

  *AT&T語法與intel語法使用的源和目的操作數次序正好相反。例如:AT&T語句 “addl $4, %eax” 是將4和eax寄存器中的值相加,結果保存在eax寄存器中,而在intel中表示為"add eax, 4"。

  *AT&T中內存操作數的長度(寬度)由操作碼最后一個字符來確定。'b','w','l'分別表示內存引用寬度為8位字節(byte)、16位字(Word)和32位雙字(long)。intel匯編通過在操作數前面加前綴"byte ptr","word ptr"和"dword ptr"來達到同樣的目的。因此intel語句"mov al, byte ptr foo"對應于AT&T的語句"movb $foo, %al"。

  *AT&T語法中立即形式的遠跳轉和遠調用為"ljmp/lcall $section, $offset",而intel的是"jmp/call far section, offset"。同樣,AT&T中遠返回指令"lret $stack-adjust"對應于intel的"ret far stack-adjust"。

  *AT&T匯編不提供對多代碼段程序的支持,UNIX類操作系統要求所有代碼在一個段中。

GUN as匯編程序預處理

  as匯編器內置對匯編語言程序的預處理功能。該預處理功能會調整并刪除多余的空格字符和制表符;刪除所有注釋語句并使用單個的空格或一些換行符替換他們;轉換字符常數為對應的數值。但是該功能不會對宏定義進行處理,也沒有處理包含文件的功能。如果需要這方面的功能,可以讓匯編語言程序使用大寫的后綴'S'讓as使用gcc的CPP預處理功能。

  由于as匯編語言程序除了使用C語言注釋語句(/*和*/)以外,還是用井號"#"作為單行注釋的開始字符,因此如果在匯編之前不對程序進行預處理,那么程序中包含的所有以井號"#"開始的指示符或者命令都會被當做注釋部分。

符號、語句和常數

  符號(Symbol)是由字符組成的標識符,組成符號的有效字符取自于大小寫字符集、數字和三個字符"_.$",不允許以數字開頭,而且大小寫含義不同。長度沒有限制。

  語句(Statment)以換行符或者行分隔符(";")作為結束。文件最后的語句必須以換行符作為結束。若在一行的最后使用反斜杠"/"(在換行符前),就可以讓一條語句使用多行。當as讀到反斜杠加換行符時,就會忽略掉這兩個字符。

  語句由零個或多個標號(Label)開始,后面可以跟隨一個確定語句類型的關鍵符號。標號由符號后面跟隨一個冒號(":")構成。關鍵符號確定了語句余下部分的語義,如果關鍵符號以一個"."開始,那么當前語句就是一個匯編命令(或者稱為偽指令、指示符)。如果關鍵符號以一個字母開始,那么當前語句就是一條匯編語言指令語句。因此一條語句的通用格式為:

  標號:匯編命令  注釋部分(可選)

或者

  標號:指令助記符 操作數1,操作數2 注釋部分(可選)

  常數是一個數字,可以分為字符常數和數字常數兩類。字符常數還可以分為字符串和單個字符,數字常數可以分為整數、大數和浮點數。

字符串必須用雙引號括住,并且用反斜杠"/"來轉移包含的特殊字符。單個字符常數可以寫成在該字符前加一個單引號,如"'A"表示值65、"'C"表示67。

整數數字有4中表示方法,即使用"0b"或"0B"開始的二進制數;以"0"開始的八進制數;以非0數字開始的十進制數和使用"0x"或"0X"開始的十六進制數。負數直接在前面加"-"。

大數(Bignum)是位數超過32位的二進制的數,其表示方法與整數相同。

匯編對浮點數的表示方法和C語言基本一樣。

3.2.3 指令語句、操作數和尋址

  指令(Instructions)是CPU執行的操作,通常指令也稱作操作碼(Opcode);

  操作數(Operand)是指令操作的對象;

  地址(Address)是指定數據在內存中的位置。

指令語句是程序運行時刻執行的一條語句,它通常包含4個部分:標號、操作碼、操作數和注釋。

一條指令語句可以含有0個或最多3個用逗號分開的操作數。對于具有兩個操作數的指令語句,第一個是源操作數,第二個是目的操作數,指令結果保存在第二個操作數中。

操作數可以是立即數(即值是常數值的表達式),寄存器(值在CPU的寄存器中)或內存(值在內存中)。

AT&T語法通過在操作數前加一個"*"字符來指定一個間接操作數,只有調轉/調用指令才能使用間接操作數。

  立即操作數前面要加一個"$"字符前綴。

  寄存器名前面要加一個"%"字符前綴。

  內存操作數由變量名或者含有變量地址的一個寄存器指定。

指令操作碼的命名

  AT&T語法中指令操作碼的名稱(即指令助記符)由最后一個字符來指明操作數的寬度。'b','w','l'分別指定byte,word,long類型的操作數。如果指令名稱中沒有帶這樣的字符后綴,并且操作數中不含內存操作數,as編譯器就會根據目的寄存器操作數來嘗試確定操作數寬度。例如,"mov %ax, %bx"等同于"movw %ax, %bx"。

  AT&T與Intel語法中幾乎所有操作碼的名稱都相同,但有幾個例外。符號擴展和零擴展指令都需要2個寬度來指明,即要為源操作數和目的操作數同時指明寬度,通過使用兩個操作碼后綴來做到。AT&T語法中符號擴展和零擴展的基本操作碼名稱分別是"movs..."和"movz...",Intel中分別是"movsx"和"movzx"。例如,”使用符號擴展從%al移動到%edx“的AT&T語句是"movsbl %al, %edx",即從byte到long是bl。

  AT&T語法與Intel語法中轉換指令的對應關系:

AT&T--------------Intel--------------說明

cbtw        cbw      把%al中的字節值符號擴展到%ax中

cwtl        cwde      把%ax符號擴展到%eax中

cwtd        cwd      把%ax符號擴展到%dx:%ax中

cltd        cdq       把%eax符號擴展到%edx:%eax中

指令操作碼前綴

操作碼前綴用戶修飾隨后的操作碼。他們用于重復字符串指令、提供區覆蓋、執行總線鎖定操作、或指定操作數和地址寬度。通常操作碼前綴可以作為一條沒有操作數的指令獨占一行并且直接位于所影響指令之前,最好與它修飾的指令在同一行上。例如串掃描指令"scas"使用前綴執行重復操作:repne scas %es:(%edi), %al。

  操作碼前綴列舉:

cs,ds,ss,es,fs,gs  ---  區覆蓋操作碼前綴,通過制定使用區:內存操作數,內存引用形式會自動添加這種前綴

data16,addr16   ---  操作數/地址寬度前綴。這兩個前綴會把32位操作數/地址改變成16位的操作數/地址。但是,as并不支持16位尋址方式。

lock         ---  總線鎖存前綴。用于在指令執行期間禁止中斷(僅對某些指令有效,參見80x86手冊)

wait         ---  協處理器指令前綴。等待協處理器完成當前指令的執行。對于80386/80387組合用不著這個前綴。

rep,repe,repne   ---  串指令操作前綴,使串指令重復執行%ecx中指定的次數。

內存引用

Intel語法的簡介內存引用形式:section:[base + index * scale + disp]

AT&T語法形式:section:disp(base, index, scale)

另外,與指令計數器PC無關的間接調用和跳轉的操作數必須有一個"*"前綴字符。若沒有這個前綴"*",as匯編器就會選擇與指令計數器PC先關的跳轉/調用標號。其他任何具有內存操作數的指令都必須使用操作碼后綴('b','w','l')指明操作數的大小。

3.2.4 區與重定位

  區(Section)也稱為段、節或部分,用于表示一個地址范圍,操作系統會一相同的方式對待和處理在該地址范圍中的數據信息。區的概念主要是用來表示編譯器生成的目標文件中不同的信息區域,例如正文區或數據區。

  鏈接器ld會把輸入的目標文件中的內容按照一定的規律組合生成一個可執行程序。當as匯編器輸出一個目標文件時,該目標文件中的代碼被默認設置成從地址0開始。此后ld會在鏈接過程中為不同目標文件中的各個部分分配不同的最終地址位置。ld會把程序中的字節塊移動到程序運行時的地址處。這些塊是做為固定單元進行移動的,他們的長度和字節次序都不會被改變。這樣的固定單元就被稱為區。而為區分配運行時刻地址的操作就被稱為重定向(Relocation)操作,其中包括調整目標文件中記錄的地址,從而讓他們對應于恰當的運行時刻地址上。

  as匯編器輸出的目標文件中至少具有3個區,分別被稱為正文(text)、數據(data)和bss區。如果沒有使用匯編命令把輸出放置在".text"或".data"區中,這些區會仍然存在,但是為空。在一個目標文件中,其text區從地址0開始,隨后是data區,再后是bss區。

  當一個區被重定位時,為了讓鏈接器ld知道哪些數據會發生變化以及如何修改這些數據,as匯編器也會往目標文件中寫入所需要的重定位信息。為了執行重定位操作,在每次涉及目標文件中的一個地址時,ld必須知道:

  1.目標文件中對一個地址的引用是從什么地方開始算起的?

  2.該引用的字節長度是多少?

  3.該地址引用的是哪個區?(地址) - (區的開始地址)的值等于多少?

  4.對地址的引用與程序計數器相關嗎?

  實際上,as使用的所有地址都可以表示為:(區) + (區中偏移)。另外,as計算的大多數表達式都有這種與區相關的特性。在下面的說明中,我們使用記號"{secname N}"來表示區secname中的偏移N。

  除了text,data,bss區,還需要了解絕對地址區(absolute區)。在鏈接器鏈接過程中,絕對地址區中的地址始終不變,所以目標文件中的absolute區可能會因為重疊而產生覆蓋。

  “未定義的區”(Undefined section)。在匯編是所有不能確定所在區的地址都被設置為{undfined U},其中U將會在以后填上。

  鏈接器會把所有目標文件中的text區放在相鄰的地址處,data和bss區也同樣如此。

鏈接器涉及的區

鏈接器ld只涉及如下四個區:

1.text區、data區----這兩個區用于保存程序。as和ld會分別獨立而平等的對待他們。然而當程序運行的時候text區的內容是不會改變的。text區通常會被進程共享,其中含有指令代碼和常數等內容,程序運行時data區的內容是變化的,C變量一般就存放在data區。

2.bss區------在程序開始運行時,這個區含有0值字節。該區用于存放未初始化的變量或作為公共變量存儲空間。雖然程序每個目標文件bss區的長度信息很重要,但是由于該區中存放的是0值字節,因此無需在目標文件中保存bss區。設置bss的目的就是為了從目標文件中明確的排除0值字節。

3.absolute區------絕對地址區可以稱作“不可重定位”區,在重定位操作期間他們不會改變。

4.undefined區-----對于不在先前所述各個區中對象的地址引用都屬于本區。

子區

  匯編取得的字節數據通常位于text或data區中。有時候在匯編源程序某個區中可能分布著一些不相鄰的數據組,但是你可能會想讓他們在匯編后聚集在一起存放。as匯編器允許利用子區(subsection)來達到這個目的。在每個區中,可以有編號為0~8192的子區存在。編址在同一個區中的對象會在目標文件中與其他對象放在一起。例如,編譯器可能想把常數存放在text區中,但是不想讓這些常數散布在被匯編的整個程序中。在這種情況下,編譯器就可以在每個會輸出的代碼區之前用“.text 0”子區,在每組會輸出的常數之前使用“.text 1”子區。

  使用子區是可選的,如果沒有使用子區,那么所有對象都會存放在子區0中。子區會以按編號由小到大的順序出現在目標程序中,但是目標文件不包含表示子區的任何信息。處理目標文件的鏈接程序ld并不會看到子區的蹤跡,他們只會看到由所有的text子區組成的text區;有所有data區組成的data區。

  每個區都有一個位置計數器(Location Counter),它會對沒個匯編進該區的字節進行計數,由于子區僅供as匯編器使用方便而設置,因此并不存在子區計數器。雖然沒有什么直接操作一個位置計數器的方法,但是匯編命令".align"可以改變其值,并且任何標號定義都會取用位置計數器的當前值。正在執行語句匯編處理的區的位置計數器被稱為當前活動計數器。

bss區

bss區用于存儲局部公共變量??梢栽赽ss區中分配空間,但是在程序運行之前不能在其中放置數據。因為在程序剛開始執行時,bss區中的所有字節內容都將被清零。".lcomm"匯編命令用于在bss區中定義一個符號;".comm"可用于在bss區中聲明一個公共符號。

3.2.5 符號

  在程序編譯和鏈接的過程中,符號(Symbol)是一個比較重要的概念。程序員使用符號來命名對象,鏈接器使用符號進行鏈接操作,而調試器利用符號進行調試。

標號(Label)是后面緊隨一個冒號的符號。此時符號代表活動位置計數器的當前值,并且可以做為指令的操作數使用??梢允褂玫忍?="給一個符號賦予任意數值。

符號名以一個字母或"._"字符之一開始。局部符號用于協助編譯器和程序員臨時使用名稱。在一個程序中共有10個局部符號名("0"..."9")可供重復使用。為了定義一個局部符號,需要寫出形如"N:"的標號(N代表任意數字)。若是引用前面最近定義的這個符號,需要寫成"Nb";若是引用下一個定義局部符號,則需要寫成"Nf"(b-backwards,f-forwards)。局部標號在使用方面沒有限制,但是在任何時候只能向前/向后引用最遠10個局部標號。

特殊點符號

特殊點符號"."表示as匯編的當前地址。因此表達式"mylab: .long ."就會把mylab定義為包含它自己所處的地址值。給"."賦值就如同匯編命令".org"的作用。因此表達式". = . + 4"與".space 4"完全相同。

符號屬性

除了名字以外,每個符號都有“值”和“類型”屬性。根據輸出的格式不同,符號也可以具有輔助屬性。如果不定義就使用一個符號,as會假設其所有屬性均為0。這就表示該符號是一個外部定義的符號。

符號的值通常是32位的。對于標出text、data、bss或absolute區中的一個位置符號,其值是從區開始處到標號的地址值。對于text、data和bss區,一個符號的值通常會在鏈接過程中由于ld改變區的基地址而變化,absolute區中的符號的值不會改變。

ld會對未定義的符號的值進行特殊處理。如果未定義的符號的值為0,則表示該符號在匯編源程序中沒有定義,ld會嘗試根據其他鏈接的文件來確定它的值。在程序中使用了一個符號但沒有對符號進行定義,就會產生這樣的符號。如果未定義的符號的值不為0,那么該符號就表示是.comm公共聲明的需要保留的公共存儲空間字節長度。符號指向該存儲空間的第一個地址處。

符號的類型屬性含有用于鏈接器和調試器的重要定位信息、指示符號是外部的標志以及一些其他可選信息。

3.2.6 as匯編命令

匯編命令是指示匯編器操作方式的偽指令。匯編命令用于要求匯編器為變量分配空間、確定程序開始地址、指定當前匯編的區、修改位置計數器的值等。所有匯編命令的名稱都以"."開始,其余是字符,并且大小寫無關。但是通常都使用小寫字符。

1. .align abs-exPR1,abs-expr2,abs-expr3

  .align是存儲器對齊匯編命令,用于在當前子區中把位置計數器的值設置(增加)到下一個指定的存儲邊界處。第一個絕對值表達式abs-expr1指定要求的邊界對齊值。對于使用a.out格式目標文件的80x86系統,該表達式的值是位置計數器值增加后其二進制值最右邊0值位的個數,即是2的次方值。例如,".align 3"就表示把位置計數器的值增加到8的倍數上。如果位置計數器的值本身就是8的倍數,則無需改變。但是對于使用ELF格式的80x86系統,該表達式的值直接就是要求對齊的字節數。例如,".align 8"就是把位置計數器增加到8的倍數上。

  第二個表達式給出用于對齊而填充的字節值。該表達式可以省略,若省略,填充的字節值是0。第三個可選表達式abs-expr3用于指示對齊操作允許跳過的最大字節數。如果對齊操作要求跳過的字節數大于這個最大值,那么該對齊操作就被取消。

2. .ascii "string"...

  該命令從位置計數器所指當前位置為字符串分配空間并存儲字符串。可使用逗號分開寫出多個字符串。例如,.ascii "Hellow world!","My assembler"。該匯編命令會把這些字符串匯編在連續的地址位置處,每個字符串后面不會自動添加0(NULL)字節。

3. .asciz "string"...

  該匯編命令與“.ascii”類似,但是每個字符串后面會自動添加NULL字符。

4. .byte expressions

  該匯編命令定義0個或多個用逗號分開的字節值。每個表達式的值是一個字節。

5. .comm symbol, length

  該命令在bss區中聲明一個命名的公共區域。在ld鏈接過程中,某個目標文件中的一個公共符號會與其他目標文件中同名的公共符號合并。如果ld沒有找到一個符號的定義,而只是一個或多個公共符號,那么ld就會分配指定長度length字節的未初始化內存。length必須是一個絕對值表達式,如果ld找到多個長度不同但同名的公共符號,ld就會分配長度最大的空間。

6. .data subsection

  該匯編命令通知as把隨后的語句匯編到編號為subsection的data子區中。如果省略編號,則默認使用編號0。編號必須是絕對值表達式。

7. .desc symbol, abs-expr

  該命令用表達式的值設置符號symbol的描述符字段n-desc的16位值。它僅用于a.out格式的目標文件。參見有關include/a.out.h文件的說明。

8. .fill repeat, size, value

  該匯編命令會產生數個(repeat個)大小為size字節的重復拷貝。大小值size可以為0或某個值,但是若size大于8,則限定為8。每個重復字節內容取自一個8字節數。高4字節為0,低4字節是數值value。這3個參數值都是絕對值,size和value是可選的。如果第2個逗號和value省略,value默認為0值;如果后兩個參數都省略的話,則size默認為1.

9. .global symbol(或者 .globl symbol)

  該匯編命令會使得鏈接器ld能看見符號symbol。如果我們在目標文件中定義了符號symbol,那么它的值將能被鏈接過程中的其他目標文件使用。若目標文件中沒有定義該符號,那么它的屬性將從鏈接過程中的其他目標文件的同名符號中獲得。這是通過設置符號symbol類型字段中的外部位N_EXT來做到的。

10. .int expressions

  該命令在某個區中設置0個或多個整數值(80386系統為4個字節,同.long)。每個用逗號分開的表達式的值就是運行時刻的值,例如 .int 1234,567,0x89AB。

11. .lcomm symbol, length

  該命令為符號symbol指定的局部公共區域保留長度為length字節的空間。所在的區和符號symbol的值是新的局部公共塊的值。分配的地址在bss區中,因此在運行時刻這些字節值被清零。由于符號symbol沒有被聲明為全局的,因此鏈接器ld看不見。

12. .long expressions

  該命令含義與 .int 相同。

13. .octa bignums

  這個匯編命令指定0個或多個用逗號分開的16字節大數(.byte, .word, long, .quad, .octa 分別對應1、2、3、8、16字節數)。

14. .org new_lc, fill

  這個匯編命令會把當前區的位置計數器設置為值new_lc。new_lc是一個絕對值(表達式),或者是具有相同區作為子區的表達式,也就是說不能使用.org跨越各區。如果new_lc的區不對,那么.org就不會起作用。注意:位置計數器都是基于區的,即以每個區作為計數起點。當位置計數器的值增長時,所跳躍的字節將被填入值fill。該值必須是絕對值。如果省略了逗號和fill,則fill默認為0值。

15. .quad bignums

  這個匯編命令指定0個或多個用逗號分開的8字節大數bignum。如果大數放不進8個字節中,則取低8字節。

16. .short expressions(同 .word expressions)

  這個匯編命令指定某個區中0個或多個用逗號分開的2字節數。對于每個表達式,在運行時刻都會產生一個16位的值。

17. .space size,fill

  該命令產生size個字節,每個字節都填值fill。這個參數均為絕對值。如果省略了逗號和fill,那么fill的默認值就是0。

18. .string "string"

  該命令定義一個或多個用逗號分開的字符串。在字符串中科院使用轉義字符。每個字符串都自動附加一個NULL字符結尾。例如 .string "/n/nStaring", "other strings"。

19. .text subsection

  該命令通知as把隨后的語句匯編進編號為subsection的子區中。如果省略了subsection,則默認使用編號值0。

20. .word expressions

  對于32位機器,這個匯編命令與.short相同。

3.2.7 編寫16位代碼

  雖然as通常用來編寫純32位的80x86代碼,但是1995年后它對編寫運行于實模式或16位保護模式的代碼也提供有限的支持。為了讓as匯編是產生16位代碼,需要在運行于16位模式的指令語句之前添加匯編命令".code16",并且使用匯編命令".code32"讓as匯編器切換回32位代碼匯編方式。

  as不區分16位和32位匯編語句,在16位和32位模式下每條指令的功能完全一樣而與模式無關。as總是為匯編語句產生32位的代碼而不管指令將運行在16位還是32位模式下。如果使用匯編命令".code16"讓as處于16位模式下,那么as會自動為所有指令加上一個必要的操作數寬度前綴而讓指令運行在16位模式。請注意:由于as為所有指令添加了額外的地址和操作數寬度前綴,所以匯編代碼長度和性能上將會受到影響。

  由于1991年開發linux內核0.11時as匯編器還不支持16位代碼,因此在編寫和匯編0.11內核實模式下的引導啟動代碼和初始化匯編程序時使用as86匯編器。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产九九精品视频| 色婷婷综合成人| 91中文在线视频| 久久久久久久亚洲精品| 国产精品爽爽爽爽爽爽在线观看| 日韩av在线网站| 国产69精品久久久| 国产精品美女免费视频| 91精品国产亚洲| 亚洲va男人天堂| 亚洲精品久久久久久久久久久久久| 国产成人精品日本亚洲| 国产精品久久久久久久app| 精品一区二区三区四区在线| 国产成人自拍视频在线观看| 欧美一级大胆视频| 精品欧美一区二区三区| 午夜精品美女自拍福到在线| 免费99精品国产自在在线| 欧美激情中文字幕乱码免费| 亚洲视频在线观看网站| 亚洲a在线观看| 亚洲字幕在线观看| 国产精品一区二区3区| 最近2019免费中文字幕视频三| 欧美综合国产精品久久丁香| 97视频色精品| 亚洲大胆人体视频| 日韩一区av在线| 色综合导航网站| 亚洲最大福利视频网站| 欧美猛交免费看| 久久夜精品香蕉| 国产精品夜色7777狼人| 欧美性xxxxx| 亚洲第一精品久久忘忧草社区| 欧美性xxxx极品高清hd直播| 久久中国妇女中文字幕| 中文字幕亚洲欧美在线| 欧美丝袜一区二区| 亚洲另类激情图| 欧美高清视频免费观看| 国产成人一区二| 久久久之久亚州精品露出| 欧美日韩视频在线| 欧美激情在线有限公司| 欧美激情a∨在线视频播放| 欧美疯狂性受xxxxx另类| 国产精品一区二区久久久| 欧美精品激情视频| 97久久精品视频| 欧美日韩中文字幕综合视频| 亚洲男子天堂网| 日韩av片永久免费网站| 在线播放国产精品| 日韩在线欧美在线| 欧美激情一级欧美精品| 91chinesevideo永久地址| 欧美精品一区三区| 午夜精品福利在线观看| 久久久国产91| 亚洲第一区第二区| 欧美有码在线观看视频| 91精品视频免费看| 久久不射电影网| 亚洲黄色av网站| 欧美一级在线播放| 日韩成人xxxx| 日韩人体视频一二区| 欧美日韩亚洲网| 国产自产女人91一区在线观看| 国产午夜精品全部视频在线播放| 亚洲免费高清视频| 国产精品成人aaaaa网站| 日本欧美在线视频| 国产精品最新在线观看| 亚洲欧美日韩精品| 欧美夜福利tv在线| 丁香五六月婷婷久久激情| 亚洲欧美福利视频| 亚洲黄页网在线观看| 另类图片亚洲另类| 久久精品视频在线观看| 国产日韩欧美一二三区| 91精品国产91久久久久久最新| 精品国产网站地址| 久久人人爽国产| 欧美亚洲成人精品| 日韩电影在线观看免费| 51久久精品夜色国产麻豆| 国产精品久久久精品| 亚洲精品视频网上网址在线观看| 日本成熟性欧美| 欧美激情二区三区| 国色天香2019中文字幕在线观看| 亚洲成色777777女色窝| 国产91色在线| 亚洲精品一区二区在线| 国产精品美女久久久免费| 欧美日韩中文在线| 日韩免费av一区二区| 久久综合久久八八| 91国自产精品中文字幕亚洲| 一区二区成人精品| 亚洲一区二区福利| 91国语精品自产拍在线观看性色| 懂色av中文一区二区三区天美| 亚洲美女喷白浆| 国产精品亚洲欧美导航| 5566成人精品视频免费| 美女扒开尿口让男人操亚洲视频网站| 欧美精品在线免费| 国产精品午夜视频| 久久精品2019中文字幕| 日韩专区中文字幕| 国产成人+综合亚洲+天堂| 日韩视频免费看| 日韩高清电影好看的电视剧电影| 亚洲成人av资源网| 亚洲韩国欧洲国产日产av| 亚洲成人网久久久| 亚洲高清久久久久久| 久久久久久成人精品| 性欧美激情精品| 欧美一区三区三区高中清蜜桃| 亚洲欧美综合v| 91九色单男在线观看| 麻豆国产va免费精品高清在线| 操人视频在线观看欧美| 国精产品一区一区三区有限在线| 国内精品模特av私拍在线观看| 尤物精品国产第一福利三区| 欧美激情第99页| 这里只有精品在线观看| 精品高清美女精品国产区| 日韩精品在线私人| 成人免费网站在线观看| 久久精品成人一区二区三区| 久久精品成人动漫| 久久视频精品在线| 久久精品美女视频网站| 91高清视频免费| 超碰精品一区二区三区乱码| 欧美性jizz18性欧美| 精品国偷自产在线视频| 欧美高跟鞋交xxxxhd| 亚洲第一免费网站| 亚洲护士老师的毛茸茸最新章节| 亚洲欧美成人在线| 中文字幕亚洲色图| 精品日本高清在线播放| 日韩欧美一区二区在线| 日av在线播放中文不卡| 亚洲精品99999| 国产精品视频午夜| 亚洲精品ady| 国产视频在线观看一区二区| 中文字幕最新精品| 午夜精品一区二区三区在线| 中文字幕欧美视频在线| 日韩欧美一区二区在线| 亚洲一区制服诱惑| 久久精视频免费在线久久完整在线看| 欧美极品第一页|