• <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>
            隨筆 - 8  文章 - 26  trackbacks - 0
            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(5)

            隨筆檔案

            文章分類

            文章檔案

            相冊(cè)

            C++語(yǔ)言

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

            關(guān)于從保護(hù)模式切換到實(shí)模式的相關(guān)說(shuō)明

             

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


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

            下面代碼有些宏定義沒(méi)貼出來(lái),應(yīng)該能看明白。

              1==========================================
              2; pmtest2.asm
              3; 編譯方法:nasm pmtest2.asm -o pmtest2.com
              4==========================================
              5
              6%include    "pm.inc"    ; 常量, 宏, 以及一些說(shuō)明
              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 結(jié)束
             23
             24GdtLen        equ    $ - LABEL_GDT    ; GDT長(zhǎng)度
             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    ; 進(jìn)入保護(hù)模式后顯示此字符串
             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 作準(zhǔn)備
            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    ; 關(guān)中斷
            127    cli
            128
            129    ; 打開(kāi)地址線A20
            130    in    al, 92h
            131    or    al, 00000010b
            132    out    92h, al
            133
            134    ; 準(zhǔn)備切換到保護(hù)模式
            135    mov    eax, cr0
            136    or    eax, 1
            137    mov    cr0, eax
            138
            139    ; 真正進(jìn)入保護(hù)模式
            140  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;在此由實(shí)模式切進(jìn)保護(hù)模式;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            141    jmp    dword SelectorCode32:0    ; 執(zhí)行這一句會(huì)把 SelectorCode32 裝入 cs, 并跳轉(zhuǎn)到 Code32Selector:0  處
            142
            143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            144
            145LABEL_REAL_ENTRY:        ; 從保護(hù)模式跳回到實(shí)模式就到了這里
            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    ; ┣ 關(guān)閉 A20 地址線
            155    out    92h, al        ; ┛
            156
            157    sti            ; 開(kāi)中斷
            158
            159    mov    ax, 4c00h    ; ┓
            160    int    21h        ; ┛回到 DOS
            161; END of [SECTION .s16]
            162
            163
            164[SECTION .s32]; 32 位代碼段. 由實(shí)模式跳入.
            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            ; 測(cè)試段選擇子
            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    ; 下面顯示一個(gè)字符串
            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 結(jié)束-----------------------------------------------------------
            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 結(jié)束----------------------------------------------------------
            245
            246
            247------------------------------------------------------------------------
            248; 顯示 AL 中的數(shù)字
            249; 默認(rèn)地:
            250;    數(shù)字已經(jīng)存在 AL 中
            251;    edi 始終指向要顯示的下一個(gè)字符的位置
            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 結(jié)束-------------------------------------------------------------
            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 結(jié)束---------------------------------------------------------
            304
            305SegCode32Len    equ    $ - LABEL_SEG_CODE32
            306; END of [SECTION .s32]
            307
            308
            30916 位代碼段. 由 32 位代碼段跳入, 跳出后到實(shí)模式
            310[SECTION .s16code]
            311ALIGN    32
            312[BITS    16]
            313LABEL_SEG_CODE16:
            314    ; 跳回實(shí)模式:
            315  ;****************注意在此用normal選擇子對(duì)段寄存器進(jìn)行填充******************************
            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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;在此由保護(hù)模式切進(jìn)實(shí)模式;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            328LABEL_GO_BACK_TO_REAL:
            329    jmp    0:LABEL_REAL_ENTRY    ; 段地址會(huì)在程序開(kāi)始處被設(shè)置成正確的值
            330
            331Code16Len    equ    $ - LABEL_SEG_CODE16
            332
            333; END of [SECTION .s16code]
            334

             

             

             

            注意一在由保護(hù)模式切換到實(shí)模式之前,用normal選擇子對(duì)段寄存器進(jìn)行填充。

            原因:

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

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

            段寄存器

            段基地址

            段界限(固定)

            段屬性(固定)

            存在性

            特權(quán)級(jí)

            已存取

            粒度

            擴(kuò)展方向

            可讀性

            可寫(xiě)性

            可執(zhí)行

            堆棧大小

            一致特權(quán)

            CS

            當(dāng)前CS*16

            0000FFFFH

            Y

            0

            Y

            B

            U

            Y

            Y

            Y

            -

            N

            SS

            當(dāng)前SS*16

            0000FFFFH

            Y

            0

            Y

            B

            U

            Y

            Y

            N

            W

            -

            DS

            當(dāng)前DS*16

            0000FFFFH

            Y

            0

            Y

            B

            U

            Y

            Y

            N

            -

            -

            ES

            當(dāng)前ES*16

            0000FFFFH

            Y

            0

            Y

            B

            U

            Y

            Y

            N

            -

            -

            FS

            當(dāng)前FS*16

            0000FFFFH

            Y

            0

            Y

            B

            U

            Y

            Y

            N

            -

            -

            GS

            當(dāng)前GS*16

            0000FFFFH

            Y

            0

            Y

            B

            U

            Y

            Y

            N

            -

            -

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

             

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

            應(yīng)為必須在保護(hù)模式下設(shè)置好段高速緩沖寄存器的值,因?yàn)橐坏┑搅藢?shí)模式下就不能在改變了。

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

             

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

            原因:(書(shū)中說(shuō)的)因?yàn)闊o(wú)法實(shí)現(xiàn)從32位代碼段返回時(shí)CS高速緩沖寄存器中的屬性符合實(shí)模式的要求(實(shí)模式不能改變段屬性)

            對(duì)于這個(gè)解釋還是不太明確,如果哪位高人明白其中的來(lái)龍去脈的話,請(qǐng)一定在下面留個(gè)言,給我解釋一下,不勝感激.

             

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

            FeedBack:
            # re: 保護(hù)模式與實(shí)模式的切換 2008-12-02 16:01 嗖嗖嗖
            你這段代碼能運(yùn)行么?

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

            ;****************注意在此用normal選擇子對(duì)段寄存器進(jìn)行填充******************************
            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這些段寄存器對(duì)應(yīng)的高速緩沖寄存器中的內(nèi)容可以通過(guò)加載normal選擇子而得到更新,當(dāng)向這幾個(gè)段寄存器中裝入normal選擇子時(shí),會(huì)自動(dòng)地將normal對(duì)應(yīng)的描述符裝載到描述符高速緩沖寄存器中,因normal選擇子所對(duì)應(yīng)的描述符的屬性符合實(shí)模式下的要求,即:段界限為ffffh,段屬性也是固定的。
            但是:CS寄存器是不可以通過(guò)裝載normal來(lái)更新CS對(duì)應(yīng)的高速緩沖寄存器的,為什么:你能寫(xiě)出這樣的指令嗎:MOV CS,SelectorNormal,匯編中沒(méi)有這樣的指令。
            即然這樣,那怎么可以讓CS對(duì)應(yīng)的高速緩沖寄存器中的內(nèi)容符合實(shí)模式的要求呢?
            方法是這樣的:因?yàn)镃S的值只能通過(guò)jmp,call這樣的指令去改變,所以,定義一個(gè)16位的代碼段,這個(gè)代碼段的描述符定義為:段界限0ffffh,段屬性:存在的只執(zhí)行代碼段
            假設(shè)這個(gè)代碼段的選擇子為:select32,偏移地址為:offsetaddr
            用一條轉(zhuǎn)移指令向這段代碼跳轉(zhuǎn):jmp select32:offsetaddr
            因現(xiàn)在處于保護(hù)模式,所以jmp指令執(zhí)行的結(jié)果是將select32對(duì)應(yīng)的描述符裝入cs對(duì)應(yīng)的描述符高速緩沖寄存器中,這個(gè)描述符就是符合實(shí)模式要求的。這樣,CS段寄存器對(duì)應(yīng)的高速緩沖寄存器中的內(nèi)容終于達(dá)到實(shí)模式的要求了,所以現(xiàn)在可以進(jìn)行從保護(hù)模式到實(shí)模式跳轉(zhuǎn)了,再用一條jmp語(yǔ)句就可以從保護(hù)模式跳轉(zhuǎn)到實(shí)模式了。

              回復(fù)  更多評(píng)論
              

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


            97久久国产亚洲精品超碰热| 99久久综合国产精品二区| 久久久久高潮综合影院| 亚洲精品无码专区久久久 | 久久久精品人妻无码专区不卡| 国产综合免费精品久久久| 国产色综合久久无码有码| 久久精品国产亚洲AV香蕉| 久久成人精品| 国产午夜精品久久久久免费视| 国产福利电影一区二区三区久久老子无码午夜伦不 | 午夜精品久久影院蜜桃| 久久婷婷五月综合色高清| 狠狠色丁香婷婷综合久久来来去| 亚洲人AV永久一区二区三区久久| www.久久热| 亚洲精品乱码久久久久久久久久久久 | 成人亚洲欧美久久久久| 久久久亚洲欧洲日产国码aⅴ | 偷窥少妇久久久久久久久| 青青草国产成人久久91网| 亚洲中文字幕无码久久2020| 久久99精品久久久久久秒播| 国产人久久人人人人爽| 精品久久亚洲中文无码| 亚洲国产成人久久综合一区77| 色偷偷888欧美精品久久久| 久久精品亚洲精品国产色婷| 怡红院日本一道日本久久| 亚洲AV无码久久| 狠狠色综合网站久久久久久久高清| 精品久久久无码中文字幕| 国产精品嫩草影院久久| 久久精品国产99国产精偷| 成人资源影音先锋久久资源网| 亚洲AV成人无码久久精品老人| 国产精品久久久久蜜芽| 久久乐国产综合亚洲精品| 亚洲精品成人网久久久久久| 免费一级做a爰片久久毛片潮| 久久无码国产|