《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 簡明x86匯編語言教程(四)

簡明x86匯編語言教程(四)

2017-06-10
關鍵詞: 匯編

第三章 操作內存

在前面的章節中,我們已經了解了寄存器的基本使用方法。而正如結尾提到的那樣,僅僅使用寄存器做一點運算是沒有什么太大意義的,畢竟它們不能保存太多的數據,因此,對編程人員而言,他肯定迫切地希望訪問內存,以保存更多的數據。

我將分別介紹如何在保護模式和實模式操作內存,然而在此之前,我們先熟悉一下這兩種模式中內存的結構。

3.1 實模式

事實上,在實模式中,內存比保護模式中的結構更令人困惑。內存被分割成段,并且,操作內存時,需要指定段和偏移量。不過,理解這些概念是非常容易的事情。請看下面的圖:


段-寄存器這種格局是早期硬件電路限制留下的一個傷疤。地址總線在當時有20-bit。

然而20-bit的地址不能放到16-bit的寄存器里,這意味著有4-bit必須放到別的地方。因此,為了訪問所有的內存,必須使用兩個16-bit寄存器。

這一設計上的折衷方案導致了今天的段-偏移量格局。最初的設計中,其中一個寄存器只有4-bit有效,然而為了簡化程序,兩個寄存器都是16-bit有效,并在執行時求出加權和來標識20-bit地址。

偏移量是16-bit的,因此,一個段是64KB。下面的圖可以幫助你理解20-bit地址是如何形成的:


段-偏移量標識的地址通常記做 段:偏移量 的形式。

由于這樣的結構,一個內存有多個對應的地址。例如,0000:0010和0001:0000指的是同一內存地址。又如,

0000:1234 = 0123:0004 = 0120:0034 = 0100:0234
0001:1234 = 0124:0004 = 0120:0044 = 0100:0244

作為負面影響之一,在段上加1相當于在偏移量上加16,而不是一個“全新”的段。反之,在偏移量上加16也和在段上加1等價。某些時候,據此認為段的“粒度”是16字節。

練習題
嘗試一下將下面的地址轉化為20bit的地址:

2EA8:D678 26CF:8D5F 453A:CFAD 2933:31A6 5924:DCCF
694E:175A 2B3C:D218 728F:6578 68E1:A7DC 57EC:AEEA    

稍高一些的要求是,寫一個程序將段為AX、偏移量為BX的地址轉換為20bit的地址,并保存于EAX中。

[上面習題的答案]

我們現在可以寫一個真正的程序了。

經典程序:Hello, world

;;; 應該得到一個29字節的.com文件
.MODEL TINY
.CODE
CR equ 13
LF equ 10
TERMINATOR equ '$'
ORG 100h
Main PROC
mov dx,offset sMessage
mov ah,9
int 21h
mov ax,4c00h
int 21h
Main ENDP
sMessage:
 DB 'Hello, World!'
 DB CR,LF,TERMINATOR
END Main    
; .COM文件的內存模型是‘TINY’
; 代碼段開始
; 回車
; 換行
; DOS字符串結束符
; 代碼起始地址為CS:0100h
; 令DS:DX指向Message
; int 21h(DOS中斷)功能9 -
; 顯示字符串到標準輸出設備
; int 21h功能4ch -
; 終止程序并返回AL的錯誤代碼
 

; 程序結束的同時指定入口點為Main

   


那么,我們需要解釋很多東西。

首先,作為匯編語言的抽象,C語言擁有“指針”這個數據類型。在匯編語言中,幾乎所有對內存的操作都是由對給定地址的內存進行訪問來完成的。這樣,在匯編語言中,絕大多數操作都要和指針產生或多或少的聯系。

這里我想強調的是,由于這一特性,匯編語言中同樣會出現C程序中常見的緩沖區溢出問題。如果你正在設計一個與安全有關的系統,那么最好是仔細檢查你用到的每一個串,例如,它們是否一定能夠以你預期的方式結束,以及(如果使用的話)你的緩沖區是否能保證實際可能輸入的數據不被寫入到它以外的地方。作為一個匯編語言程序員,你有義務檢查每一行代碼的可用性。

程序中的equ偽指令是宏匯編特有的,它的意思接近于C或Pascal中的const(常量)。多數情況下,equ偽指令并不為符號分配空間。

此外,匯編程序執行一項操作是非常繁瑣的,通常,在對與效率要求不高的地方,我們習慣使用系統提供的中斷服務來完成任務。例如本例中的中斷21h,它是DOS時代的中斷服務,在Windows中,它也被認為是Windows API的一部分(這一點可以在Microsoft的文檔中查到)。中斷可以被理解為高級語言中的子程序,但又不完全一樣——中斷使用系統棧來保存當前的機器狀態,可以由硬件發起,通過修改機器狀態字來反饋信息,等等。

