日期:2014-05-16  浏览次数:20535 次

GDT问题
《自己动手写操作系统》的开始部分


pmtest1.asm
                        ;   编译方式:nasm   pmtest1.asm   -o   pmtest1.com
                        %include       "pm.inc "     ;     常量、宏,以及一些说明
                        org   0100h
                                jmp   LABEL_BEGIN
                        [SECTION   .gdt]
                        ;   GDT
                        LABEL_GDT:                     Descriptor   0,   0,   0             ;   空描述符
                        LABEL_DESC_CODE32:     Descriptor   0,   SegCode32Len-1,   DA_C   +   DA_32   ;   ???
                        代码段,32位
                    .......
                    .......
[SECTION   .s32];   32   位代码段.   由实模式跳入.
[BITS 32]

LABEL_SEG_CODE32:
mov ax,   SelectorVideo
mov gs,   ax ;   视频段选择子(目的)

mov edi,   (80   *   10   +   0)   *   2 ;   屏幕第   10   行,   第   0   列。
mov ah,   0Ch ;   0000:   黑底         1100:   红字
mov al,   'P '
mov [gs:edi],   ax

;   到此停止
jmp $

SegCode32Len equ $   -   LABEL_SEG_CODE32

我想知道一下其中SegCode32Leng-1段限的问题,为什么会是SegCode32Leng-1
是不是仅用它容纳[SECTION   .s32];   这个代码段

------解决方案--------------------
我觉得就是这样