AT&T写了个进入保护模式的bootsect 为什么不能成功显示X
.equ Attr_32, 0x4000
.equ Attr_DPL0, 0X00
.equ Attr_DPL1, 0x20
.equ Attr_DPL2, 0x40
.equ Attr_DPL3, 0x60
.equ DAttr_R, 0x90
.equ DAttr_RA, 0x91
.equ DAttr_RW, 0x92
.equ DAttr_RWA, 0x93
.equ CAttr_X, 0x98
.equ CAttr_XA, 0x99
.equ CAttr_XW, 0x9a
.equ CAttr_XWA, 0x9b
.equ CAttr_XC, 0x9c
.equ CAttr_XCA, 0x9d
.equ CAttr_XWC, 0x9e
.equ CAttr_XWCA,0x9f
.equ SAttr_LDT, 0x82
.equ SAttr_TASK, 0x85
.equ SAttr_TSS, 0x89
.equ SAttr_CALL, 0x8c
.equ SAttr_INTR, 0x8e
.equ SAttr_TRAP, 0x8F
.equ Seg32_len, 0xffff
Selector_Code32 = 0x08
Selector_Video = 0x10
.section .text
.globl _start
.code16
_start:
movw %ax, %ds
movw %ax, %es
movw %ax, %ss
movw $0x0200, %sp
jmp NEXT
LABEL_GDT:
.word 0, 0, 0, 0 #dump
LABEL_CODE32:
.word (Seg32_len-1) & 0xffff
.word 0 & 0xffff
.byte (0 >> 16) & 0xff
.word (Seg32_len-1)>>8 & 0x0f00 |(Attr_32 + CAttr_X) & 0xf0ff
.byte (0 >> 24) & 0xff
LABEL_VIDEO:
.word 0xffff & 0xffff
.word 0x0b8000 & 0xffff
.byte (0x0b8000 >> 16) & 0xff
.word (0xffff >> 8) & 0x0f00 | (Attr_32 + DAttr_RW) & 0xf0ff
.byte (0x0b8000 >> 24) & 0xff
GDT_len = . - LABEL_GDT
GDT_PTR:
.word GDT_len
.4byte 0 #GDT
NEXT:
xor %eax, %eax
movw %cs, %ax
shll $4, %eax
addl $PMODE_START, %eax
movw %ax, LABEL_CODE32 + 2
shrl $16, %eax
movb %al, LABEL_CODE32 + 4
movb %ah, LABEL_CODE32 + 7
xor %eax, %eax
movw %ds, %ax
shll $4, %eax
addl $LABEL_GDT, %eax
movl %eax, GDT_PTR+2
lgdt GDT_PTR
cli
in $0x92, %al
or $0x04, %al
out %al, $0x92
xor %eax, %eax
movl %cr0, %eax
or $0x01, %eax
movl %eax, %cr0
ljmp $Selector_Code32, $0
.code32
PMODE_START:
movw $Selector_Video, %ax
movw %ax, %gs
movb $0x0C, %ah
movb $'X', %al
movw %ax, %gs:(80*20 + 10)*2
jmp .
.fill 510-(.-_start),1,0
.word 0xaa55