那么,最后一段通過DB存放的數據到底保存在哪里了呢?答案是緊挨著代碼存放。在匯編語言中,DB和普通的指令的地位是相同的。如果你的匯編程序并不知道新的助記符(例如,新的處理器上的CPUID指令),而你很清楚,那么可以用DB 機器碼的方式強行寫下指令。這意味著,你可以超越匯編器的能力撰寫匯編程序,然而,直接用機器碼編程是幾乎肯定是一件費力不討好的事——匯編器廠商會經常更新它所支持的指令集以適應市場需要,而且,你可以期待你的匯編其能夠產生正確的代碼,因為機器查表是不會出錯的。既然機器能夠幫我們做將程序轉換為代碼這件事情,那么為什么不讓它來做呢?

細心的讀者不難發現,在程序中我們沒有對DS進行賦值。那么,這是否意味著程序的結果將是不可預測的呢?答案是否定的。DOS(或Windows中的MS-DOS VM)在加載.com文件的時候,會對寄存器進行很多初始化。.com文件被限制為小于64KB,這樣,它的代碼段、數據段都被裝入同樣的數值(即,初始狀態下DS=CS)。

也許會有人說,“嘿,這聽起來不太好,一個64KB的程序能做得了什么呢?還有,你吹得天花亂墜的堆棧段在什么地方?”那么,我們來看看下面這個新的Hello world程序,它是一個EXE文件,在DOS實模式下運行。

;;; 應該得到一個561 字節的EXE文件
.MODEL SMALL
.STACK 200h
CR equ 13
LF equ 10
TERMINATOR equ '$'
.DATA
Message DB 'Hello, World !'
 DB CR,LF,TERMINATOR
.CODE
Main PROC
mov ax, DGROUP
mov ds, ax
mov dx, offset Message
mov ah, 9
int 21h
mov ax, 4c00h
int 21h
Main ENDP
END main     

; 采用“SMALL”內存模型
; 堆棧段

; 回車
; 換行
; DOS字符串結束符

; 定義數據段

; 定義顯示串

; 定義代碼段

; 將數據段
; 加載到DS寄存器

; 設置DX
; 顯示

; 終止程序

   


561字節?實現相同功能的程序大了這么多!為什么呢?我們看到,程序擁有了完整的堆棧段、數據段、代碼段,其中堆棧段足足占掉了512字節,其余的基本上沒什么變化。

分成多個段有什么好處呢?首先,它讓程序顯得更加清晰——你肯定更愿意看一個結構清楚的程序,代碼中hard-coded的字符串、數據讓人覺得費解。比如,mov dx, 0152h肯定不如mov dx, offset Message來的親切。此外,通過分段你可以使用更多的內存,比如,代碼段騰出的空間可以做更多的事情。exe文件另一個吸引人的地方是它能夠實現“重定位”。現在你不需要指定程序入口點的地址了,因為系統會找到你的程序入口點,而不是死板的100h。

程序中的符號也會在系統加載的時候重新賦予新的地址。exe程序能夠保證你的設計容易地被實現,不需要考慮太多的細節。

當然,我們的主要目的是將匯編語言作為高級語言的一個有用的補充。如我在開始提到的那樣,真正完全用匯編語言實現的程序不一定就好,因為它不便于維護,而且,由于結構的原因,你也不太容易確保它是正確的;匯編語言是一種非結構化的語言,調試一個精心設計的匯編語言程序,即使對于一個老手來說也不啻是一場惡夢,因為你很可能掉到別人預設的“陷阱”中——這些技巧確實提高了代碼性能,然而你很可能不理解它,于是你把它改掉,接著就發現程序徹底敗掉了。使用匯編語言加強高級語言程序時,你要做的通常只是使用匯編指令,而不必搭建完整的匯編程序。絕大多數(也是目前我遇到的全部)C/C++編譯器都支持內嵌匯編,即在程序中使用匯編語言,而不必撰寫單獨的匯編語言程序——這可以節省你的不少精力,因為前面講述的那些偽指令,如equ等,都可以用你熟悉的高級語言方式來編寫,編譯器會把它轉換為適當的形式。

需要說明的是,在高級語言中一定要注意編譯結果。編譯器會對你的匯編程序做一些修改,這不一定符合你的要求(附帶說一句,有時編譯器會很聰明地調整指令順序來提高性能,這種情況下最好測試一下哪種寫法的效果更好),此時需要做一些更深入的修改,或者用db來強制編碼。

3.2 保護模式

實模式的東西說得太多了,盡管我已經刪掉了許多東西,并把一些原則性的問題拿到了這一節討論。這樣做不是沒有理由的——保護模式才是現在的程序(除了操作系統的底層啟動代碼)最常用的CPU模式。保護模式提供了很多令人耳目一新的功能,包括內存保護(這是保護模式這個名字的來源)、進程支持、更大的內存支持,等等。

對于一個編程人員來說,能“偷懶”是一件令人愉快的事情。這里“偷懶”是說把“應該”由系統做的事情做的事情全都交給系統。為什么呢?這出自一個基本思想——人總有犯錯誤的時候,然而規則不會,正確地了解規則之后,你可以期待它像你所了解的那樣執行。對于C程序來說,你自己用C語言寫的實現相同功能的函數通常沒有系統提供的函數性能好(除非你用了比函數庫好很多的算法),因為系統的函數往往使用了更好的優化,甚至可能不是用C語言直接編寫的。

