青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 8  文章 - 26  trackbacks - 0
<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(5)

隨筆檔案

文章分類

文章檔案

相冊

C++語言

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 

關于從保護模式切換到實模式的相關說明

 

參考于淵的《自己動手寫操作系統(tǒng)》第三章中從實模式切換到保護模式,最后有重新切回實模式的代碼(代碼如下),其中有幾點不太明白的,參考其他文章之后在此記錄一下。


其中還有不太明白的地方,希望大家能在下面 留個言幫我講明白,謝謝。

下面代碼有些宏定義沒貼出來,應該能看明白。

  1==========================================
  2; pmtest2.asm
  3; 編譯方法:nasm pmtest2.asm -o pmtest2.com
  4==========================================
  5
  6%include    "pm.inc"    ; 常量, 宏, 以及一些說明
  7
  8org    0100h
  9    jmp    LABEL_BEGIN
 10
 11[SECTION .gdt]
 12; GDT
 13;                                         段基址,       段界限     , 屬性
 14LABEL_GDT:        Descriptor           0,                 00             ; 空描述符
 15LABEL_DESC_NORMAL:    Descriptor           0,            0ffffh, DA_DRW        ; ***注意此處為Normal 描述符*****
 16LABEL_DESC_CODE32:    Descriptor           0,  SegCode32Len - 1, DA_C + DA_32    ; 非一致代碼段, 32
 17LABEL_DESC_CODE16:    Descriptor           0,            0ffffh, DA_C        ; 非一致代碼段, 16
 18LABEL_DESC_DATA:    Descriptor           0,    DataLen - 1, DA_DRW        ; Data
 19LABEL_DESC_STACK:    Descriptor           0,        TopOfStack, DA_DRWA + DA_32    ; Stack, 32 位
 20LABEL_DESC_TEST:    Descriptor    0500000h,            0ffffh, DA_DRW
 21LABEL_DESC_VIDEO:    Descriptor     0B8000h,            0ffffh, DA_DRW        ; 顯存首地址
 22; GDT 結束
 23
 24GdtLen        equ    $ - LABEL_GDT    ; GDT長度
 25GdtPtr        dw    GdtLen - 1    ; GDT界限
 26        dd    0        ; GDT基地址
 27
 28; GDT 選擇子
 29SelectorNormal        equ    LABEL_DESC_NORMAL    - LABEL_GDT
 30SelectorCode32        equ    LABEL_DESC_CODE32    - LABEL_GDT
 31SelectorCode16        equ    LABEL_DESC_CODE16    - LABEL_GDT
 32SelectorData        equ    LABEL_DESC_DATA        - LABEL_GDT
 33SelectorStack        equ    LABEL_DESC_STACK    - LABEL_GDT
 34SelectorTest        equ    LABEL_DESC_TEST        - LABEL_GDT
 35SelectorVideo        equ    LABEL_DESC_VIDEO    - LABEL_GDT
 36; END of [SECTION .gdt]
 37
 38[SECTION .data1]     ; 數(shù)據(jù)段
 39ALIGN    32
 40[BITS    32]
 41LABEL_DATA:
 42SPValueInRealMode    dw    0
 43; 字符串
 44PMMessage:        db    "In Protect Mode now. ^-^"0    ; 進入保護模式后顯示此字符串
 45OffsetPMMessage        equ    PMMessage - $$
 46StrTest:        db    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"0
 47OffsetStrTest        equ    StrTest - $$
 48DataLen            equ    $ - LABEL_DATA
 49; END of [SECTION .data1]
 50
 51
 52; 全局堆棧段
 53[SECTION .gs]
 54ALIGN    32
 55[BITS    32]
 56LABEL_STACK:
 57    times 512 db 0
 58
 59TopOfStack    equ    $ - LABEL_STACK - 1
 60
 61; END of [SECTION .gs]
 62
 63
 64[SECTION .s16]
 65[BITS    16]
 66LABEL_BEGIN:
 67    mov    ax, cs
 68    mov    ds, ax
 69    mov    es, ax
 70    mov    ss, ax
 71    mov    sp, 0100h
 72
 73    mov    [LABEL_GO_BACK_TO_REAL+3], ax
 74    mov    [SPValueInRealMode], sp
 75
 76    ; 初始化 16 位代碼段描述符
 77    mov    ax, cs
 78    movzx    eax, ax
 79    shl    eax, 4
 80    add    eax, LABEL_SEG_CODE16
 81    mov    word [LABEL_DESC_CODE16 + 2], ax
 82    shr    eax, 16
 83    mov    byte [LABEL_DESC_CODE16 + 4], al
 84    mov    byte [LABEL_DESC_CODE16 + 7], ah
 85
 86    ; 初始化 32 位代碼段描述符
 87    xor    eax, eax
 88    mov    ax, cs
 89    shl    eax, 4
 90    add    eax, LABEL_SEG_CODE32
 91    mov    word [LABEL_DESC_CODE32 + 2], ax
 92    shr    eax, 16
 93    mov    byte [LABEL_DESC_CODE32 + 4], al
 94    mov    byte [LABEL_DESC_CODE32 + 7], ah
 95
 96    ; 初始化數(shù)據(jù)段描述符
 97    xor    eax, eax
 98    mov    ax, ds
 99    shl    eax, 4
