《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > 匯編實模式與保護(hù)模式切換實例

匯編實模式與保護(hù)模式切換實例

2017-07-23
關(guān)鍵詞: 匯編語言

本文介紹兩個實現(xiàn)實模式與保護(hù)模式切換的實例,通過他們說明如何實現(xiàn)實模式與保護(hù)模式的切換,也說明保護(hù)模式下的80386及其編程。

<一>演示實模式和保護(hù)模式切換的實例(實例一)

實例一的邏輯功能是,以十六進(jìn)制數(shù)的形式顯示從內(nèi)存地址110000H開始的256個字節(jié)的值。本實例指定該內(nèi)存區(qū)域的目的僅僅是想說明切換到保護(hù)模式的必要性,因為在實模式下不能訪問該指定內(nèi)存區(qū)域,只有在保護(hù)模式下才能訪問到該指定區(qū)域。

本實例的具體實現(xiàn)步驟是:(1)作切換到保護(hù)方式的準(zhǔn)備;(2)切換到保護(hù)方式;(3)把指定內(nèi)存區(qū)域的內(nèi)容傳送到位于常規(guī)內(nèi)存的緩沖區(qū)中;(4)切換回實模式;(5)顯示緩沖區(qū)內(nèi)容。

1.包含文件

386保護(hù)模式匯編語言程序用到的包含文件如下所示,該包含文件在后面的程序中還要用到。

;名稱:386SCD.INC
;功能:符號常量等的定義
;----------------------------------------------------------------------------
;IFNDEF __386SCD_INC
;__386SCD_INC EQU 1
;----------------------------------------------------------------------------
.386P
;----------------------------------------------------------------------------
;打開A20地址線
;----------------------------------------------------------------------------
EnableA20 MACRO
push ax
in al,92h
or al,00000010b
out 92h,al
pop ax
ENDM
;----------------------------------------------------------------------------
;關(guān)閉A20地址線
;----------------------------------------------------------------------------
DisableA20 MACRO
push ax
in al,92h
and al,11111101b
out 92h,al
pop ax
ENDM
;----------------------------------------------------------------------------
;16位偏移的段間直接轉(zhuǎn)移指令的宏定義(在16位代碼段中使用)
;----------------------------------------------------------------------------
JUMP16 MACRO Selector,Offset
DB 0eah ;操作碼
DW Offset ;16位偏移量
DW Selector ;段值或段選擇子
ENDM
;----------------------------------------------------------------------------
;32位偏移的段間直接轉(zhuǎn)移指令的宏定義(在32位代碼段中使用)
;----------------------------------------------------------------------------
COMMENT <JUMP32>
JUMP32 MACRO Selector,Offset
DB 0eah ;操作碼
DD OFFSET
DW Selector ;段值或段選擇子
ENDM
<JUMP32>
;-------------------------------------------------
JUMP32 MACRO Selector,Offset
DB 0eah ;操作碼
DW OFFSET
DW 0
DW Selector ;段值或段選擇子
ENDM
;----------------------------------------------------------------------------
;16位偏移的段間調(diào)用指令的宏定義(在16位代碼段中使用)
;----------------------------------------------------------------------------
CALL16 MACRO Selector,Offset
DB 9ah ;操作碼
DW Offset ;16位偏移量
DW Selector ;段值或段選擇子
ENDM
;----------------------------------------------------------------------------
;32位偏移的段間調(diào)用指令的宏定義(在32位代碼段中使用)
;----------------------------------------------------------------------------
COMMENT <CALL32>
CALL32 MACRO Selector,Offset
DB 9ah ;操作碼
DD Offset
DW Selector ;段值或段選擇子
ENDM
<CALL32>
;-------------------------------------------------
CALL32 MACRO Selector,Offset
DB 9ah ;操作碼
DW Offset
DW 0
DW Selector ;段值或段選擇子
ENDM
;----------------------------------------------------------------------------
;存儲段描述符結(jié)構(gòu)類型定義
;----------------------------------------------------------------------------
Desc STRUC
LimitL DW 0 ;段界限(BIT0-15)
BaseL DW 0 ;段基地址(BIT0-15)
BaseM DB 0 ;段基地址(BIT16-23)
Attributes DB 0 ;段屬性
LimitH DB 0 ;段界限(BIT16-19)(含段屬性的高4位)
BaseH DB 0 ;段基地址(BIT24-31)
Desc ENDS
;----------------------------------------------------------------------------
;門描述符結(jié)構(gòu)類型定義
;----------------------------------------------------------------------------
Gate STRUC
OffsetL DW 0 ;32位偏移的低16位
Selector DW 0 ;選擇子
DCount DB 0 ;雙字計數(shù)
GType DB 0 ;類型
OffsetH DW 0 ;32位偏移的高16位
Gate ENDS
;----------------------------------------------------------------------------
;偽描述符結(jié)構(gòu)類型定義(用于裝入全局或中斷描述符表寄存器)
;----------------------------------------------------------------------------
PDesc STRUC
Limit DW 0 ;16位界限
Base DD 0 ;32位基地址
PDesc ENDS
;----------------------------------------------------------------------------
;任務(wù)狀態(tài)段結(jié)構(gòu)類型定義
;----------------------------------------------------------------------------
TSS STRUC
TRLink DW 0 ;鏈接字段
DW 0 ;不使用,置為0
TRESP0 DD 0 ;0級堆棧指針
TRSS0 DW 0 ;0級堆棧段寄存器
DW 0 ;不使用,置為0
TRESP1 DD 0 ;1級堆棧指針
TRSS1 DW 0 ;1級堆棧段寄存器
DW 0 ;不使用,置為0
TRESP2 DD 0 ;2級堆棧指針
TRSS2 DW 0 ;2級堆棧段寄存器
DW 0 ;不使用,置為0
TRCR3 DD 0 ;CR3
TREIP DD 0 ;EIP
TREFlag DD 0 ;EFLAGS
TREAX DD 0 ;EAX
TRECX DD 0 ;ECX
TREDX DD 0 ;EDX
TREBX DD 0 ;EBX
TRESP DD 0 ;ESP
TREBP DD 0 ;EBP
TRESI DD 0 ;ESI
TREDI DD 0 ;EDI
TRES DW 0 ;ES
DW 0 ;不使用,置為0
TRCS DW 0 ;CS
DW 0 ;不使用,置為0
TRSS DW 0 ;SS
DW 0 ;不使用,置為0
TRDS DW 0 ;DS
DW 0 ;不使用,置為0
TRFS DW 0 ;FS
DW 0 ;不使用,置為0
TRGS DW 0 ;GS
DW 0 ;不使用,置為0
TRLDTR DW 0 ;LDTR
DW 0 ;不使用,置為0
TRTrip DW 0 ;調(diào)試陷阱標(biāo)志(只用位0)
TRIOMap DW $+2 ;指向I/O許可位圖區(qū)的段內(nèi)偏移
TSS ENDS
;----------------------------------------------------------------------------
;存儲段描述符類型值說明
;----------------------------------------------------------------------------
ATDR EQU 90h ;存在的只讀數(shù)據(jù)段類型值
ATDW EQU 92h ;存在的可讀寫數(shù)據(jù)段屬性值
ATDWA EQU 93h ;存在的已訪問可讀寫數(shù)據(jù)段類型值
ATCE EQU 98h ;存在的只執(zhí)行代碼段屬性值
ATCER EQU 9ah ;存在的可執(zhí)行可讀代碼段屬性值
ATCCO EQU 9ch ;存在的只執(zhí)行一致代碼段屬性值
ATCCOR EQU 9eh ;存在的可執(zhí)行可讀一致代碼段屬性值
;----------------------------------------------------------------------------
;系統(tǒng)段描述符類型值說明
;----------------------------------------------------------------------------
ATLDT EQU 82h ;局部描述符表段類型值
ATTaskGate EQU 85h ;任務(wù)門類型值
AT386TSS EQU 89h ;可用386任務(wù)狀態(tài)段類型值
AT386CGate EQU 8ch ;386調(diào)用門類型值
AT386IGate EQU 8eh ;386中斷門類型值
AT386TGate EQU 8fh ;386陷阱門類型值
;----------------------------------------------------------------------------
;DPL值說明
;----------------------------------------------------------------------------
DPL0 EQU 00h ;DPL=0
DPL1 EQU 20h ;DPL=1
DPL2 EQU 40h ;DPL=2
DPL3 EQU 60h ;DPL=3
;----------------------------------------------------------------------------
;RPL值說明
;----------------------------------------------------------------------------
RPL0 EQU 00h ;RPL=0
RPL1 EQU 01h ;RPL=1
RPL2 EQU 02h ;RPL=2
RPL3 EQU 03h ;RPL=3
;----------------------------------------------------------------------------
;IOPL值說明
;----------------------------------------------------------------------------
IOPL0 EQU 0000h ;IOPL=0
IOPL1 EQU 1000h ;IOPL=1
IOPL2 EQU 2000h ;IOPL=2
IOPL3 EQU 3000h ;IOPL=3
;----------------------------------------------------------------------------
;其它常量值說明
;----------------------------------------------------------------------------
D32 EQU 40h ;32位代碼段標(biāo)志
GL EQU 80h ;段界限以4K為單位標(biāo)志
TIL EQU 04h ;TI=1(局部描述符表標(biāo)志)
VMFL EQU 00020000h ;VMF=1
VMFLW EQU 0002h
IFL EQU 00000200h ;IF=1
RFL EQU 00010000h ;RF=1(重啟動標(biāo)志,為1表示忽略調(diào)試故障)
RFLW EQU 0001h
NTL EQU 00004000h ;NT=1
;----------------------------------------------------------------------------
;分頁機(jī)制使用的常量說明
;----------------------------------------------------------------------------
PL EQU 1 ;頁存在屬性位
RWR EQU 0 ;R/W屬性位值,讀/執(zhí)行
RWW EQU 2 ;R/W屬性位值,讀/寫/執(zhí)行
USS EQU 0 ;U/S屬性位值,系統(tǒng)級
USU EQU 4 ;U/S屬性位值,用戶級
;----------------------------------------------------------------------------
;ENDIF
2.實例源程序
   實例一的源程序如下所示:
;名稱:ASM1.ASM
;功能:演示實方式和保護(hù)方式切換(切換到16位代碼段)
;----------------------------------------------------------------------------
INCLUDE 386SCD.INC
;----------------------------------------------------------------------------
;字符顯示宏指令的定義
;----------------------------------------------------------------------------
EchoCh MACRO ascii
mov ah,2
mov dl,ascii
int 21h
ENDM
;----------------------------------------------------------------------------
DSEG SEGMENT USE16 ;16位數(shù)據(jù)段
;----------------------------------------------------------------------------
GDT LABEL BYTE ;全局描述符表
DUMMY Desc <> ;空描述符
Code Desc <0ffffh,,,ATCE,,> ;代碼段描述符
DataS Desc <0ffffh,0,11h,ATDW,,> ;源數(shù)據(jù)段描述符
DataD Desc <0ffffh,,,ATDW,,> ;目標(biāo)數(shù)據(jù)段描述符
;----------------------------------------------------------------------------
GDTLen = $-GDT ;全局描述符表長度
VGDTR PDesc <GDTLen-1,> ;偽描述符
;----------------------------------------------------------------------------
Code_Sel = Code-GDT ;代碼段選擇子
DataS_Sel = Datas-GDT ;源數(shù)據(jù)段選擇子
DataD_Sel = DataD-GDT ;目標(biāo)數(shù)據(jù)段選擇子
;----------------------------------------------------------------------------
BufLen = 256 ;緩沖區(qū)字節(jié)長度
Buffer DB BufLen DUP(0) ;緩沖區(qū)
;----------------------------------------------------------------------------
DSEG ENDS ;數(shù)據(jù)段定義結(jié)束
;----------------------------------------------------------------------------
CSEG SEGMENT USE16 ;16位代碼段
ASSUME CS:CSEG,DS:DSEG
;----------------------------------------------------------------------------
Start PROC
mov ax,DSEG
mov ds,ax
;準(zhǔn)備要加載到GDTR的偽描述符
mov bx,16
mul bx
add ax,OFFSET GDT ;計算并設(shè)置基地址
adc dx,0 ;界限已在定義時設(shè)置好
mov WORD PTR VGDTR.Base,ax
mov WORD PTR VGDTR.Base+2,dx
;設(shè)置代碼段描述符
mov ax,cs
mul bx
mov WORD PTR Code.BaseL,ax ;代碼段開始偏移為0
mov BYTE PTR Code.BaseM,dl ;代碼段界限已在定義時設(shè)置好
mov BYTE PTR Code.BaseH,dh
;設(shè)置目標(biāo)數(shù)據(jù)段描述符
mov ax,ds
mul bx ;計算并設(shè)置目標(biāo)數(shù)據(jù)段基址
add ax,OFFSET Buffer
adc dx,0
mov WORD PTR DataD.BaseL,ax
mov BYTE PTR DataD.BaseM,dl
mov BYTE PTR DataD.BaseH,dh
;加載GDTR
lgdt QWORD PTR VGDTR
cli ;關(guān)中斷
EnableA20 ;打開地址線A20
;切換到保護(hù)方式
mov eax,cr0
or eax,1
mov cr0,eax
;清指令預(yù)取隊列,并真正進(jìn)入保護(hù)方式
JUMP16 Code_Sel,<OFFSET Virtual>
Virtual: ;現(xiàn)在開始在保護(hù)方式下運行
mov ax,DataS_Sel
mov ds,ax ;加載源數(shù)據(jù)段描述符
mov ax,DataD_Sel
mov es,ax ;加載目標(biāo)數(shù)據(jù)段描述符
cld
xor si,si
xor di,di ;設(shè)置指針初值
mov cx,BufLen/4 ;設(shè)置4字節(jié)為單位的緩沖區(qū)長度
repz movsd ;傳送
;切換回實模式
mov eax,cr0
and al,11111110b
mov cr0,eax
;清指令預(yù)取隊列,進(jìn)入實方式
JUMP16 <SEG Real>,<OFFSET Real>
Real: ;現(xiàn)在又回到實方式
DisableA20
sti
mov ax,DSEG
mov ds,ax
mov si,OFFSET Buffer
cld
mov bp,BufLen/16
NextLine: mov cx,16
NextCh: lodsb
push ax
shr al,1
call ToASCII
EchoCh al
pop ax
call ToASCII
EchoCh al
EchoCh ' '
loop NextCh
EchoCh 0dh
EchoCh 0ah
dec bp
jnz NextLine
mov ax,4c00h
int 21h
Start ENDP
;----------------------------------------------------------------------------
ToASCII PROC
and al,0fh
add al,90h
daa
adc al,40h
daa
ret
ToASCII ENDP
;----------------------------------------------------------------------------
CSEG ENDS ;代碼段定義結(jié)束
;----------------------------------------------------------------------------
END Start