當然,“偷懶”的意思是說,把那些應該讓機器做的事情交給計算機來做,因為它做得更好。我們應該把精力集中到設計算法,而不是編寫源代碼本身上,因為編譯器幾乎只能做等價優化,而實現相同功能,但使用更好算法的程序實現,則幾乎只能由人自己完成。

舉個例子,這樣一個函數:

int fun(){
 int a=0;
 register int i;
 for(i=0; i<1000; i++) a+=i;
 return a;
}    

在某種編譯模式[DEBUG]下被編譯為

push ebp
mov ebp,esp
sub esp,48h
push ebx
push esi
push edi
lea edi,[ebp-48h]
mov ecx,12h
mov eax,0CCCCCCCCh
rep stos dword ptr [edi]
mov dword ptr [ebp-4],0
mov dword ptr [ebp-8],0
jmp fun+31h
mov eax,dword ptr [ebp-8]
add eax,1
mov dword ptr [ebp-8],eax
cmp dword ptr [ebp-8],3E8h
jge fun+45h
mov ecx,dword ptr [ebp-4]
add ecx,dword ptr [ebp-8]
mov dword ptr [ebp-4],ecx
jmp fun+28h
mov eax,dword ptr [ebp-4]
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret    ; 子程序入口

; 保護現場
; 初始化變量-調試版本特有。
; 本質是在堆中挖一塊地兒,存CCCCCCCC。
; 用串操作進行,這將發揮Intel處理器優勢
; ‘a=0’
; ‘i=0’

; 走著
; i++
; i<1000?
; a+=i;
; return a;

; 恢復現場

; 返回

   


而在另一種模式[RELEASE/MINSIZE]下卻被編譯為

xor eax,eax
xor ecx,ecx
add eax,ecx
inc ecx
cmp ecx,3E8h
jl fun+4
ret    

; a=0;
; i=0;
; a+=i;
; i++;
; i<1000?
; 是->繼續繼續
; return a

   


如果讓我來寫,多半會寫成

mov eax, 079f2ch
ret    

; return 499500

   


為什么這樣寫呢?我們看到,i是一個外界不能影響、也無法獲知的內部狀態量。作為這段程序來說,對它的計算對于結果并沒有直接的影響——它的存在不過是方便算法描述而已。并且我們看到的,這段程序實際上無論執行多少次,其結果都不會發生變化,因此,直接返回計算結果就可以了,計算是多余的(如果說一定要算,那么應該是編譯器在編譯過程中完成它)。

更進一步,我們甚至希望編譯器能夠直接把這個函數變成一個符號常量,這樣連操作堆棧的過程也省掉了。

第三種結果屬于“等效”代碼,而不是“等價”代碼。作為用戶,很多時候是希望編譯器這樣做的,然而由于目前的技術尚不成熟,有時這種做法會造成一些問題(gcc和g++的頂級優化可以造成編譯出的FreeBSD內核行為異常,這是我在FreeBSD上遇到的唯一一次軟件原因的kernel panic),因此,并不是所有的編譯器都這樣做(另一方面的原因是,如果編譯器在這方面做的太過火,例如自動求解全部“固定”問題,那么如果你的程序是解決固定的問題“很大”,如求解迷宮,那么在編譯過程中你就會找錘子來砸計算機了)。然而,作為編譯器制造商,為了提高自己的產品的競爭力,往往會使用第三種代碼來做函數庫。正如前面所提到的那樣,這種優化往往不是編譯器本身的作用,盡管現代編譯程序擁有編譯執行、循環代碼外提、無用代碼去除等諸多優化功能,但它都不能保證程序最優。最后一種代碼恐怕很少有編譯器能夠做到,不信你可以用自己常用的編譯器加上各種優化選項試試:)

發現什么了嗎?三種代碼中,對于內存的訪問一個比一個少。這樣做的理由是,盡可能地利用寄存器并減少對內存的訪問,可以提高代碼性能。在某些情況下,使代碼既小又快是可能的。

書歸正傳,我們來說說保護模式的內存模型。保護模式的內存和實模式有很多共同之處。


毫無疑問,以'protected mode'(保護模式), 'global descriptor table'(全局描述符表), 'local descriptor table'(本地描述符表)和'selector'(選擇器)搜索,你會得到完整介紹它們的大量信息。

保護模式與實模式的內存類似,然而,它們之間最大的區別就是保護模式的內存是“線性”的。

新的計算機上,32-bit的寄存器已經不是什么新鮮事(如果你哪天聽說你的CPU的寄存器不是32-bit的,那么它——簡直可以肯定地說——的字長要比32-bit還要多。新的個人機上已經開始逐步采用64-bit的CPU了),換言之,實際上段/偏移量這一格局已經不再需要了。盡管如此,在繼續看保護模式內存結構時,仍請記住段/偏移量的概念。不妨把段寄存器看作對于保護模式中的選擇器的一個模擬。選擇器是全局描述符表(Global Descriptor Table, GDT)或本地描述符表(Local Descriptor Table, LDT)的一個指針。

如圖所示,GDT和LDT的每一個項目都描述一塊內存。例如,一個項目中包含了某塊被描述的內存的物理的基地址、長度,以及其他一些相關信息。

