Linux内核学习笔记05--pmtest1.asm代码阅读

   日期:2020-09-27     浏览:92    评论:0    
核心提示:pm.inc%macro Descriptor 3 dw %2 & 0FFFFh dw %1 & 0FFFFh db (%1 >> 16) & 0FFh dw ((%2 >> 8) & 0F00h) | (%3 0F0FFh) db (%1 >> 24) & 0FFh%endmacropmtest1.asm%include "pm.inc"org 07c00hjmp LABEL_BEGIN[SEC

pm.inc

%macro Descriptor 3
	dw %2 & 0FFFFh
	dw %1 & 0FFFFh
	db (%1 >> 16) & 0FFh
	dw ((%2 >> 8) & 0F00h) | (%3 0F0FFh)
	db (%1 >> 24) & 0FFh
%endmacro

pmtest1.asm

%include "pm.inc"

org 07c00h
jmp LABEL_BEGIN
[SECTION .gdt]
;								段基址,段界限,属性(段界限 2bytes, 段基址 4bytes)
LABEL_GDT: 			Descriptor 		 0, 			   0, 0
LABEL_DESC_CODE32: 	Descriptor 		 0, SegCode32Len - 1, DA_C + DA_32
LABEL_DESC_VIDEO: 	Descriptor 0B8000h, 		  0ffffh, DA_DRW
GdtLen equ $ - LABEL_GDT
GdtPtr dw  GdtLen - 1
	   dd  0
SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT
SelectorVideo  equ LABEL_DESC_VIDEO - LABEL_GDT

[SECTION .s16]
[BITS 16]
LABEL_BEGIN:
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0100h

xor eax, eax
mov ax, cs
shl eax, 4
add eax, LABEL_SEG_CODE32
mov word [LABEL_DESC_CODE32 + 2], ax
shr eax, 16
mov byte [LABEL_DESC_CODE32 + 4], al
mov byte [LABEL_DESC_CODE32 + 7], ah

xor eax, eax
mov ax, ds
shl eax, 4
add eax, LABEL_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 SelectorCode32:0

[SECTION .s32]
[BITS 32]

LABEL_DESC_CODE32:
mov ax, SelectorVideo
mov gs, ax

mov edi, (80 * 11 + 79) * 2
mov ah, 0ch
mov al, 'p'

jmp $

SegCode32Len equ $ - LABEL_SEG_CODE32

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服