chuyển đổi giữa các chế độ thực và chế độ bảo hộ tại x86 cpu's

E

eelinker

Guest
i cần giúp đỡ về tài liệu hướng dẫn lập trình để chuyển đổi giữa các chế độ thực và chế độ bảo hộ tại x86 cpu's.

 
PTC i Centertel zarejestrowały spółkę do wspólnej obsługi sieci. To będzie rewolucja - pisze <i>Puls Biznesu</i>.

Read more...
 
Hi eelinker!

Hãy xem mã này!Mã số:3.
Chương trình chuyển đổi sang chế độ bảo vệdosseg

MODEL SMALL.

0,586 p

codeseg_offset equ 08h

dataseg_offset equ 10giờ

extraseg_offset equ 18giờ

stackseg_offset equ 20giờ;------------------------------------------------- ----------------------------

; Segment Descriptor Cơ cấu tổ chức

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

segment_descriptor cấu

seg_length0_15 dw 0

base_addr0_15 dw 0

base_addr16_23 db 0

db cờ 0

truy cập db 0

base_addr24_31 db 0

segment_descriptor kết thúc;------------------------------------------------- ----------------------------

; Vĩ mô được sử dụng cho 32-bit địa chỉ tính toán

;------------------------------------------------- ----------------------------ADDR32 vĩ mô cơ bản, offsetadd

mov eax, 0

mov ebx, eax

mov, cơ sở

SHL eax, 4

mov bx, offsetadd

gắn ebx, eax

endm

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

; Vĩ mô được sử dụng cho Hiển thị bit PE

;------------------------------------------------- ----------------------------DISP vĩ mô

mov ah, 06h

mov bl, 6

gắn al, 30H

mov dl, al

int 21H

endmdsetup vĩ mô dest

movzx eax, cx

SHL eax, 4

dest.base_addr0_15 mov, cx

SHR eax, 8

dest.base_addr16_23 mov, ah

endm

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

; Stack

;------------------------------------------------- ----------------------------stack16 đoạn para công use16

giả sử cs: code16, ds: data16

db 100 dup (?)stack16_end nhãn từ

db 100 dup (?)

stack16 kết thúc

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

; Liệu

;------------------------------------------------- ----------------------------data16 đoạn para công use16

giả sử cs: code16, ds: data16MSG1 db "chuyển sang chế độ bảo vệ ... Wait for sometime để trở về $"

MSG2 db "PE BIT OF CRO sau khi chuyển đổi trở lại là $"

global_descriptor_table nhãn fwordgdt_start dw gdt_size, 0,0

dummy_des segment_descriptor <0,0,0,0,0,0>

code16_des segment_descriptor <0ffffh, 0,0,9 ah, 0,0>

data16_des segment_descriptor <0ffffh, 0,0,92 h, 0,0>

extraseg_des segment_descriptor <0ffffh, 0,0,92 h, 0,0>

stak16_des segment_descriptor <00000h, 0,0,96 h, 0,0>

gdt_size = $ - (offset dummy_des)

temp dw?

data16 kết thúc;------------------------------------------------- ----------------------------

; Mã số bắt đầu

;------------------------------------------------- ----------------------------code16 đoạn para công use16

giả sử cs: code16, ds: data16

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

; Thủ tục được sử dụng để thực hiện chậm trễ

;------------------------------------------------- ----------------------------trì hoãn PROC NEAR

mov ecx, 02ffffffH

lop: Tháng Mười Hai ecx

jnz lop

ret

delay endpstart16:

CLI; tắt ngắt; Thiết lập sổ đăng ký chế độ thựcmov, data16

mov ds, ax

mov, stack16

mov ss, ax

mov sp, offset stack16_end

; Thiết lập lập descriptiors pmode khác nhaumov, code16

dsetup code16_des

mov, data16

dsetup data16_des

mov, stack16

dsetup stak16_des; Thiết lập bảng mô tả toàn cầu

mov temp, bù đắp dummy_des

Data16 ADDR32, tempmov dword ptr ds: gdt_start [2], ebx; Load Global Descriptor Table Đăng kýlgdt fword ptr ds: global_descriptor_table; Hiển thị một thông báo trước khi chuyển đổi sang chế độ bảo vệmov dx, offset MSG1

mov ah, 09h

int 21H; Chuyển sang chế độ bảo vệ bằng cách thiết lập PE chút cr0mov eax, cr0

hoặc al, 1

mov cr0, eax

db 0eah

dw $ 4, codeseg_offset; Thiết lập descriptor pmodemov, dataseg_offset

mov ds, ax

mov, stackseg_offset

mov ss, ax

mov, extraseg_offset

mov es, cx

mov fs, ax

mov gs, ax; Cho một số chậm trễ trong chế độ bảo vệ

gọi sự chậm trễ; Chuyển trở lại chế độ thực bởi reset bit PE của cr0mov eax, cr0

và al, không phải 1

mov cr0, eax

db 0eah

dw $ 4, code16

mov, data16

mov ds, ax

mov es, cx

mov, stack16

mov ss, ax

mov sp, offset stack16_end; Rẽ ngắt trở lại và lùi lại về hệ điều hành DOSsti; In bit PE của cr0mov dl, 0AH

mov ah, 02h

int 21H

mov dl, 0DH

mov ah, 02h

int 21H

mov dx, offset MSG2

mov ah, 09h

int 21H

mov eax, cr0

và al, 0001H; Sử dụng DISP vĩ mô để hiển thị PE chút cr0disp

mov, 4c00h

int 21h

code16 kết thúc

cuối start16

cuối
 

Welcome to EDABoard.com

Sponsor

Back
Top