100    add    eax, LABEL_DATA
101    mov    word [LABEL_DESC_DATA + 2], ax
102    shr    eax, 16
103    mov    byte [LABEL_DESC_DATA + 4], al
104    mov    byte [LABEL_DESC_DATA + 7], ah
105
106    ; 初始化堆棧段描述符
107    xor    eax, eax
108    mov    ax, ds
109    shl    eax, 4
110    add    eax, LABEL_STACK
111    mov    word [LABEL_DESC_STACK + 2], ax
112    shr    eax, 16
113    mov    byte [LABEL_DESC_STACK + 4], al
114    mov    byte [LABEL_DESC_STACK + 7], ah
115
116    ; 為加載 GDTR 作準備
117    xor    eax, eax
118    mov    ax, ds
119    shl    eax, 4
120    add    eax, LABEL_GDT        ; eax <- gdt 基地址
121    mov    dword [GdtPtr + 2], eax    ; [GdtPtr + 2<- gdt 基地址
122
123    ; 加載 GDTR
124    lgdt    [GdtPtr]
125
126    ; 關中斷
127    cli
128
129    ; 打開地址線A20
130    in    al, 92h
131    or    al, 00000010b
132    out    92h, al
133
134    ; 準備切換到保護模式
135    mov    eax, cr0
136    or    eax, 1
137    mov    cr0, eax
138
139    ; 真正進入保護模式
140  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;在此由實模式切進保護模式;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
141    jmp    dword SelectorCode32:0    ; 執(zhí)行這一句會把 SelectorCode32 裝入 cs, 并跳轉到 Code32Selector:0  處
142
143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
144
145LABEL_REAL_ENTRY:        ; 從保護模式跳回到實模式就到了這里
146    mov    ax, cs
147    mov    ds, ax
148    mov    es, ax
149    mov    ss, ax
150
151    mov    sp, [SPValueInRealMode]
152
153    in    al, 92h        ; ┓
154    and    al, 11111101b    ; ┣ 關閉 A20 地址線
155    out    92h, al        ; ┛
156
157    sti            ; 開中斷
158
159    mov    ax, 4c00h    ; ┓
160    int    21h        ; ┛回到 DOS
161; END of [SECTION .s16]
162
163
164[SECTION .s32]; 32 位代碼段. 由實模式跳入.
165[BITS    32]
166
167LABEL_SEG_CODE32:
168    mov    ax, SelectorData
169    mov    ds, ax            ; 數(shù)據(jù)段選擇子
170    mov    ax, SelectorTest
171    mov    es, ax            ; 測試段選擇子
172    mov    ax, SelectorVideo
173    mov    gs, ax            ; 視頻段選擇子
174
175    mov    ax, SelectorStack
176    mov    ss, ax            ; 堆棧段選擇子
177
178    mov    esp, TopOfStack
179
180
181    ; 下面顯示一個字符串
182    mov    ah, 0Ch            ; 0000: 黑底    1100: 紅字
183    xor    esi, esi
184    xor    edi, edi
185    mov    esi, OffsetPMMessage    ; 源數(shù)據(jù)偏移
186    mov    edi, (80 * 10 + 0* 2    ; 目的數(shù)據(jù)偏移。屏幕第 10 行, 第 0 列。
187    cld
188.1:
189    lodsb
190    test    al, al
191    jz    .2
192    mov    [gs:edi], ax
193    add    edi, 2
194    jmp    .1
195.2:    ; 顯示完畢
196
197    call    DispReturn
198
199    call    TestRead
200    call    TestWrite
201    call    TestRead
202
203    ; 到此停止
204  ;**********注意在此由32位代碼段跳至16位代碼段**********************
205    jmp    SelectorCode16:0
206
207------------------------------------------------------------------------
208TestRead:
209    xor    esi, esi
210    mov    ecx, 8
211.loop
212    mov    al, [es:esi]
213    call    DispAL
214    inc    esi
215    loop    .loop
216
217    call    DispReturn
218
219    ret
220; TestRead 結束-----------------------------------------------------------
221
222
223------------------------------------------------------------------------
224TestWrite:
225    push    esi
226    push    edi
227    xor    esi, esi
228    xor    edi, edi
229    mov    esi, OffsetStrTest    ; 源數(shù)據(jù)偏移
230    cld
231.1:
232    lodsb
233    test    al, al
234    jz    .2
235    mov    [es:edi], al
236    inc    edi
237    jmp    .1
238.2:
239
240    pop    edi
241    pop    esi
242
243    ret
244; TestWrite 結束----------------------------------------------------------
245
246
247------------------------------------------------------------------------
248; 顯示 AL 中的數(shù)字
249; 默認地:
250;    數(shù)字已經(jīng)存在 AL 中
251;    edi 始終指向要顯示的下一個字符的位置
252; 被改變的寄存器:
253;    ax, edi
254------------------------------------------------------------------------
255DispAL:
256    push    ecx
257    push    edx
258
259    mov    ah, 0Ch            ; 0000: 黑底    1100: 紅字
260    mov    dl, al
261    shr    al, 4
262    mov    ecx, 2
263.begin:
264    and    al, 01111b
265    cmp    al, 9
266    ja    .1
267    add    al, '0'
268    jmp    .2
269.1:
270    sub    al, 0Ah
271    add    al, 'A'
272.2:
273    mov    [gs:edi], ax
274    add    edi, 2
275
276    mov    al, dl
277    loop    .begin
278    add    edi, 2
279
280    pop    edx
281    pop    ecx
282
283    ret
284; DispAL 結束-------------------------------------------------------------
285
286
287------------------------------------------------------------------------
288DispReturn:
289    push    eax
290    push    ebx
291    mov    eax, edi
292    mov    bl, 160
293    div    bl
294    and    eax, 0FFh
295    inc    eax
296    mov    bl, 160
297    mul    bl
298    mov    edi, eax
299    pop    ebx
300    pop    eax
301
302    ret
303; DispReturn 結束---------------------------------------------------------
304
305SegCode32Len    equ    $ - LABEL_SEG_CODE32
306; END of [SECTION .s32]
307
308
30916 位代碼段. 由 32 位代碼段跳入, 跳出后到實模式
310[SECTION .s16code]
311ALIGN    32
312[BITS    16]
313LABEL_SEG_CODE16:
314    ; 跳回實模式:
315  ;****************注意在此用normal選擇子對段寄存器進行填充******************************
316    mov    ax, SelectorNormal
317    mov    ds, ax
318    mov    es, ax
319    mov    fs, ax
320    mov    gs, ax
321    mov    ss, ax
322
323    mov    eax, cr0
324    and    al, 11111110b
325    mov    cr0, eax
326
327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;在此由保護模式切進實模式;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
328LABEL_GO_BACK_TO_REAL:
329    jmp    0:LABEL_REAL_ENTRY    ; 段地址會在程序開始處被設置成正確的值
330
331Code16Len    equ    $ - LABEL_SEG_CODE16
332
333; END of [SECTION .s16code]
334

 

 

 

注意一在由保護模式切換到實模式之前,用normal選擇子對段寄存器進行填充。

原因:

在切換到實模式之前,把一個指向似乎沒有用的數(shù)據(jù)段的描述符Normal的選擇子裝載到DSES。這是為什么呢?

實模
式下
段描
述符
高速
緩沖
寄存
器的
內(nèi)容

段寄存器

段基地址

段界限(固定)

段屬性(固定)

存在性

特權級

已存取

粒度

擴展方向

可讀性

可寫性

可執(zhí)行

堆棧大小

一致特權

CS

當前CS*16

0000FFFFH

Y

0

Y

B

U

Y

Y

Y

-

N

SS

當前SS*16

0000FFFFH

Y

0

Y

B

U

Y

Y

N

W

-

DS

當前DS*16

0000FFFFH

Y

0

Y

B

U

Y

Y

N

-

-

ES

當前ES*16

0000FFFFH

Y

0

Y

B

U

Y

Y

N

-

-

FS

當前FS*16

0000FFFFH

Y

0

Y

B

U

Y

Y

N

-

-

GS

當前GS*16

0000FFFFH

Y

0

Y

B

U

Y

Y

N

-

-

     在分段管理機制中,每個段寄存器都配有段描述符高速緩沖寄存器,這些高速緩沖寄存器在實方式下仍發(fā)揮作用,只是內(nèi)容上與保護模式下有所不同。如上表所示,其中“Y”表示 “N”表示“B”表示字節(jié);“U”表示向上擴展,“W”表示以字方式操作堆棧。段基地址仍是 32位,其值是相應段寄存器值(段值)乘以16,在把段值裝載到段寄存器時刷新。由于其值是16位段值乘上16,所以在實模式下基地址實際上有效位只有20位。每個段的32位段界限都固定為0FFFFH,段屬性的許多位也是固定的。所謂固定是指在實方式下不可設置這些屬性值,只能繼續(xù)沿用保護方式下所設置的值。因此,在準備結束保護模式回到實模式之前,要通過加載一個合適的描述符選擇子(如實例代碼中的Normal選擇子)到有關段寄存器,以使得對應段描述符高速緩沖寄存器中含有合適的段界限和屬性。

 

也就是說,在實模式下裝載段寄存器并不會影響段告訴緩沖寄存器的值,比如段界限(其實在實模式也沒有必要改變,應為段界限一直都是0ffffh),這也就是為甚麼所有講保護模式的樹在講到有保護模式切換到實模式時都要加載一個normal選擇子的原因了。

應為必須在保護模式下設置好段高速緩沖寄存器的值,因為一旦到了實模式下就不能在改變了。

經(jīng)我試驗,對于normal的描述符,其最重要是段界限一定要設置為0ffffh,如果不是這樣,那莫在由保護模式跳轉到實模式后會發(fā)生錯誤(對于上述代碼如果把normal描述符的段界限改為別的的話,在跳轉后會產(chǎn)生死循環(huán)的現(xiàn)象,具體是什么原因現(xiàn)在還不明確,哪位高人知道一定要告訴我啊~~)。其次就是屬性的設置一定要設置為可讀可寫的,否則也會發(fā)生錯誤.

 

注意二:不能從32位代碼段返回實模式,而只能從16位代碼段返回。

原因:(書中說的)因為無法實現(xiàn)從32位代碼段返回時CS高速緩沖寄存器中的屬性符合實模式的要求(實模式不能改變段屬性)

對于這個解釋還是不太明確,如果哪位高人明白其中的來龍去脈的話,請一定在下面留個言,給我解釋一下,不勝感激.

 

posted on 2008-10-07 17:22 楊彬彬 閱讀(8075) 評論(4)  編輯 收藏 引用

FeedBack:
# re: 保護模式與實模式的切換 2008-12-02 16:01 嗖嗖嗖
你這段代碼能運行么?

我編譯后都無法運行,在保護模式下加載選擇子就出錯。  回復  更多評論
  
# re: 保護模式與實模式的切換 2009-02-21 15:34 TSQL863
在32位代碼段中,當用jmp selector:offset意圖從32位保護模式到16位的實模式,因jmp語句的作用是用將selector:offset當作CS:IP,因在保護模式情況下,當向一個段寄存器中裝入新值時,同時會將這個新值對應的描述符裝載到段寄存器對就的高速緩沖寄存器中,這樣,當將selector裝載到CS中時,同時也會查找這個selector對應的描述符,這個描述符根本沒被定定義過。  回復  更多評論
  
# re: 保護模式與實模式的切換 2009-02-21 15:37 TSQL863
CS段寄存器中可不能胡亂載入一個值的,保護檢測通不過  回復  更多評論
  
# re: 保護模式與實模式的切換 2009-02-21 22:56 TSQL863
我上面的回答是不對的,正確的理解應是這樣:
關于為什么不能從32位的保護模式直接跳轉到實模式,而要先跳轉到16位的保護模式,再從16位的保護模式跳轉到實模式的理解

;****************注意在此用normal選擇子對段寄存器進行填充******************************
mov ax, SelectorNormal
317 mov ds, ax
318 mov es, ax
319 mov fs, ax
320 mov gs, ax
321 mov ss, ax

從上述代碼可以看出:ds,es,fs,gs,ss這些段寄存器對應的高速緩沖寄存器中的內(nèi)容可以通過加載normal選擇子而得到更新,當向這幾個段寄存器中裝入normal選擇子時,會自動地將normal對應的描述符裝載到描述符高速緩沖寄存器中,因normal選擇子所對應的描述符的屬性符合實模式下的要求,即:段界限為ffffh,段屬性也是固定的。
但是:CS寄存器是不可以通過裝載normal來更新CS對應的高速緩沖寄存器的,為什么:你能寫出這樣的指令嗎:MOV CS,SelectorNormal,匯編中沒有這樣的指令。
即然這樣,那怎么可以讓CS對應的高速緩沖寄存器中的內(nèi)容符合實模式的要求呢?
方法是這樣的:因為CS的值只能通過jmp,call這樣的指令去改變,所以,定義一個16位的代碼段,這個代碼段的描述符定義為:段界限0ffffh,段屬性:存在的只執(zhí)行代碼段
假設這個代碼段的選擇子為:select32,偏移地址為:offsetaddr
用一條轉移指令向這段代碼跳轉:jmp select32:offsetaddr
因現(xiàn)在處于保護模式,所以jmp指令執(zhí)行的結果是將select32對應的描述符裝入cs對應的描述符高速緩沖寄存器中,這個描述符就是符合實模式要求的。這樣,CS段寄存器對應的高速緩沖寄存器中的內(nèi)容終于達到實模式的要求了,所以現(xiàn)在可以進行從保護模式到實模式跳轉了,再用一條jmp語句就可以從保護模式跳轉到實模式了。

  回復  更多評論
  

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久精品国产免费观看| 1024成人| 亚洲一区二区三区四区五区午夜| 日韩亚洲视频在线| 国产精品亚洲一区| 欧美成人高清| 国产精品美女久久久久久2018| 久久亚洲图片| 国产精品久久国产愉拍| 欧美成人精品激情在线观看| 国产精品久久999| 亚洲电影第三页| 欧美日韩亚洲三区| 噜噜噜久久亚洲精品国产品小说| 欧美午夜免费影院| 欧美激情亚洲另类| 国产午夜精品视频免费不卡69堂| 亚洲国产天堂网精品网站| 国产区欧美区日韩区| 亚洲美洲欧洲综合国产一区| 伊人成年综合电影网| 亚洲你懂的在线视频| 洋洋av久久久久久久一区| 久久久久久91香蕉国产| 午夜亚洲视频| 欧美精品黄色| 亚洲国产精品日韩| 亚洲国产网站| 毛片基地黄久久久久久天堂| 久久综合激情| 红桃视频国产精品| 亚洲欧美国产另类| 午夜精品久久久| 国产精品观看| aⅴ色国产欧美| 99国产精品99久久久久久| 蜜桃av噜噜一区| 美女主播精品视频一二三四| 国产三区精品| 午夜亚洲性色福利视频| 性视频1819p久久| 国产精品久久一区二区三区| 亚洲网站视频| 欧美影片第一页| 国产毛片一区| 性欧美xxxx大乳国产app| 欧美在线亚洲综合一区| 国产人成精品一区二区三| 亚洲一二三四久久| 午夜精品亚洲一区二区三区嫩草| 国产精品毛片va一区二区三区 | 欧美a一区二区| 免费成人高清视频| 亚洲成人在线观看视频| 久久人91精品久久久久久不卡| 久久久久在线观看| 激情av一区二区| 另类av导航| 亚洲国产日韩一区| 中文国产成人精品| 国产精品一区二区在线观看网站 | 日韩一区二区福利| 欧美日韩p片| 一本久久精品一区二区| 亚洲影院色在线观看免费| 国产精品视频免费观看| 久久丁香综合五月国产三级网站| 麻豆成人在线观看| 亚洲精品乱码久久久久| 欧美午夜理伦三级在线观看| 亚洲专区一区| 免费一级欧美片在线播放| 亚洲精品一区二区在线观看| 欧美精品乱人伦久久久久久| 国产精品99久久久久久人| 久久久精品国产免大香伊| 亚洲国产成人久久综合| 欧美日韩国产麻豆| 午夜在线精品| 亚洲第一精品夜夜躁人人爽| 亚洲一区二区在线视频| 一色屋精品亚洲香蕉网站| 欧美日韩精品国产| 久久精品亚洲精品| 99热这里只有成人精品国产| 久久午夜激情| 国产精品99久久不卡二区| 国产一区二区三区四区三区四| 美女精品视频一区| 一本色道久久| 欧美电影打屁股sp| 午夜精品影院在线观看| 亚洲韩国青草视频| 国产欧美韩日| 欧美日韩精品一区二区在线播放| 欧美一级大片在线免费观看| 亚洲三级性片| 免费观看30秒视频久久| 亚洲一区二区不卡免费| 亚洲国产成人在线| 国产精品影视天天线| 欧美激情在线| 久久久久久婷| 亚洲免费一级电影| 亚洲人www| 免费观看国产成人| 久久av一区二区三区漫画| 夜夜精品视频| 最新中文字幕亚洲| 一区二区三区在线观看国产| 国产精品久久久久久久久免费桃花| 久久午夜精品一区二区| 欧美夜福利tv在线| 亚洲一区二区精品视频| 亚洲精品欧美激情| 免费久久99精品国产自| 欧美中日韩免费视频| 亚洲免费视频中文字幕| 99re8这里有精品热视频免费| 尤物yw午夜国产精品视频明星| 国产欧美亚洲视频| 国产精品久久久久毛片大屁完整版| 欧美精品免费观看二区| 欧美成人免费视频| 久久艳片www.17c.com| 久久国产免费| 欧美在线观看一区二区| 午夜精品久久久久久久99热浪潮| 一区二区欧美国产| 一区二区三区四区五区视频| 亚洲精品国产拍免费91在线| 最近中文字幕mv在线一区二区三区四区| 狼人天天伊人久久| 麻豆国产精品va在线观看不卡| 久久久噜噜噜久久中文字幕色伊伊 | 久久久亚洲午夜电影| 久久国产精品一区二区三区| 欧美一区激情视频在线观看| 午夜精品久久久久久久久久久| 亚洲一区精彩视频| 亚洲欧美国内爽妇网| 亚洲欧美日本在线| 亚洲欧美国产视频| 久久大逼视频| 久久在线播放| 欧美激情免费观看| 亚洲精品久久久久久久久| 亚洲免费成人| 亚洲无限乱码一二三四麻| 亚洲欧美不卡| 久久丁香综合五月国产三级网站| 久久综合九九| 欧美区高清在线| 国产精品乱码一区二区三区| 国产欧美日韩亚洲精品| 狠狠色丁香婷婷综合久久片| 亚洲第一区在线观看| 亚洲美女av在线播放| 亚洲影视综合| 久久美女艺术照精彩视频福利播放| 老牛影视一区二区三区| 亚洲丰满少妇videoshd| 日韩亚洲不卡在线| 亚洲综合视频1区| 开心色5月久久精品| 欧美精选午夜久久久乱码6080| 国产精品国产三级国产aⅴ9色| 国产欧美日韩一区二区三区在线观看| 国产亚洲一区二区三区| 亚洲国产婷婷| 亚洲欧美日韩精品在线| 老牛国产精品一区的观看方式| 亚洲区一区二区三区| 亚洲欧美制服中文字幕| 欧美大片免费观看在线观看网站推荐| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 亚洲精品专区| 欧美在线亚洲在线| 亚洲日本电影在线| 午夜欧美视频| 欧美精品一区二区在线播放| 国产日韩一区| 一本色道久久加勒比精品| 久久精品国语| 99精品免费网| 美女黄毛**国产精品啪啪 | 亚洲欧洲在线一区| 西西人体一区二区| 欧美精品xxxxbbbb| 国产亚洲欧洲一区高清在线观看| 亚洲免费观看高清在线观看 | 国产麻豆综合| 一本色道久久综合亚洲精品不卡 | 国产精品日日摸夜夜添夜夜av| 亚洲激情av| 久久久亚洲综合| 亚洲一区二区三区免费视频| 欧美福利一区二区三区| 黑人巨大精品欧美一区二区小视频| 亚洲四色影视在线观看|