3.關(guān)于實例步驟的注釋

在源程序的開頭首先包含了文件“386SCD.INC”,在此包含文件中定義了保護(hù)模式程序設(shè)計要用到的一些結(jié)構(gòu)、宏及常量。下面對各實現(xiàn)步驟作些說明。

(1)切換到保護(hù)方式的準(zhǔn)備工作

在從實模式切換到保護(hù)模式之前,必須作必要的準(zhǔn)備。準(zhǔn)備工作的內(nèi)容根據(jù)實際而定。最起碼的準(zhǔn)備工作是建立合適的全局描述符表,并使用GDTR指向該GDT。因為在切換到保護(hù)方式時,至少要把代碼段的選擇子裝載到CS,所以GDT中至少含有代碼段的描述符。

從本實例源程序可見,全局描述符表GDT僅有四個描述符:第一個是空描述符;第二個是代碼段描述符;第三個和第四個分別為源數(shù)據(jù)段及目標(biāo)數(shù)據(jù)段描述符。本實例各描述符中的段界限是在定義時設(shè)置的,并且除偽描述符VGDTR中的界限按GDT的實際長度設(shè)置外,各使用的存儲段描述符的界限都規(guī)定為0FFFFH。另外,描述符中的段屬性也根據(jù)所描述段的類型被預(yù)置,各屬性的定義在包含文件386SCD.INC中均有說明。從屬性值可知,這三個段都是16位段。

由于在切換到保護(hù)方式后就要引用GDT,所以在切換到保護(hù)方式前必須裝載GDTR。實例中使用如下指令裝載GDTR:

LGDT QWORD PTR VGDTR

該指令的功能是把存儲器中的偽描述符VGDTR裝入到全局描述符表寄存器GDTR中。偽描述符VGDTR的結(jié)構(gòu)如前所述結(jié)構(gòu)類型PDESC所示,低字是以字節(jié)位單位的全局描述符表段的界限,高雙字為描述符表段的線性基地址(本實例不啟用分頁機(jī)制,所以線性地址等同于物理地址)。本實例中未涉及到局部描述符表及中斷描述符表,后面的文章將作詳細(xì)說明。

(2)由實模式切換到保護(hù)模式

在做好準(zhǔn)備后,從實模式切換到保護(hù)模式并不難。原則上只要把控制寄存器CR0中的PE位置1即可。本實例采用如下三條指令設(shè)置PE位:

   mov eax,cr0
   or eax,1
   mov cr0,eax

實際情況要比這復(fù)雜些。執(zhí)行上面的三條指令后,處理器轉(zhuǎn)入保護(hù)模式,但CS中的內(nèi)容還是實模式下代碼段的段值,而不是保護(hù)模式下代碼段的選擇子,所以在取指令之前得把代碼段的選擇子裝入CS。為此,緊接著這三條指令,安排一條如下所示的段間轉(zhuǎn)移指令:

JUMP16 Code_Sel ,< OFFSET Virtual >

這條段間轉(zhuǎn)移指令 在實模式下被預(yù)取并在保護(hù)方式下被執(zhí)行 。利用這條段間轉(zhuǎn)移指令可把保護(hù)模式下代碼段的選擇子裝入CS,同時也刷新指令預(yù)取隊列。從此真正進(jìn)入保護(hù)模式。

(3)由保護(hù)模式切換到實模式

在80386上,從保護(hù)模式切換到實模式的過程類似于從實模式切換到保護(hù)模式。原則上只要把控制寄存器CR0中的PE位清0即可。實際上,在此之后也要安排一條段間轉(zhuǎn)移指令,一方面清指令預(yù)取隊列,另一方面把實模式下代碼段的段值送CS。 這條段間轉(zhuǎn)移指令在保護(hù)方式下被預(yù)取并在實模式下被執(zhí)行 。

(4)保護(hù)模式下的數(shù)據(jù)傳送

首先,把源數(shù)據(jù)段和目標(biāo)數(shù)據(jù)段的選擇子裝入DS和ES寄存器,這兩個描述符已在實模式下設(shè)置好,把選擇子裝入段寄存器就意味著把包括基地址在內(nèi)的段信息裝入到了段描述符高速緩沖寄存器。然后設(shè)置指針寄存器SI和DI的初值,也設(shè)置計數(shù)器CX的初值。根據(jù)預(yù)置的段屬性,在保護(hù)方式下,代碼段也僅是16位段,串操作指令只使用16位的SI、DI和CX等寄存器。最后利用串操作指令實施傳送。

(5)顯示緩沖區(qū)中的內(nèi)容

由于緩沖區(qū)在常規(guī)內(nèi)存中,所以在實模式下根據(jù)要求按十六進(jìn)制顯示其內(nèi)容是很容易理解的,這里就不再多說。

4.內(nèi)存映象

在源程序中沒有把GDT作為一個單獨的段對待,但在進(jìn)入保護(hù)方式后,它是一個獨立的段。從對代碼段和源數(shù)據(jù)段描述符所賦的基地址和段界限值可見,代碼段和數(shù)據(jù)段有部分覆蓋。盡管這樣做不利于代碼和數(shù)據(jù)的安全,但如果需要,這樣做是可行的。本實例運行時的內(nèi)存映象如下圖所示。


5.特別說明

作為第一個實模式和保護(hù)模式切換的例子,本實例作了大量的簡化處理。

通常,由實模式切換到保護(hù)模式的準(zhǔn)備工作還應(yīng)包含建立中斷描述符表。但本實例沒有建立中斷描述符表。為此,要求整個過程在關(guān)中斷的情況下進(jìn)行;要求不使用軟中斷指令;假設(shè)不發(fā)生任何異常。否則會導(dǎo)致系統(tǒng)崩潰。

本實例未使用局部描述符表,所以在進(jìn)入保護(hù)模式后沒有設(shè)置局部描述符表寄存器LDTR。為此,在保護(hù)模式下使用的段選擇子都指定GDT中的描述符。