保護模式是一個非常重要的概念,同時也是目前撰寫應用程序時,最常用的CPU模式(運行在新的計算機上的操作系統很少有在實模式下運行的)。

為什么叫保護模式呢?它“保護”了什么?答案是進程的內存。保護模式的主要目的在于允許多個進程同時運行,并保護它們的內存不受其他進程的侵犯。這有點類似于C++中的機制,然而它的強制力要大得多。如果你的進程在保護模式下以不恰當的方式訪問了內存(例如,寫了“只讀”內存,或讀了不可讀的內存,等等),那么CPU就會產生一個異常。這個異常將交給操作系統處理,而這種處理,假如你的程序沒有特別說明操作系統該如何處理的話,一般就是殺掉做錯了事情的進程。

我像這樣的對話框大家一定非常熟悉(臨時寫了一個程序故意造成的錯誤):


好的,只是一個程序崩潰了,而操作系統的其他進程照常運行(同樣的程序在DOS中幾乎是板上釘釘的死機,因為NULL指針的位置恰好是中斷向量表),你甚至還可以調試它。

保護模式還有其他很多好處,在此就不一一贅述了。實模式和保護模式之間的切換問題我打算放在后面的“高級技巧”一章來講,因為多數程序并不涉及這個。

了解了內存的格局,我們就可以進入下一節——操作內存了。

3.3 操作內存

前兩節中,我們介紹了實模式和保護模式中使用的不同的內存格局。現在開始解釋如何使用這些知識。

回憶一下前面我們說過的,寄存器可以用作內存指針。現在,是他們發揮作用的時候了。

可以將內存想象為一個順序的字節流。使用指針,可以任意地操作(讀寫)內存。

現在我們需要一些其他的指令格式來描述對于內存的操作。操作內存時,首先需要的就是它的地址。

讓我們來看看下面的代碼:

mov ax,[0]

方括號表示,里面的表達式指定的不是立即數,而是偏移量。在實模式中,DS:0中的那個字(16-bit長)將被裝入AX。

然而0是一個常數,如果需要在運行的時候加以改變,就需要一些特殊的技巧,比如程序自修改。匯編支持這個特性,然而我個人并不推薦這種方法——自修改大大降低程序的可讀性,并且還降低穩定性,性能還不一定好。我們需要另外的技術。

mov bx,0
mov ax,[bx]

看起來舒服了一些,不是嗎?BX寄存器的內容可以隨時更改,而不需要用冗長的代碼去修改自身,更不用擔心由此帶來的不穩定問題。

同樣的,mov指令也可以把數據保存到內存中:

mov [0],ax

在存儲器與寄存器之間交換數據應該足夠清楚了。

有些時候我們會需要操作符來描述內存數據的寬度:

操作符    意義    

byte ptr    一個字節(8-bit, 1 byte)    

word ptr    一個字(16-bit)    

dword ptr    一個雙字(32-bit)    

例如,在DS:100h處保存1234h,以字存放:

mov word ptr [100h],01234h

于是我們將mov指令擴展為:

mov reg(8,16,32), mem(8,16,32)
mov mem(8,16,32), reg(8,16,32)
mov mem(8,16,32), imm(8,16,32)

需要說明的是,加減同樣也可以在[]中使用,例如:

mov ax,[bx+10]
mov ax,[bx+si]
mov ax,es:[di+bp]

