hlly3

%include "F:\虚拟机\玩转文件\pm.inc"

 

org 0100h

jmp Code16

 

[SECTION .des]

LABLE_GDT :Descriptor 0,0,0

LABEL_DESC_NORMAL:Descriptor 0, 0ffffh,92h;

LABLE_CODE32 :Descriptor 0,SEGCODE32-1,4098H;

LABLE_DATA32 :Descriptor 0,SEGDATA32-1,92H;

LABEL_DESC_VIDEO :Descriptor 0B8000h,0ffffh, 92H;

LABLE_CODE16 :Descriptor 0,0ffffh,98H;

LABLE_STACK :Descriptor 0,TopofStack,4093H;    ;栈描述符

 

GdtLen equ $-LABLE_GDT

GdtPtr dw GdtLen-1

       dd 0

 

 SelectorNormal equ   LABEL_DESC_NORMAL - LABLE_GDT

 seclectorcode32 equ  LABLE_CODE32 - LABLE_GDT

 seclectorcode16 equ  LABLE_CODE16 - LABLE_GDT

 seclectordata32 equ  LABLE_DATA32 - LABLE_GDT

 SelectorVideo equ   LABEL_DESC_VIDEO - LABLE_GDT

 seclectorstack equ   LABLE_STACK - LABLE_GDT   ;栈选择子

 

[SECTION .data]  

ALIGN 32   ;

[BITS 32]

Data32 db "In protect model Now.LYHL",0

DataF equ Data32 - $$

Data16 db "In real model NowLYHL ",0

DataN equ Data16 - $$

SEGDATA32 equ $-Data32

 

[SECTION .stack];-------- 

ALIGN 32

[BITS 32]

Stack:

 times 512 db 0

 TopofStack equ $-Stack-1

 

[SECTION .ccode16]

ALIGN 32                

[BITS 16];----- 

Code16:      

MOV AX,CS

MOV DS,AX

mov es,ax         

mov [ww+3],ax

XOR EAX,EAX

;-- 

mov ax,cs

SHL EAX,4

ADD EAX,Data32     

mov [LABLE_DATA32+2],ax

shr eax,16     

mov [LABLE_DATA32+4],al

mov [LABLE_DATA32+7],ah

;---- 

XOR EAX,EAX

mov ax,cs

SHL EAX,4

ADD EAX,Code32

mov [LABLE_CODE32+2],ax

shr eax,16

mov [LABLE_CODE32+4],al;----- 

mov [LABLE_CODE32+7],ah

;------ 

 

XOR EAX,EAX

mov ax,cs

SHL EAX,4

ADD EAX,MCode16

mov [LABLE_CODE16+2],ax

shr eax,16

mov [LABLE_CODE16+4],al

mov [LABLE_CODE16+7],ah

;-------- 

;加载栈描述符

XOR EAX,EAX

mov ax,cs

SHL EAX,4

ADD EAX,Stack

mov [LABLE_STACK+2],ax

shr eax,16

mov [LABLE_STACK+4],al;------ 

mov [LABLE_STACK+7],ah

;--------- 

xor eax,eax

mov ax,ds

shl eax,4

add eax,LABLE_GDT;--- 

mov dword  [GdtPtr+2],eax

lgdt [GdtPtr]

 

cli

;;--- 

in al,92h

or al,00000010b

out 92h,al

 

mov eax,cr0;--- 

or eax,1

mov cr0,eax

 

jmp dword seclectorcode32:0

 

LABEL_REAL:

 mov    ax,cs

 mov ds, ax

 mov es, ax

 mov ss, ax

;--------------------------------------------111

 IN AL,92H

 AND AL,11111101b

 OUT 92H,AL

 

 sti;

 

;实模式下输出相应数据

 mov ax,0B800h

 mov es,ax

 mov cx,10

 mov edi,(80*5+5)*2

 mov ah,0Ch

 mov esi,Data16

sv:         ;-- 

 mov al,[ds:esi]

 test al,al

 

 jz ddos

 mov [es:edi],ax

 inc esi

 add edi,2

;------ 

 jmp sv

ddos:

 

 MOV AX,4C00H

 INT 21H

 

[SECTION .code32]

ALIGN 32

[BITS 32]

Code32:

;---- 

 xor eax,eax

 mov ax,seclectordata32

 mov ds,ax

 

 xor edi,edi

 mov edi,(80*10+0)*2

 xor esi,esi

 mov esi,DataF

 ;--------- 

;;SSESP的赋值

 mov ax,seclectorstack

 mov ss,ax

 mov esp,TopofStack

 

 mov ax,SelectorVideo

 mov gs,ax

 mov ah,0Ch

 

xy:

 mov al,[esi]

 test al,al;-----------164

 jz qq

 mov [gs:edi],ax

 inc esi

 add edi,2

 ;------------ 

 jmp xy

qq:

 call UseofStack;;;;;;;;;;;;;;;;;Near Call

 jmp  seclectorcode16:0

 

UseofStack:

 push edi

 push gs

 push ax

 mov edi,(80*12+8)*2

 mov cx,10

 kk:      ;--------- 

  mov al,6

  mov [gs:edi],ax;

 add edi,2

 loop kk

 pop ax

 pop gs

 pop edi

ret

 

 SEGCODE32 equ $ - Code32

 

 

[SECTION .code16]

 ALIGN 32

[BITS 16]

MCode16:

 mov ax,SelectorNormal

 mov ds,ax;---- 

 mov es,ax

 mov fs,ax

 mov gs,ax

 mov ss,ax

 

 mov eax,cr0

 and al,11111110b

 mov cr0,eax

ww:

 jmp  0:LABEL_REAL

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值