本實例未定義保護(hù)模式下的堆棧段,GDT中沒有堆棧段描述符,在保護(hù)模式下沒有設(shè)置SS,所以在保護(hù)方式下沒有涉及堆棧操作的指令。

本實例各描述符特權(quán)級DPL和各選擇子的請求特權(quán)級RPL均為0,在保護(hù)方式下運行時的當(dāng)前特權(quán)級CPL也是0。

本實例沒有采用分頁管理機(jī)制,也即CR0中的PG位為0,線性地址就是存儲單元的物理地址。

6.打開和關(guān)閉地址線A20

PC及其兼容機(jī)的第21根地址線(A20)較特殊,計算機(jī)系統(tǒng)中一般安排一個 “門”控制該地址線是否有效。為了訪問地址在1M以上的存儲單元,應(yīng)先打開控制地址線A20的“門”。這種設(shè)置與實模式下只使用最低端的1M字節(jié)存儲空間有關(guān),與處理器是否工作在實模式或保護(hù)方式無關(guān),即使在關(guān)閉地址線A20時,也可進(jìn)入保護(hù)模式。

如何打開和關(guān)閉地址線A20與計算機(jī)系統(tǒng)的具體設(shè)置有關(guān)。在本文中介紹的包含文件386SCD.INC中定義了兩個宏,打開地址線A20的宏EnableA20和關(guān)閉地址線A20的宏DisableA20,此兩個宏指令在一般的PC兼容機(jī)上都是可行的。

<二>演示32位代碼段和16位代碼段切換的實例(實例二)

實例二的邏輯功能是,以十六進(jìn)制數(shù)和ASCII字符兩種形式顯示從內(nèi)存地址100000H開始的16個字節(jié)的內(nèi)容。

從功能上看,本實例類似于實例一,但在實現(xiàn)方法上卻有了改變,它更能反映出實模式和保護(hù)模式切換的情況。具體實現(xiàn)步驟是:

(1)作切換到保護(hù)方式的準(zhǔn)備;

(2)切換到保護(hù)方式的一個32位代碼段;

(3)把指定內(nèi)存區(qū)域的內(nèi)容以字節(jié)為單位,轉(zhuǎn)換成對應(yīng)的十六進(jìn)制數(shù)的ASCII碼,并直接填入顯示緩沖區(qū)實現(xiàn)顯示;

(4)再變換到保護(hù)方式下的一個16位代碼段;

(5)把指定內(nèi)存區(qū)域的內(nèi)容直接作為ASCII碼填入顯示緩沖區(qū)中實現(xiàn)顯示;

(6)切換回實模式。

1.實例二源程序

實例二的源程序如下所示:

;名稱:ASM2.ASM
;功能:演示實方式和保護(hù)方式切換(切換到32位代碼段)
;----------------------------------------------------------------------------
INCLUDE 386SCD.INC
;----------------------------------------------------------------------------
DSEG SEGMENT USE16 ;16位數(shù)據(jù)段
;----------------------------------------------------------------------------
GDT LABEL BYTE ;全局描述符表
DUMMY Desc <> ;空描述符
Normal Desc <0ffffh,,,ATDW,,> ;規(guī)范段描述符
Code32 Desc <C32Len-1,,,ATCE,D32,> ;32位代碼段描述符
Code16 Desc <0ffffh,,,ATCE,,> ;16位代碼段描述符
DataS Desc <DataLen-1,0,10h,ATDR,,> ;源數(shù)據(jù)段描述符
DataD Desc <3999,8000h,0bh,ATDW,,> ;顯示緩沖區(qū)描述符
Stacks Desc <StackLen-1,,,ATDW,,> ;堆棧段描述符
;----------------------------------------------------------------------------
GDTLen = $-GDT ;全局描述符表長度
VGDTR PDesc <GDTLen-1,> ;偽描述符
;----------------------------------------------------------------------------
SaveSP DW ? ;用于保存SP寄存器
SaveSS DW ? ;用于保存SS寄存器
;----------------------------------------------------------------------------
Normal_Sel = Normal-GDT ;規(guī)范段描述符選擇子
Code32_Sel = Code32-GDT ;32位代碼段選擇子
Code16_Sel = Code16-GDT ;16位代碼段選擇子
DataS_Sel = Datas-GDT ;源數(shù)據(jù)段選擇子
DataD_Sel = DataD-GDT ;目標(biāo)數(shù)據(jù)段選擇子
Stacks_Sel = Stacks-GDT ;堆棧段描述符選擇子
;----------------------------------------------------------------------------
DataLen = 16
;----------------------------------------------------------------------------
DSEG ENDS ;數(shù)據(jù)段定義結(jié)束
;----------------------------------------------------------------------------
StackSeg SEGMENT PARA STACK USE16
StackLen = 256
DB StackLen DUP(0)
StackSeg ENDS
;----------------------------------------------------------------------------
CSEG1 SEGMENT USE16 'REAL' ;16位代碼段
ASSUME CS:CSEG1,DS:DSEG
;----------------------------------------------------------------------------
Start PROC
mov ax,DSEG
mov ds,ax
;準(zhǔn)備要加載到GDTR的偽描述符
mov bx,16
mul bx
add ax,OFFSET GDT ;計算并設(shè)置基地址
adc dx,0 ;界限已在定義時設(shè)置好
mov WORD PTR VGDTR.Base,ax
mov WORD PTR VGDTR.Base+2,dx
;設(shè)置32位代碼段描述符
mov ax,CSEG2
mul bx
mov WORD PTR Code32.BaseL,ax
mov BYTE PTR Code32.BaseM,dl
mov BYTE PTR Code32.BaseH,dh
;設(shè)置16位代碼段描述符
mov ax,CSEG3
mul bx
mov WORD PTR Code16.BaseL,ax ;代碼段開始偏移為0
mov BYTE PTR Code16.BaseM,dl ;代碼段界限已在定義時設(shè)置好
mov BYTE PTR Code16.BaseH,dh
;設(shè)置堆棧段描述符
mov ax,ss
mov WORD PTR SaveSS,ax
mov WORD PTR SaveSP,sp
mov ax,StackSeg
mul bx
mov WORD PTR Stacks.BaseL,ax
mov BYTE PTR Stacks.BaseM,dl
mov BYTE PTR Stacks.BaseH,dh
;加載GDTR
lgdt QWORD PTR VGDTR
cli ;關(guān)中斷
EnableA20 ;打開地址線A20
;切換到保護(hù)方式
mov eax,cr0
or al,1
mov cr0,eax
;清指令預(yù)取隊列,并真正進(jìn)入保護(hù)方式
JUMP16 Code32_Sel,<OFFSET SPM32>
ToReal: ;現(xiàn)在又回到實方式
mov ax,DSEG
mov ds,ax
mov sp,SaveSP
mov ss,SaveSS
DisableA20
sti
mov ax,4c00h
int 21h
Start ENDP
;----------------------------------------------------------------------------
CSEG1 ENDS ;代碼段定義結(jié)束
;----------------------------------------------------------------------------
CSEG2 SEGMENT USE32 'PM32'
ASSUME CS:CSEG2
;----------------------------------------------------------------------------
SPM32 PROC
mov ax,Stacks_Sel
mov ss,ax
mov esp,StackLen
mov ax,DataS_Sel
mov ds,ax
mov ax,DataD_Sel
mov es,ax
xor esi,esi
xor edi,edi
mov ecx,DataLen
cld
Next: lodsb
push ax
CALL ToASCII
mov ah,7
shl eax,16
pop ax
shr al,4
CALL ToASCII
mov ah,7
stosd
mov al,20h
stosw
loop Next
JUMP32 Code16_Sel,<OFFSET SPM16>
SPM32 ENDP
;----------------------------------------------------------------------------
ToASCII PROC
and al,00001111b
add al,30h
cmp al,39h
jbe Isdig
add al,7
IsDig: ret
ToASCII ENDP
;----------------------------------------------------------------------------
C32Len = $
;----------------------------------------------------------------------------
CSEG2 ENDS
;----------------------------------------------------------------------------
CSEG3 SEGMENT USE16 'PM16'
ASSUME CS:CSEG3
;----------------------------------------------------------------------------
SPM16 PROC
xor si,si
mov di,DataLen*3*2
mov ah,7
mov cx,DataLen
AGain: lodsb
stosw
loop AGain
mov ax,Normal_sel
mov ds,ax
mov es,ax
mov ss,ax
mov eax,cr0
and al,11111110b
mov cr0,eax
jmp FAR PTR ToReal
SPM16 ENDP
;----------------------------------------------------------------------------
CSEG3 ENDS
;----------------------------------------------------------------------------
END Start