等等。我們看到,對于內存的操作,即使使用MOV指令,也有許多種可能的方式。下一節中,我們將介紹如何操作串。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 两个人做羞羞的视频 | 再深点灬舒服灬太大的91优势 | 日韩欧美在线播放 | 欧美呦呦呦| 天天添天天操 | 日批视频免费观看 | 午夜视频免费观看 | 日本黄漫动漫在线观看视频 | 亚洲午夜无码久久久久 | 亚洲国产成人精品片在线观看 | www.国产精品一区 | 成年无码av片 | 中文字幕国产一区 | 亚洲色欲色欲www在线丝 | 中国肥老太婆高清video | 国产成人av三级在线观看 | 亚洲国产精品国自产拍张津瑜 | 成人免费毛片aaaaaa片 | 成人免费视频一区二区 | 国产精品伦一区二区在线 | 丰满熟妇乱又伦在线无码视频 | 色老大影院 | 少妇又紧又色又爽又刺激视频网站 | 少妇性l交大片欧洲热妇乱xxx | 99国产精品久久久久久久成人热 | 真实偷拍激情啪啪对白 | 成人网免费视频m3u8 | 美女裸体无遮挡免费视频网站 | 无码精品黑人一区二区三区 | 疯狂做受xxxx高潮欧美日本 | 亚洲国产精品一区二区www | 99碰碰| 麻豆人妻无码性色av专区 | 欧美v亚洲v日韩v最新在线 | 黑人vs日本人ⅹxxxhd | 99久久影院| 国产偷国产偷亚洲高清人 | 777米奇影院狠狠色 一日本道a高清免费播放 | 亚洲香蕉成人av网站在线观看 | 亚洲中文无码永久免费 | 欧美精品videosbestsex日本 | 黄色国产小视频 | 露脸啪啪清纯大学生美女 | 国产jizz| 亚洲蜜桃精久久久久久久久久久久 | 亚洲加勒比无码一区二区 | 狠狠躁夜夜躁人人爽天天 | 伊人久久精品久久亚洲一区 | 国产爆初菊在线观看免费视频网站 | 国产亚洲黑人性受xxxx精品 | 公么大龟弄得我好舒服秀婷视频 | 91网页版| 亚洲国产无线乱码在线观看 | 久久精品视频播放 | 国产欧美一区二区三区在线看 | 欧美真人做爰在线观看 | 色琪琪一区二区三区亚洲区 | 日本免费毛片 | 碰碰久久 | 国内毛片毛片毛片毛片毛片 | 日韩av在线播放观看 | 婷婷无套内射影院 | 久久不见久久见免费影院 | 色婷婷视频 | 国产乱码卡一卡2卡三卡四 国产精品国产三级国产专区53 | 婷婷色婷婷开心五月四房播播 | 黄色网址哪里有 | 少妇高潮灌满白浆毛片免费看 | 日韩黄色在线播放 | 巨胸挤奶视频www网站 | 人人澡人人妻人人爽人人蜜桃 | 二宫光在线播放88av | 成人区精品一区二区婷婷 | 风间由美一区二区av101 | 日本特黄特色a大片免费高清观看视频 | 精品无码三级在线观看视频 | 午夜看片在线观看 | 日本三级黄在线观看 | 国产一级片自拍 | 人妻无码熟妇乱又伦精品视频 | 国产18处破外女 | 好吊操视频 | 综合国产视频 | 精射女上司 | 日韩精品一卡二卡 | 欧美综合自拍亚洲综合图 | 日本成人在线播放 | 欧美成人免费全部网站 | 在线中文字幕一区二区 | 在线日韩一区二区 | 国内黄色网址 | 久久94| 99sao| sese婷婷 | 日产欧产美韩系列久久99 | 999精品免费视频 | 杂技xxx裸体xxxx欧美 | 色眯眯视频 | 一区自拍 | 国产精品爱久久久久久久 | 国产一区成人 | 久久久精品波多野结衣av | 国产91对白在线播 | 丰满岳乱妇一区二区 | 天天爽天天爽夜夜爽毛片 | 久久精品视频免费观看 | 久草色在线 | 毛片黄色视频 | 国产草草影院 | 国产乱子伦精品无码码专区 | 日日干夜夜干 | 自拍偷拍日韩精品 | 国产精品久久久久久久久久直播 | 无套内谢少妇在线观看视频 | 精品一区二区久久久 | 99re在线观看| 色天使久久综合网天天 | av在线网站无码不卡的 | 午夜桃色 | 少妇裸体淫交视频免费观看 | www夜色| 门国产乱子视频观看 | 久久久久久婷婷 | 天躁夜夜躁狼狠躁 | 天天干天天色天天 | 国产在线观看免费视频今夜 | 国产精品色网 | 一本色道久久综合精品竹菊 | 超碰最新网址 | 久久久免费网站 | 一区二区在线播放视频 | 国产精品一级视频 | 激情综合色五月丁香六月欧美 | 国产真实交换配乱淫视频 | 成年人的黄色片 | 午夜福利在线永久视频 | 国产成人午夜精华液 | 夜夜草导航 | 伊人春色网 | 国产午夜精品一区二区三区四区 | 8888四色奇米在线观看 | 一区二区三区欧美在线 | 久久婷婷一区二区 | 国产亚洲精品久久久久久国模美 | 国产精品自在在线午夜 | 日本精品毛片一区视频播 | 中文字幕欧美日韩va免费视频 | www.日韩在线 | 大江大河第三部50集在线观看旭豪 | 男人天堂网站 | 亚洲成年人专区 | 人妻少妇精品视频一区二区三区 | 一区二区亚洲视频 | 91操操操| 国产日韩欧美不卡在线二区 | 欧美日韩喷水 | 国产做a爱免费视频在线观看 | 成人天堂资源www在线 | 黄色免费的视频 | 在线视频97 | 亚洲午夜久久久久久久久电影网 | 国产最新精品视频 | 久久久视频6r | 99精品在线观看视频 | 中文字幕人妻无码专区 | 欧日韩一区二区三区 | 国产污污视频在线观看 | 国产精品一区视频 | 国产八十老太另类视频 | 97色伦图片 | 一级免费黄色毛片 | 久久久精品一区 | 日韩一级在线观看视频 | 九一毛片 | 国模冰莲大胆自慰难受 | 精品国产乱码久久久久久口爆 | 精品粉嫩aⅴ一区二区三区四区 | 在线视频免费观看你懂的 | 亚洲视频区 | 日韩精品久久久久久久白丝 | 337p日本欧洲亚洲大胆裸体艺术 | 少妇人妻偷人精品免费视频 | 精品成人一区二区三区 | 黄色一级片国产 | 人人干在线 | 91色在线| 日本中文有码 | 国产婷婷色一区二区三区在线 | 中文字幕一区二区三区乱码不卡 | 无码人妻精品一区二区三区免费 | 亚洲第一免费视频 | 国产免国产免费 | 精品国产第一国产综合精品 | 36d大奶| 亚洲第七页 | 天堂欧美城网站地址 | 丰满少妇理论片bd高清 | 性欧美长视频免费观看不卡 | 男女超爽视频免费播放 | 日本免费不卡 | 99久久欧美日韩国产二区 | 亚洲成人免费视频在线 | 18男女无套免费视频 | 亚洲精品乱码久久久久红杏 | 国产九九久久 | 青草青在线 | 久久久精品国产一区二区三区 | 毛片基地黄久久久久久天堂 | 免费看黄色片网站 | 亚洲v欧美v日韩v国产v | 国产精品久久久久久久久人妻 | 日韩成人免费av | 国产欧美日韩精品一区二区三区 | 一级片视频免费观看 | 精品无人乱码一区二区三区的优势 | 国产精品美女久久久久 | 吻胸摸腿揉屁股娇喘视频网站小说 | 国产igao为爱做激情国外 | 福利片第一页 | 国内av在线播放 | 国产欧美xxxx6666 | 九九av在线| 国产主播大尺度精品福利免费 | 免费人成视频网站在线观看18 | 国产在线视频一区二区三区 | 国产在线播放91 | 欧美色图在线播放 | xxx精品| 强奷人妻日本中文字幕 | 亚洲一区二区三区四区不卡 | 国产乱码一区二区三区咪爱 | 岳的奶又大又白又紧在线观看 | 成人xxx| 中文字幕免费在线观看视频 | 五月天综合婷婷 | 国内精品久久久久影视 | 人妻大战黑人白浆狂泄 | 国产真人做爰毛片视频直播 | 欧美亚洲国产精品久久蜜芽直播 | 国产精品av久久久久久麻豆网 | 国产精品啪| 91n视频| 中文字幕av无码一区二区三区电影 | 亚洲 欧洲 无码 在线观看 | 在线播放无码后入内射少妇 | 国产aⅴ超薄肉色丝袜交足 国产aⅴ精品 | 高h乱l高辣h文乱古文 | 91高清国产 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 欧美伊人久久大香线蕉综合 | 高清视频在线观看一区二区三区 | 精品乱码一区二区三区 | 在线观看a级片 | 国产视频999 | 三级网站在线 | 久久久精品国产sm最大网站 | 四虎影视18库在线影院 | 国产精品传媒麻豆hd | 国语播放老妇呻吟对白 | 少妇精品无码一区二区三区 | 亚洲精品欧美日韩 | 最新三级网站 | 欧洲vodafone精品性 | 国产精品18久久久久久vr | 99久久国语露脸精品国产 | 亚洲男人av香蕉爽爽爽爽 | 欧美黑人疯狂性受xxxxx喷水 | 国产美女免费 | 国产jizz| 精品人妻码一区二区三区 | 动漫3d精品一区二区三区乱码 | 国产裸体丰满白嫩大尺度尤物可乐 | 日本中文字幕在线视频 | 秋霞影院午夜 | 国内精品伊人久久久久777 | av成人免费观看 | 人妻插b视频一区二区三区 亚洲毛片av日韩av无码 | 91精品国产高清一区二区三区 | 日韩中文字幕2019 | 丰满爆乳在线播放 | 欧美gv在线观看 | 午夜黄色在线 | 熟妇人妻va精品中文字幕 | 噜噜噜噜狠狠狠7777视频 | 又色又污又爽又黄的网站 | 国产免费久久久 | 91快射| 免费成年人视频在线观看 | 日本少强伦xxxhd | 9999国产精品欧美久久久久久 | 国产精品成人av性教育 | 国产精品88久久久久久妇女 | 少妇久久久久久久久久 | 一出一进一爽一粗一大视频 | 亚洲蜜桃精久天干天干天啪啪夜l | 国产女同疯狂作爱系列3 | 中文字幕在线亚洲精品 | 欧美日韩午夜群交多人轮换 | 大肉大捧一进一出好爽视频动漫 | 国产l精品国产亚洲区 | 欧美日韩网址 | 99久久免费精品 | aaaaaaa欧美黄色大片 | 大尺度做爰黄9996片视频 | 深夜视频在线看 | 四虎永久在线精品免费网站 | 国产久色在线拍揄自揄拍 | 日日躁夜夜躁狠狠躁 | 日本无遮羞调教惩罚网站 | 欧美伊人网 | 欧美一级无毛 | 毛片直接看 | 免费看片黄色 | 超碰人人干 | 久久久国产精品 | 欧美性潮喷xxxxx免费视频看 | av作品在线 | 日韩中文字幕一区二区三区 | 亚洲成aⅴ人片久青草影院 亚洲无av码一区二区三区 | 少妇下蹲下露大唇58 | 国产精品伦一区二区三级视频 | 午夜伦4410yy妇女久久v | 天天舔天天舔 | 成人深夜在线 | 国产一级免费片 | 中文在线一区二区三区 | 国产女人与zoxxxx另类 | 国产一区二区三区不卡在线观看 | 337p日本欧洲亚洲大胆艺术图 | 色婷婷综合视频 | 日韩资源 | 99精品小视频 | 熟女精品视频一区二区三区 | 美女内射视频www网站午夜 | 日日碰狠狠躁久久躁婷婷 | 欧美精品第一页 | 亚洲第一天堂影院 | 亚洲黄色av | 久久99精品久久久久久不卡 | 少妇无码av无码专区线 | 久久99精品久久久秒播软件优势 | 国产69久久精品成人看 | 99久久婷婷国产综合精品免费 | 亚洲国产精品国自产拍av秋霞 | 亚洲精品在线观看免费 | 国产99久一区二区三区a片 | 一本大道久久卡一卡二卡三乱码 | 国产精品成人一区二区不卡 | 国产不雅视频 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲午夜一区二区三区 | 中文字幕1 | 毛片视频在线免费观看 | 五月婷婷,六月丁香 | 国产丰满老熟女重口对白 | 国产精品久草 | 国产精品免费视频一区二区 | 成人免费看片&#39 | 影音先锋亚洲一区 | 欧美一区二区影院 | 少妇又紧又爽又黄的视频 | 在厨房拨开内裤进入在线视频 | 精产品自偷自拍 | 学生粉嫩无套白浆第一次 | 国产网站视频 | 国产呦小j女精品视频 | 日批视频在线免费看 | 成人做爰www看视频软件 | 青青久久av北条麻妃海外网 | 日韩av无码中文无码不卡电影 | 黑人巨大精品欧美一区二区小视频 | 国产偷自拍| 日韩在线播放一区二区 | 91福利张津瑜在线播放 | 国产乱子伦视频一区二区三区 | 成人精品视频在线 | 国产资源在线视频 | 成av在线| 亚洲精品拍拍拍在线观看 | 久久久无码精品亚洲日韩按摩 | 欧美人吸奶水吃奶水 | 国产天堂视频在线观看 | 欧美啪啪网站 | 亚洲成人中文字幕 | 国产三级三级看三级 | 91av在线免费| 男女性动态激烈动全过程 | 欧美在线视频不卡 | 国产高清在线a视频大全 | 成年人在线视频 | 久久成| 美女无遮挡免费视频网站 | 欧美性生活网站 | 又硬又粗又大一区二区三区视频 | 99国产超薄丝袜足j在线播放 | 四虎永久在线精品免费网址 | 亚洲综合影院 | 毛片网在线观看 | 国产女优在线播放 | av av片在线看| 中国农民工hd自拍xxxx | 先锋影音一区二区三区 | 久久久精品国产sm调教网站 | 麻豆高清免费国产一区 | 久久免费看少妇高潮a | 国产精品人成在线播放新网站 | 亚洲五月婷 | www夜片内射视频在观看视频 | 日本免费一区二区三区视频观看 | 91午夜少妇三级全黄 | 青青草五月天 | 精品国产精品三级精品av网址 | 久久精品8 | 中文日产日产乱码乱偷在线 | 999热精品| 久草网在线观看 | 国产av无码专区亚洲a√ | 女人喂男人奶水做爰视频 | 欧美a网| 一本久久a精品一合区久久久 | 一本色道久久综合狠狠躁篇的优点 | 国产黄色免费看 | 久久鲁鲁 | 四虎永久免费地址 | 亚洲免费不卡视频 | 91啦丨九色丨刺激 | 日韩黄色三级视频 | 色吊丝一区二区 | 国产精品久久精品三级 | 亚洲精品一区二区三区在线观看 | 又色又爽又黄18禁美女裸身无遮挡 | 性xx色xx综合久久久xx | 欧美性受视频 | 精品国产一区二区三区久久影院 | 欧洲精品久久久 | 久久精品入口九色 | 日本欧美成人 | 欧美女优一区 | 无遮挡aaaaa大片免费看 | 日韩亚洲精品中文字幕 | 一级性生活免费视频 | 一本色道久久综合狠狠躁篇怎么玩 | 日本中文字幕免费观看 | 日韩精品久久中文字幕 | 中文字幕人成乱码熟女 | 国产精品免费久久久久久久久久中文 | 国产人妖乱国产精品人妖 | 久草操| 亚洲欧美国产毛片在线 | 97人人超碰国产精品最新o | 国自产拍偷拍精品啪啪一区二区 | 国产亚洲精品精品国产亚洲综合 | 国产视频亚洲精品 | 国产jizz视频全部免费软件 | 国产天码视频网站 | 学生妹亚洲一区二区 | 国产又色又爽又黄的视频在线观看 | 日日碰狠狠躁久久躁96avv | 久久精品久久久久久久久久16 | 欧美激情三区 | 成人免费观看视频大全 | 久久精品国产一区二区三区不卡 | 国产偷人爽久久久久久老妇app | 中文无码久久精品 | 国产精品人人爽 | 97碰碰碰免费公开在线视频 | 伊人大杳焦在线 | 99热九九这里只有精品10 | 成人午夜久久 | 国内精品一区二区三区 | 国产欧美日韩在线视频 | 久久天堂av综合合色蜜桃网 | 日本按摩片色xxxx | 50岁退休熟女露脸高潮 | 三级网址在线播放 | 中文字幕在线三区 | 无码h黄肉动漫在线观看网站 | 成人国产精品久久久春色 | 国产极品白嫩精品 | 毛片基地站 | 麻豆蜜桃九色在线视频 | 黄频视频在线观看 | 红桃成人少妇网站 | 久久婷色 | 久久久久无码精品国产h动漫 | 一色一性一乱一交一视频 | 蜜臀久久99精品久久久无需会员 | 国内外成人在线视频 | 精品蜜桃一区二区三区 | av在线免播放器 | 亚洲国产婷婷香蕉久久久久久 | 国产精品不卡在线 | 色天天av| 国产精品又黄又爽又色无遮挡 | 不卡欧美| 欧美日韩一级二级三级 | 影音先锋国产精品 | 93看片淫黄大片一级 | 日韩做爰视频免费 | 免费羞羞午夜爽爽爽视频 | 精品无码中文字幕在线 | 日韩精品一区二区三区四区在线观看 | 国产一区不卡在线 | 成人欧美日韩一区二区三区 | 国内精品久久久久久久 | 在线视频一区二区三区四区 | 成人国产1314www色视频 | 91精品啪在线观看国产线免费 | 免费一区二区 | ririsao久久精品一区 | 久久最新精品 | 日日干日日草 | 91精品国产福利在线观看 | 国产乱码一区二区三区 | 日韩在线黄色 | 免费女同毛片在线观看 | 欧美人牲| 亚洲男人的天堂在线 | 成人免费视频在线播放 | 日本夫妻性生活视频 | 四川妇女偷人毛片大全 | 四川少妇xxx奶大xxx | 亚洲欧美一区二区三区不卡 | 亚洲人成在线影院 | 噜噜噜精品欧美成人 | 一区二区三区在线免费 | 国产在线精| 日韩 欧美 综合 | 婷婷激情综合网 | av网站在线免费看 | 狠狠躁日日躁夜夜躁2022麻豆 | 日本丰满熟妇乱子伦 | 美女爆吸乳羞羞免费网站妖精 | 夜色av网站 | 国产寡妇亲子伦一区二区三区 | 国产乱码日产乱码精品精 | 国产美女免费无遮挡 | 黄色成人免费观看 | 亚洲污污网站 | 国产乱了实正在真 | 大江大河第三部50集在线观看旭豪 | a级毛片黄免费观看 m | 在线视频观看一区二区 | 婷婷激情偷拍在线 | 国产91会所女技师在线观 | 李丽珍aa一级a毛片 李丽珍a级裸体啪啪 | 理论片福利片 | 国产欧美综合一区二区三区 | 亚洲成色www久久网站夜月 | 最新黄网 | 亚洲精品久久久蜜桃网站 | 国产精品久久久久国产三级传媒 | 日本三级香港三级人妇99 | 色婷婷国产精品免费网站 | 一区二区三区免费观看 | 色婷婷午夜 | 亚洲欧美日韩在线不卡 | av在线第一页 | 久久久国产精品黄毛片 | 黄a无码片内射无码视频 | 粉嫩av一区二区老牛影视 | 国产一区二区麻豆 | 午夜精品小视频 | 激情综合一区二区三区 | 不卡福利视频 | 国产内射爽爽大片视频社区在线 | 狠狠色狠狠色 | 成人精品一区二区三区中文字幕 | 亚洲精品国产精品色诱一区 | 久久香蕉超碰97国产精品 | 四虎8848精品成人免费网站 | 欧洲少妇性喷潮 | 国产精品久久久久久久一区探花 | 欧美性折磨bdsm另类 | 性欧美长视频免费观看不卡 | 熟妇人妻久久中文字幕 | 我要看一级黄色 | 狠狠精品久久久无码中文字幕 | 欧洲高潮三级做爰 | 偷拍女人私密按摩高潮视频 | 爱久久av一区二区三区 | 国产在线精品观看 | 青青青在线视频免费观看 | 亚洲欧美性视频 | 久久三级 | 欧美性做爰视频 | 免费观看日批视频 | 国产精品视频资源 | yyy6080韩国三级理论 | 国产亚洲va天堂va777 | 欧美人伦禁忌dvd放荡欲情 | 亚洲精品国产suv一区 | 麻豆91茄子在线观看 | 涩涩999| 国产激情av在线 | 亚洲日韩中文字幕在线播放 | 国产片网址 | 欧美一区二区三区精品 | 国产亚洲精品久久久久5区 国产亚洲精品久久久久久 国产亚洲精品久久久久久国模美 | 欧美亚洲色综久久精品国产 | 色欲aⅴ亚洲情无码av蜜桃 | 一性一交一伦一色一按—摩 | 天天综合干 | 欧美日韩中文字幕 | 亚洲日韩成人av无码网站 | 亚洲国产精品一区二区久久hs | 日本黄色不卡视频 | 伊人精品成人久久综合软件 | 日韩欧美激情在线 | 国产精品毛片一区二区三区 | 4438ⅹ亚洲全国最大色丁香 | 久久综合九色综合欧洲98 | 欧美午夜性春猛交xxxx按摩师 | 色天使久久综合网天天 | 欧美怡春院一区二区三区 |