操作系统进行段式寻址时,将seg:offset形式的逻辑地址转换成线性地址。
例如
jmp dword SelectorCode32:0
SelectorCode32是段选择子,它指向GDT/LDT表中的一个表项,GDT/LDT中的每个表项中有所指向的代码或数据的段地址
[SECTION .gdt] ;GDT FOUND ; 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 ; length of GDT GdtPtr dw GdtLen-1 dd 0 ;GDT selector SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT SelectorVideo equ LABEL_DESC_VIDEO - LABEL_GDT ;end of [SECTION . gdt] %macro Descriptor 3 dw %2 & 0FFFFh dw %1 & 0FFFFh db (%1 >> 16) & 0FFH dw ((%2 >> 8) & 0F00H) | (%3 & 0F0FFh) db (%1 >> 24) & 0FFH %endmacro
在上面的代码中,初始化了GDT表和选择子。选择子的值是表项的偏移量。GDT中的表项指向一个数据结构,其中包含有段基址,段界限和其他的属性。
时间: 2024-10-11 13:35:01