2.關(guān)于實現(xiàn)步驟的注釋

(1)切換到保護(hù)模式的準(zhǔn)備工作

建立全局描述符表,這里的全局描述符表含有兩個16位數(shù)據(jù)段的描述符、一個16位代碼段的描述符和一個16位的堆棧段描述符。此外,GDT中還有一個32位的代碼段描述符,描述32位代碼段,該描述符的屬性字段中的D位為1。

(2)由實模式切換到保護(hù)模式

由實模式切換到保護(hù)模式32位代碼段的方法與切換到16位代碼段的方法相同。由保護(hù)模式16位代碼段切換回實模式的方法與實例一相似。

在保護(hù)模式下,通過如下直接段間轉(zhuǎn)移指令從32位代碼段切換到16位代碼段:

JUMP32 Code16_Sel ,< OFFSET SPM16 >

從該宏指令的定義可知,該轉(zhuǎn)移指令含48位指針,其高16位是16位代碼段的選擇子,低32位是16位代碼段的入口偏移。 該指令在32位方式下預(yù)取并執(zhí)行 。由于在32位方式下執(zhí)行,所以要使用48位指針。

(3)顯示指定內(nèi)存區(qū)域的內(nèi)容

在本實例中,采用直接寫顯示緩沖區(qū)的方法實現(xiàn)顯示。假設(shè)顯示緩沖區(qū)的開始物理地址是0B8000H, 3號文本顯示模式,在屏幕的第一行進(jìn)行顯示。

3.特別說明

本實例在保護(hù)方式下使用了涉及堆棧操作的指令,因此建立了一個16位的保護(hù)模式下的堆棧段。

本實例仍作了大量的簡化處理。如:沒有建立IDT和LDT等,各特權(quán)級均是0。也沒有采用分頁管理機(jī)制。

從本實例的GDT中可見,兩個數(shù)據(jù)段的界限都是根據(jù)實際大小而設(shè)置的。從源程序代碼段CSEG3可見,在切換到實模式之前,把一個指向似乎沒有用的數(shù)據(jù)段的描述符Normal的選擇子裝載到DS和ES。這是為什么呢?

實模
式下
段描
述符
高速
緩沖
寄存
器的
內(nèi)容    段寄存器    段基地址    段界限(固定)    段屬性(固定)    

存在性    特權(quán)級    已存取    粒度    擴(kuò)展方向    可讀性    可寫性    可執(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ī)制一文中已介紹過,每個段寄存器都配有段描述符高速緩沖寄存器,這些高速緩沖寄存器在實方式下仍發(fā)揮作用,只是內(nèi)容上與保護(hù)模式下有所不同。如上表所示,其中“Y”表示“是”; “N”表示“否”;“B”表示字節(jié);“U”表示向上擴(kuò)展,“W”表示以字方式操作堆棧。段基地址仍是 32位,其值是相應(yīng)段寄存器值(段值)乘以16,在把段值裝載到段寄存器時刷新。由于其值是16位段值乘上16,所以在實模式下基地址實際上有效位只有20位。每個段的32位段界限都固定為0FFFFH,段屬性的許多位也是固定的。所謂固定是指在實方式下不可設(shè)置這些屬性值,只能繼續(xù)沿用保護(hù)方式下所設(shè)置的值。因此,在準(zhǔn)備結(jié)束保護(hù)模式回到實模式之前,要通過加載一個合適的描述符選擇子到有關(guān)段寄存器,以使得對應(yīng)段描述符高速緩沖寄存器中含有合適的段界限和屬性。本實例GDT中的描述符Normal就是這樣一個描述符,在返回實模式之前把對應(yīng)選擇子Normal_Sel加載到DS和ES就是此目的。由于SS段描述符中的內(nèi)容已符合實模式的需要,所以盡管也改變了SS,但不需要重新加載SS(本實例中重新加載了SS,這除了稍增加運行時間外,并沒有什么壞處)。16位代碼段描述符中的內(nèi)容也符合實模式的需要,所以在通過16位代碼段返回實模式時,CS段描述符中的內(nèi)容也符合實模式的要求。需要注意的是,不能從32位代碼段返回實模式,這是因為無法實現(xiàn)從32位代碼段返回時CS高速緩沖寄存器中的屬性符合實模式的要求(實模式不能改變段屬性)。順便說以下,實例一中的描述符都是符合實模式要求的。段描述符高速緩沖寄存器中含有合適的段界限

4.關(guān)于32位代碼段程序設(shè)計的說明

在32位代碼段中,缺省的操作數(shù)大小是32位,缺省的存儲單元地址大小是32位。由于串操作指令使用的指針寄存器是ESI和EDI,LOOP指令使用的計數(shù)器是ECX,所以,在代碼段CSEG2中,為了使用串操作指令,對ESI和EDI等寄存器賦初值。請比較代碼段CSEG3中的相關(guān)片段和實例一中的相關(guān)片段,它們是16位代碼段。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 欧美一级特黄aaaaaa大片在线观看 | 午夜视频h | 日韩av一二三四区 | 亚洲最大成人在线视频 | 国产精品密蕾丝袜 | 男女啪动最猛动态图 | 男女边吃奶边摸边做边爱视频 | 日韩欧美在线视频免费观看 | а天堂中文地址在线 | 国产精品尤物 | 有一婷婷色 | 国内自拍青青草 | 中文字幕日韩一区二区三区 | 91大尺度 | 美女啪啪网站 | 国产高清一区二区三区 | 国产精品精品久久久 | 欧美激情久久久久久 | 成人免费毛片片v | 国产午夜性春猛交ⅹxxx | 波多野结衣视频一区二区 | 国产精品一色哟哟哟 | 超碰在线伊人 | 成人在线高清视频 | 国产日韩欧美视频免费看 | 97超碰在线资源 | 色哟哟在线观看视频 | 激情午夜av | 久久天堂综合亚洲伊人hd妓女 | 国产精品丝袜高跟鞋 | 亚洲91在线| 亚洲依依 | 无码精品一区二区三区在线 | 一二区视频| 精品国产乱码久久久久久影片 | 国产欧美日韩精品在线 | 中国黄色毛片视频 | 天天干天天射天天爽 | 久久久情 | 亚洲成人精品久久 | 欧洲成人一区二区 | 无码毛片aaa在线 | 国产精品海角社区 | 成人av片无码免费网站 | 久久综合九色综合欧美狠狠 | 99这里精品 | 成人特级片 | 中文字幕亚洲综合久久综合 | 欧美精品色视频 | 日韩精品成人 | 亚洲三级黄色片 | 97在线看免费观看视频在线观看 | 冲田杏梨av一区二区三区 | 香蕉大久久 | 精品国产乱码久久久久久1区2区 | 四虎精品8848ys一区二区 | 一级黄色的毛片 | 日本啪啪网| 高清av网站 | 日本女人黄色片 | 免费观看国产精品 | 北条麻妃在线一区二区免费播放 | 青青草在线免费 | 377人体粉嫩噜噜噜 精品久久久久久无码中文野结衣 | 美腿丝袜高跟三级视频 | 日韩亚州 | 日韩最新中文字幕 | 在线xxxxx| 毛片基地黄久久久久久天堂 | 中文字字幕在线中文无码 | 大又大又粗又硬又爽少妇毛片 | 国产伦孑沙发午休精品 | 97视频免费看 | 国产三级视频在线播放 | 免费jizz| 精品1卡二卡三卡四卡老狼 国内大量偷窥精品视频 | 欧美综合视频在线观看 | 蜜桃av蜜臀av色欲av麻 | 日本大尺度吃奶做爰视频 | 亚洲成a人v欧美综合天堂下载 | 久久99国产综合精品 | www.亚洲色图 | 大学生a做爰免费观看 | 亚洲天堂五月 | 国产一三四2021不卡 | 欧美日韩久久久 | 国产色产综合色产在线视频 | 日韩人妻无码一区二区三区久久99 | 欧美日韩国产免费 | 欧美中文字幕一区二区三区 | 一级中文字幕 | 亚洲综合精品在线 | 99re6在线视频 | 毛片毛片女人毛片毛片 | 亚洲成人一区二区 | 欧美人与性囗牲恔配 | 两人做人爱费视频午夜 | 国产精品美女久久久久av爽 | 日本精品一区二区三区四区 | 自拍偷拍第一页 | 日韩欧美一区视频 | 国产精品毛片一区二区在线看舒淇 | √天堂资源在线中文8在线最新版 | 亚洲高清免费视频 | 国产精品自产拍在线观看 | 久久66热人妻偷产精品 | 亚洲天堂网站在线 | 亚洲天堂毛片 | 免费国产女王调教在线视频 | 国产一级80毛片古装片 | 精品国产乱码久久久久久图片 | 日韩午夜一区二区在线精品三级伦理 | 国产又大又粗又猛又爽的视频 | 国产激情视频一区二区三区 | 亚洲精品午夜久久久 | 久青草免费视频 | 黄色资源在线观看 | 国产精品视频区 | 国产色诱视频 | 亚洲国产精品区 | 日韩精品亚洲人成在线观看 | 一级做性色α爱片久久毛片色 | 高h喷水荡肉少妇爽多p视频 | 日本无遮挡吸乳呻吟视频 | 午夜精品在线免费观看 | 嫩草影院黄 | 日韩高清黄色 | 欧美日韩精品一区二区在线视频 | 午夜激情视频在线 | 日韩成人av网 | 中国女人内谢69xxxxxa片 | 九色porny丨国产首页在线 | 欧美成人午夜精品免费 | 爽好多水快深点91 | 亚洲精品乱码久久久久久麻豆不卡 | 极品美女av| 西方av在线 | 伊朗做爰xxxⅹ性视频 | 国产成人免费观看久久久 | 日本一级大黄毛片基地 | 国产午夜不卡av免费 | 婚后打屁股高h1v1调教 | xnxx国产精品hd | 国产白丝jk捆绑束缚调教视频 | 91免费视频入口 | 捏胸吃奶吻胸免费视频大软件 | 91亚洲精品久久久久图片蜜桃 | 又爽又黄又无遮挡的视频 | 久久久久久久久久影视 | 久久99成人 | 久久久久一级 | 无码av中文字幕久久专区 | 精品国产91 | 北条麻妃在线一区二区 | 国产小呦泬泬99精品 | 婷婷丁香在线 | 亚洲日韩视频免费观看 | 成人亚洲精品久久久久 | 国精品人妻无码一区二区三区喝尿 | 日韩精品视频在线看 | av大片在线无码免费 | 9人人澡人人爽人人精品 | 欧美激情综合五月色丁香小说 | 国产精品www老牛影视 | 欧美性生活精品 | 国产福利片在线观看 | 伊人精品久久 | 黄色应用在线观看 | 在线欧美国产 | 国产综合色视频 | 午夜视频在线 | 免费看亚洲 | 污片免费观看 | 天天插天天 | 好吊视频一区二区三区 | 国产免费黄色大片 | 中日韩免费视频 | 精品一区二区三区在线观看视频 | 欧美精品一区在线 | 国产cdts系列另类在线观看 | 麻豆国产一区二区三区 | 日韩a∨精品日韩在线观看 免费特级黄毛片 | 欧美网黄 | 99久久精品国产一区二区三区 | 午夜综合网 | 亚洲国产综合一区 | 中文字幕视频网 | 国产老女人乱淫免费可以 | 国产高清999 | 新婚之夜疯狂做爰视频一区二区 | 日韩视频在线免费 | 日日摸日日碰夜夜爽av | 黄瓜视频91 | 波多野结衣办公室双飞 | 顶臀精品视频www | 日噜| 漂亮人妻洗澡被公强 日日躁 | 91丨九色丨蝌蚪丰满 | 久久黄色视 | 午夜爽爽爽爽技女8888 | 成人在线免费播放 | 欧美一级一区 | 国内精品久久久久影院日本资源 | 少妇特殊按摩高潮惨叫无码 | 夜夜夜影院 | 小早川怜子一区二区三区 | 丰满少妇高潮久久三区 | 日韩av片免费观看 | 羞羞视频在线观看免费观看 | 国内精品在线观看视频 | 欧美一区久久 | 久久99热这里只频精品6 | 婷婷五月在线视频 | 羞羞视频网址 | 国产99久久精品一区二区永久免费 | 国产91在线播放九色快色 | 欧美一级做a爰片免费视频 欧美一级做性受免费大片免费 | 一区二区三区四区日韩 | 久久综合给合久久狠狠狠97色69 | 特级西西人体444www高清大胆 | 日韩黄色录像 | 校园春色综合网 | 太深太粗太爽太猛了视频免费观看 | 免费成人高清在线视频 | 国产精品久久久久久久久久免费看 | 黄色一级片免费播放 | 欧美又粗又长又爽做受 | 国产精品乱码人妻一区二区三区 | 中文日韩在线观看 | 四色米奇777狠狠狠me | www.欧美色图| 欧美大胆少妇bbw | 色婷婷亚洲综合 | 美女隐私视频黄www曰本 | 国产精品123 | 亚洲成a人片在线 | 国产乱对白刺激视频 | 国产精品一区二区三区四区五区 | 色男人在线 | 久草在线视频资源站 | 97免费视频在线 | 午夜久久久久 | 99er在线| 欧美精品欧美极品欧美激情 | 看全色黄大色大片免费久久 | 成人免费在线观看 | 男人天堂a | 久久国产精品99久久人人澡 | 亚洲精品亚洲 | 免费一级全黄裸片 | 99久热在线精品996热是什么 | se94se亚洲精品setu | 久久久精品国产 | 丰满人妻一区二区三区免费视频 | 国产精品国色综合久久 | 人人澡澡人人 | 大陆明星乱淫(高h)小说 | 欧美一级做a爰片久久高潮 欧美一级做a爰片免费视频 | 色在线视频观看 | 亚洲欧美色一区二区三区 | 欧美一级淫片免费 | 天堂网www网在线最新版 | 澳门黄色网| 青草综合 | 99国产精品免费播放 | 大陆性猛交xxxx乱大交 | 欧美成人天堂 | 91亚洲精品久久久蜜桃借种 | 亚洲欧美自拍另类 | 大伊香蕉精品一区视频在线 | 日本在线网站 | 日本波多野结衣在线 | 国产一区二区三区久久久久久久久 | 91亚洲精品国产成人 | 日韩欧美在线观看一区二区 | 噼里啪啦在线看免费观看视频 | 亚洲精品一区二区三区四区五区 | 日本大乳高潮xxxxx | 久久久久久久无码高潮 | 五月丁香色综合久久4438 | 欧美性猛交一区二区三区精品 | 青青精品视频 | 色啪视频 | 91午夜视频| 欧美亚洲国产成人一区二区三区 | 欧美性大战久久久久久久 | 欧美精品亚洲精品日韩已满十八 | 亚洲女人av久久天堂 | 欧美久久综合 | 欧美精品日日鲁夜夜添 | 男女超碰 | 永久免费观看片在线现看 | 欧美丰满大乳大屁股毛片图片 | 日韩欧美一区二区三区免费观看 | www.国产免费 | 亚洲一级久久 | 丰满爆乳一区二区三区 | 西西午夜无码大胆啪啪国模 | 国产精品视频一区二区三区, | 精品国产一区二区三区麻豆仙踪林 | 国内精品毛片 | 色婷婷香蕉在线一区二区 | 国产精品亚洲五月天高清 | 欧美成人午夜精品久久久 | 成人深夜福利视频 | 欧美日韩偷拍视频 | 国产亚洲精品久久久ai换 | 午夜福利一区二区三区在线观看 | 成人日批视频 | 国产亚洲精品美女久久久 | 一个人看的视频在线观看www | 国产69久久精品成人看动漫 | 一本一本久久a久久精品综合小说 | 放荡富婆videos√ | 国产婷婷色 | 任我爽精品视频在线观看 | 少妇高潮惨叫正在播放对白 | 国产在线拍揄自揄拍无码 | 日韩国产一级片 | www中文字幕av| 国产一线二线三线wwww | 色女孩综合 | 成人欧美一区二区三区黑人动态图 | 99精品在线| 精品少妇一区二区三区视频 | 一级欧美一级日韩片免费观看 | 天天操天天操天天操天天操天天操 | 欧美日本精品 | youjizz.com最新| 奇米久久 | 国产精品久久久久久久久免小说 | 找av导航| 亚洲精品区 | 国产精品久久婷婷六月丁香 | 国产乱子伦精品无码码专区 | 男女床上拍拍拍 | www.亚洲综合| 色播久久人人爽人人爽人人片av | 欧美成人看片一区二区三区尤物 | 久久成人视屏 | 成人国产一区二区 | 色视频久久 | 四虎少妇做爰免费视频网站四 | 国产性70yerg老太 | 成人羞羞视频播放网站 | 1区2区3区视频 | 婷婷中文网 | 成人精品视频在线看 | 24小时日本在线www免费的 | 色播视频在线观看 | 国产91精品高清一区二区三区 | 国产又黄又粗又猛又爽视频 | 38在线视频| 毛片网特黄 | 中国国产精品 | 国产不卡网| 日韩欧美一级 | 成人自拍av | 在线观看日本中文字幕 | 久久国产乱子伦精品免费午夜,浪货好紧 | 91精品国产综合久久香蕉最新版 | 黄色片日韩 | www.一区二区.com | 国产xxxxxx| 免费成人黄色片 | 中文字幕在线视频网站 | 另类综合二 | 国产我不卡 | 天天看黄色 | 亚洲永久精品视频 | 国产又粗又爽又猛又大的动漫片 | 污污的视频网站在线观看 | 一区二区三区入口 | 青青色在线观看 | 欧美日韩不卡一区二区 | 日韩国产一级片 | 91在线高清视频 | 成人毛片在线 | 三级a三级三级三级a十八发禁止 | 国产免费又色又爽粗视频 | 色播视频在线 | 国产成人乱色伦区 | 少妇伦子伦情品无吗 | 国产成人精品亚洲日本在线观看 | 乱码午夜-极品国产内射 | 深夜视频在线播放 | 国产成人自拍网 | 亚洲国产精品视频一区 | 日韩在线专区 | 欧美69影院| 亚洲一区二区三区在线播放 | 伊人久久噜噜噜躁狠狠躁 | 91精品国产高潮对白 | 祥仔视觉av | 久久小草亚洲综合 | 亚洲卡一卡二 | 四虎8848精品 | 国产性猛交普通话对白 | 军人粗大的内捧猛烈进出视频 | 国产精品卡一卡二 | 男女日批在线观看 | 亚洲玉足av久久影视 | 久久免费视频一区二区 | 久久久久久国产精品免费播放 | 荫蒂被男人添的好舒服爽免费视频 | 女人被狂躁的高潮免费视频 | 国产影片中文字幕 | 久久精品一区二区三区中文字幕 | 欧美国产一区二区三区激情无套 | www.在线视频 | 综合久久中文字幕 | 香蕉大人久久国产成人av | 中文字幕在线不卡一区二区 | 人妻尝试又大又粗久久 | 国内精品视频饥渴少妇在线播放 | 在线观看中文av | 伊人嫩草久久欧美站 | 极品少妇一区二区 | 特大黑人娇小亚洲女mp4 | 91偷拍网站| 一进一出gif抽搐日本免费视频 | 九九九伊在人现综合 | 97视频在线免费 | 三个男吃我奶头一边一个视频 | 免费在线色 | 99国产精品久久久久久久成人热 | 君岛美绪在线 | 在线视频亚洲色图 | 国产女主播喷出白浆视频 | 女人被狂躁c到高潮喷水电影 | 免费观看性生交大片女神 | 性无码专区无码 | 日日噜噜夜夜狠狠va视频 | 国产精品99久久久久久www | 免费中文字幕日韩 | 亚洲日韩欧洲乱码av夜夜摸 | 色婷婷社区 | 国产精品久久久久久久久久三级 | 亚洲无马砖区2021 | 国产成人综合一区二区三区 | 久久精品国产精品亚洲色婷婷 | 国产在线国偷精品产拍免费观看 | 精东粉嫩av免费一区二区三区 | 日韩在线国产精品 | 国产一区二区三区成人久久片老牛 | 久久精品女人的天堂av | 国产精品一区二区免费 | 欧美爱爱网| 亚洲精品视频一二三区 | 国产3页 | 狠狠躁日日躁夜夜躁2022麻豆 | 国产 日韩 欧美 在线 | 琪琪久久 | 精品粉嫩超白一线天av | 国产三级香港三韩国三级 | 国产亚洲日韩在线a不卡 | 亚洲逼逼 | 丁香综合网 | 色88久久久久高潮综合影院 | 摸大乳喷奶水www视频 | 光明影院手机版在线观看免费 | 久久精品人人做人人综合试看 | 91视频综合网 | ass阿娇裸体pics | 少妇高潮流白浆9191 | 伊人天天干 | 亚洲欧美中文日韩在线 | 久热精品视频在线播放 | 久久久久久精 | 日本大片免a费观看视频三区 | 欧美日韩123区 | 美女张开腿黄网站免费下载 | 国产一级特黄aaa大片 | 撸撸综合色av | 小萝莉末成年一区二区 | 91极品国产情侣高潮对白 | 天天躁日日躁狠狠躁超碰97 | 亚欧在线观看 | 男人添女人囗交做爰视频 | 色综合久久一区二区三区 | 天堂网免费视频 | 丰满少妇弄高潮了www | 热久久亚洲 | 8×8x拔擦拔擦在线视频网站 | 精品久久免费视频 | 国产成人精品视频网站 | 18禁美女裸体爆乳无遮挡 | 屁屁影院ccyy备用地址 | 久久免费视频3 | 国产精品免费视频一区二区三区 | 亚洲精品自拍 | 亚洲毛片在线看 | 日本美女性生活视频 | 久久久久久久久99 | 手机在线不卡av | 一本色道久久爱88av | 免费中文字幕 | 99久久国语露脸精品国产 | 亚洲另类无码专区首页 | 辽宁熟女高潮狂叫视频 | 日韩在线观看第一页 | 久久久久久久毛片 | 日本免费一区二区三区四区五六区 | 久久久久久99精品久久久 | www.av网站| 久久久精品午夜免费不卡 | 国产特黄大片aaaa毛片 | 中文字幕永久在线 | 黄色激情在线 | 视频在线一区 | 久操国产精品 | 国产精品中文久久久久久久 | 无码午夜福利视频一区 | 丝袜捆绑调教午夜一区二区 | 9999精品视频 | 国产欧美一区二区三区另类精品 | 在线观看亚洲成人 | 毛片网络 | 日韩短视频 | 内射爽无广熟女亚洲 | 午夜免费福利小电影 | 黑人老外猛进华人美女 | 中文字幕av一区二区三区人妻少妇 | 亚洲影院一区二区三区 | 成人国产精品久久久 | 91成人福利 | 全部免费毛片在线播放高潮 | 国产亚洲精久久久久久无码 | www精品国产| 欧美男生射精高潮视频网站 | 久久激情网站 | 一区二区三区中文字幕 | 18禁毛片无遮挡嫩草视频 | 国产精品久久久久久久久久妇女 | a级毛片古装在线播放 | 麻豆一级视频 | 99福利影院 | 婷婷色伊人 | 亚洲精品国产主播一区 | 日本高清视频www | 国产成人av一区二区三区不卡 | 成人免费网站在线 | 免费黄色在线网址 | 女邻居的大乳中文字幕 | 亚洲免费观看av | 日韩国产欧美在线视频 | 91精品在线一区 | 日韩一区二区三区精品 | 中文字幕日本最新乱码视频 | 美国女人毛片 | 天天爽夜夜爽夜夜爽精品视频 | 窝窝九色成人影院 | 性欧美日本 | 九九精品成人免费国产片 | 国产成人午夜高潮毛片 | 自拍欧美日韩 | 免费av动漫 | 日本成片网 | 欧美成人午夜精品免费 | 亚洲欧美综合一区 | 性高朝久久久久久久 | 一本大道东京热无码视频 | 国产高清视频在线观看 | 干美女av| 男女啪啪做爰高潮免费网站 | 国产又色又爽无遮挡免费 | 亚洲一区二区影视 | 国产成人一区二区三区视频免费 | 国产区123| 亚洲丁香婷婷 | 欧美网黄| 嫩草国产福利视频一区二区 | 亚洲国产精品丝袜国产自在线 | 亚洲国产女人aaa毛片在线动漫 | 日韩女优在线 | 182午夜视频 | 人妻熟女av一区二区三区 | 黄色一级影片 | 少妇人妻在线视频 | 女人脱了内裤趴开腿让男躁 | 亚洲欧美日本韩国 | 亚洲高清在线视频 | 真实国产老熟女无套中出 | 亚洲日韩一页精品发布 | 精品一区二区日韩 | 日批视频网站 | 日韩在线你懂的 | 中文国产 | 国产精品色综合一区二区三区 | 国产李沁av在线播放 | 欧美va亚洲va | 亚洲影视一区 | 在线免费国产视频 | 亚洲精品www久久久久久 | 偷窥日本少妇撒尿chinese | 国产精品7 | 在线中文字日产幕 | 91久久久久久久久久久久 | www色99| 鲁丝片一区二区三区 | 91看片www| 国产盼盼私拍福利视频99 | 超级碰碰97 | 美女黄频视频大全免费的国内 | 久久久久亚洲精品男人的天堂 | 国产在线精品国自产拍影院同性 | 老司机久久精品视频 | 国产欧美日韩va另类在线播放 | a免费在线 | 欧美叫娇小xx人1314 | 久久丫精品久久丫 | 日本理伦片午夜理伦片 | 东京无码熟妇人妻av在线网址 | 一区二区三区高清 | 国产成人精品999在线观看 |