免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1715 | 回复: 6
打印 上一主题 下一主题

向大家请教几个保护模式编程的问题!很初级,请大家费心了。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-20 23:20 |只看该作者 |倒序浏览
下面这段程序用nasm编译通过,可以运行,是一个从实模式到保护模式再到实模式的例子程序。

我这里有几个问题请加大家
1、在mov cr0,eax和mov cr0,eax之间加上loop1:jmp loop1这条指令,都会导致重启。这是为什么呢?
2、如果我不修改0x0D号中断,也就是屏蔽掉mov [es:0x0D * 4],edx ,mov edx,[es:0x0D * 4],mov [es:0x0D * 4 + 2],cs,lea ax,[trap],mov [es:0x0D * 4],ax这5条指令,则屏幕上什么也不打印,这又是为什么呢?

说明一下,我是在Bochs 2.1.1上调试一下程序的。程序有点长,附在下面,请大家帮忙看看,我都快急死了。

[ORG 0x100]
[BITS 16]

start:  xor ebx,ebx
    mov bx,ds                       ; BX=segment
    shl ebx,4                       ; BX="linear" address of segment base
    mov eax,ebx
    mov [gdt2 + 2],ax               ; set base address of 32-bit segments
    mov [gdt3 + 2],ax
    mov [gdt4 + 2],ax               ; set base address of 16-bit segments
    mov [gdt5 + 2],ax
    shr eax,16
    mov [gdt2 + 4],al
    mov [gdt3 + 4],al
    mov [gdt4 + 4],al
    mov [gdt5 + 4],al

    mov [gdt2 + 7],ah
    mov [gdt3 + 7],ah
    mov [gdt4 + 7],ah
    mov [gdt5 + 7],ah

        lea eax,[gdt + ebx]             ; EAX=PHYSICAL address of gdt
        mov [gdtr + 2],eax

    xor ax,ax
    mov es,ax
    mov edx,[es:0x0D * 4]       ; INT 0Dh vector ->; EDX
    mov [es:0x0D * 4 + 2],cs
    lea ax,[trap]
    mov [es:0x0D * 4],ax

    mov ebx,0xB809A         ; ES still 0
    mov byte [es],'R'       ; 'R' in upper right corner of screen

    mov ax,cs
    mov [RealModeCS],ax
    lea ax,[do_rm]
    mov [RealModeIP],ax

    mov ax,0xB800
    mov es,ax

    lgdt [gdtr]

    mov eax,cr0
    or al,1
    mov cr0,eax

        lea si,[msg0]                   ; ->; "still in real mode!"
        mov di,(80 * 1 + 2) * 2         ; row 1, column 2
        mov cx,38
        cld
        rep movsb

    jmp SYS_CODE_SEL:do_pm          ; jumps to do_pm

trap:   mov ax,0xB800
    mov fs,ax
    mov byte [fs:0x9C],'='
    pop ax              ; point stacked IP beyond...
    add ax,5            ; ...the offending instruction
    push ax
    iret
   
[BITS 32]
do_pm:


        xor edi,edi
        xor esi,esi

    lea si,[msg1]                   ; ->; "ES, DS still real mode!"
        mov di,(80 * 2 + 3) * 2         ; row 2, column 3
        mov ecx,46
        cld
        rep movsb

    mov ax,SYS_DATA_SEL
    mov ds,ax
    mov ss,ax

    mov ax,LINEAR_SEL
    mov es,ax

    ; questionable PM code here
    mov byte [es:dword 0xB8000],'0'

    ; more questionable PM code here
    mov byte [es:dword 0xB8002],'1'

    ; still more questionable PM code here
    mov byte [es:dword 0xB8004],'2'

    ; (you get the picture)
    mov byte [es:dword 0xB8006],'3'

    lea esi,[msg2]                  ; ->; "Finally in protected mode!"

    mov edi,0xB8000 + (80 * 3 + 4) * 2      ; row 3, column 4
    mov ecx,52
    cld
    rep movsb

    jmp REAL_CODE_SEL:do_16
[BITS 16]
do_16:

    mov ax,REAL_DATA_SEL
    mov ss,ax
    mov ds,ax           ; leave ES alone

    mov eax,cr0
    and al,0xFE
loop1:jmp loop1
    mov cr0,eax

    jmp far [RealModeIP]

[BITS 16]

do_rm:  mov byte [es:dword 0xB8008],'4'

    xor ax,ax
    mov es,ax
    mov byte [es:dword 0xB800A],'5'

    lea esi,[msg3]          ; ->; "ES, DS still protected mode!"
    mov edi,0xB8000 + (80 * 4 + 5) * 2      ; row 4, column 5
    mov ecx,56
    cld
    ;rep movsb

    a32             ; same as 'db 0x67'
    rep movsb

    mov ax,cs
    mov ds,ax
    mov ss,ax
    mov ax,0xB800
    mov es,ax

    lea si,[msg4]                   ; ->; "back to BORING old real mode"
    mov di,(80 * 5 + 6) * 2         ; row 5, column 6
    mov cx,56
    cld
    rep movsb

    xor ax,ax
    mov es,ax
    mov [es:0x0D * 4],edx       ; EDX ->; INT 0x0D vector

    sti
    mov ax,0x4C00
    int 0x21
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RealModeIP:
        dw 0

RealModeCS:
    dw 0
msg0:   db "s t i l l   i n   r e a l   m o d e ! "
msg1:   db "E S ,   D S   s t i l l   r e a l   m o d e ! "
msg2:   db "F i n a l l y   i n   p r o t e c t e d   m o d e ! "
msg3:   db "E S ,   D S   s t i l l   p r o t e c t e d   m o d e ! "
msg4:   db "b a c k   t o   B O R I N G   o l d   r e a l   m o d e "

gdtr:   dw gdt_end - gdt - 1    ; GDT limit
    dd gdt                  ; (GDT base gets set above)
gdt:    dw 0            ; limit 15:0
    dw 0            ; base 15:0
    db 0            ; base 23:16
    db 0            ; type
    db 0            ; limit 19:16, flags
    db 0            ; base 31:24

; linear data segment descriptor
LINEAR_SEL  equ $-gdt
    dw 0xFFFF       ; limit 0xFFFFF
    dw 0            ; base 0
    db 0
    db 0x92         ; present, ring 0, data, expand-up, writable
        db 0xCF                 ; page-granular, 32-bit
    db 0

; code segment descriptor
SYS_CODE_SEL    equ $-gdt
gdt2:   dw 0xFFFF               ; limit 0xFFFFF
    dw 0            ; (base gets set above)
    db 0
    db 0x9A         ; present, ring 0, code, non-conforming, readable
        db 0xCF                 ; page-granular, 32-bit
    db 0

; data segment descriptor
SYS_DATA_SEL    equ $-gdt
gdt3:   dw 0xFFFF               ; limit 0xFFFFF
    dw 0            ; (base gets set above)
    db 0
    db 0x92         ; present, ring 0, data, expand-up, writable
        db 0xCF                 ; page-granular, 32-bit
    db 0

; a code segment descriptor that is 'appropriate' for real mode
; (16-bit, byte-granular, limit=0xFFFF)
REAL_CODE_SEL   equ $-gdt
gdt4:   dw 0xFFFF
    dw 0            ; (base gets set above)
    db 0
    db 0x9A         ; present, ring 0, code, non-conforming, readable
    db 0            ; byte-granular, 16-bit
    db 0

; a data segment descriptor that is 'appropriate' for real mode
; (16-bit, byte-granular, limit=0xFFFF)
REAL_DATA_SEL   equ $-gdt
gdt5:   dw 0xFFFF
    dw 0            ; (base gets set above)
    db 0
    db 0x92         ; present, ring 0, data, expand-up, writable
    db 0            ; byte-granular, 16-bit
    db 0

gdt_end:

论坛徽章:
0
2 [报告]
发表于 2005-03-20 23:23 |只看该作者

向大家请教几个保护模式编程的问题!很初级,请大家费心了。

下面这段程序用nasm编译通过,可以运行,是一个从实模式到保护模式再到实模式的例子程序。

我这里有几个问题请加大家
1、在mov cr0,eax和mov cr0,eax之间加上loop1:jmp loop1这条指令,都会导致重启。这是为什么呢?
2、如果我不修改0x0D号中断,也就是屏蔽掉mov [es:0x0D * 4],edx ,mov edx,[es:0x0D * 4],mov [es:0x0D * 4 + 2],cs,lea ax,[trap],mov [es:0x0D * 4],ax这5条指令,则屏幕上什么也不打印,这又是为什么呢?

说明一下,我是在Bochs 2.1.1上调试一下程序的。程序有点长,附在下面,请大家帮忙看看,我都快急死了。

[ORG 0x100]
[BITS 16]

start:  xor ebx,ebx
    mov bx,ds                       ; BX=segment
    shl ebx,4                       ; BX="linear" address of segment base
    mov eax,ebx
    mov [gdt2 + 2],ax               ; set base address of 32-bit segments
    mov [gdt3 + 2],ax
    mov [gdt4 + 2],ax               ; set base address of 16-bit segments
    mov [gdt5 + 2],ax
    shr eax,16
    mov [gdt2 + 4],al
    mov [gdt3 + 4],al
    mov [gdt4 + 4],al
    mov [gdt5 + 4],al

    mov [gdt2 + 7],ah
    mov [gdt3 + 7],ah
    mov [gdt4 + 7],ah
    mov [gdt5 + 7],ah

        lea eax,[gdt + ebx]             ; EAX=PHYSICAL address of gdt
        mov [gdtr + 2],eax

    xor ax,ax
    mov es,ax
    mov edx,[es:0x0D * 4]       ; INT 0Dh vector ->; EDX
    mov [es:0x0D * 4 + 2],cs
    lea ax,[trap]
    mov [es:0x0D * 4],ax

    mov ebx,0xB809A         ; ES still 0
    mov byte [es],'R'       ; 'R' in upper right corner of screen

    mov ax,cs
    mov [RealModeCS],ax
    lea ax,[do_rm]
    mov [RealModeIP],ax

    mov ax,0xB800
    mov es,ax

    lgdt [gdtr]

    mov eax,cr0
    or al,1
    mov cr0,eax

        lea si,[msg0]                   ; ->; "still in real mode!"
        mov di,(80 * 1 + 2) * 2         ; row 1, column 2
        mov cx,38
        cld
        rep movsb

    jmp SYS_CODE_SEL:do_pm          ; jumps to do_pm

trap:   mov ax,0xB800
    mov fs,ax
    mov byte [fs:0x9C],'='
    pop ax              ; point stacked IP beyond...
    add ax,5            ; ...the offending instruction
    push ax
    iret
   
[BITS 32]
do_pm:


        xor edi,edi
        xor esi,esi

    lea si,[msg1]                   ; ->; "ES, DS still real mode!"
        mov di,(80 * 2 + 3) * 2         ; row 2, column 3
        mov ecx,46
        cld
        rep movsb

    mov ax,SYS_DATA_SEL
    mov ds,ax
    mov ss,ax

    mov ax,LINEAR_SEL
    mov es,ax

    ; questionable PM code here
    mov byte [es:dword 0xB8000],'0'

    ; more questionable PM code here
    mov byte [es:dword 0xB8002],'1'

    ; still more questionable PM code here
    mov byte [es:dword 0xB8004],'2'

    ; (you get the picture)
    mov byte [es:dword 0xB8006],'3'

    lea esi,[msg2]                  ; ->; "Finally in protected mode!"

    mov edi,0xB8000 + (80 * 3 + 4) * 2      ; row 3, column 4
    mov ecx,52
    cld
    rep movsb

    jmp REAL_CODE_SEL:do_16
[BITS 16]
do_16:

    mov ax,REAL_DATA_SEL
    mov ss,ax
    mov ds,ax           ; leave ES alone

    mov eax,cr0
    and al,0xFE
loop1:jmp loop1
    mov cr0,eax

    jmp far [RealModeIP]

[BITS 16]

do_rm:  mov byte [es:dword 0xB8008],'4'

    xor ax,ax
    mov es,ax
    mov byte [es:dword 0xB800A],'5'

    lea esi,[msg3]          ; ->; "ES, DS still protected mode!"
    mov edi,0xB8000 + (80 * 4 + 5) * 2      ; row 4, column 5
    mov ecx,56
    cld
    ;rep movsb

    a32             ; same as 'db 0x67'
    rep movsb

    mov ax,cs
    mov ds,ax
    mov ss,ax
    mov ax,0xB800
    mov es,ax

    lea si,[msg4]                   ; ->; "back to BORING old real mode"
    mov di,(80 * 5 + 6) * 2         ; row 5, column 6
    mov cx,56
    cld
    rep movsb

    xor ax,ax
    mov es,ax
    mov [es:0x0D * 4],edx       ; EDX ->; INT 0x0D vector

    sti
    mov ax,0x4C00
    int 0x21
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RealModeIP:
        dw 0

RealModeCS:
    dw 0
msg0:   db "s t i l l   i n   r e a l   m o d e ! "
msg1:   db "E S ,   D S   s t i l l   r e a l   m o d e ! "
msg2:   db "F i n a l l y   i n   p r o t e c t e d   m o d e ! "
msg3:   db "E S ,   D S   s t i l l   p r o t e c t e d   m o d e ! "
msg4:   db "b a c k   t o   B O R I N G   o l d   r e a l   m o d e "

gdtr:   dw gdt_end - gdt - 1    ; GDT limit
    dd gdt                  ; (GDT base gets set above)
gdt:    dw 0            ; limit 15:0
    dw 0            ; base 15:0
    db 0            ; base 23:16
    db 0            ; type
    db 0            ; limit 19:16, flags
    db 0            ; base 31:24

; linear data segment descriptor
LINEAR_SEL  equ $-gdt
    dw 0xFFFF       ; limit 0xFFFFF
    dw 0            ; base 0
    db 0
    db 0x92         ; present, ring 0, data, expand-up, writable
        db 0xCF                 ; page-granular, 32-bit
    db 0

; code segment descriptor
SYS_CODE_SEL    equ $-gdt
gdt2:   dw 0xFFFF               ; limit 0xFFFFF
    dw 0            ; (base gets set above)
    db 0
    db 0x9A         ; present, ring 0, code, non-conforming, readable
        db 0xCF                 ; page-granular, 32-bit
    db 0

; data segment descriptor
SYS_DATA_SEL    equ $-gdt
gdt3:   dw 0xFFFF               ; limit 0xFFFFF
    dw 0            ; (base gets set above)
    db 0
    db 0x92         ; present, ring 0, data, expand-up, writable
        db 0xCF                 ; page-granular, 32-bit
    db 0

; a code segment descriptor that is 'appropriate' for real mode
; (16-bit, byte-granular, limit=0xFFFF)
REAL_CODE_SEL   equ $-gdt
gdt4:   dw 0xFFFF
    dw 0            ; (base gets set above)
    db 0
    db 0x9A         ; present, ring 0, code, non-conforming, readable
    db 0            ; byte-granular, 16-bit
    db 0

; a data segment descriptor that is 'appropriate' for real mode
; (16-bit, byte-granular, limit=0xFFFF)
REAL_DATA_SEL   equ $-gdt
gdt5:   dw 0xFFFF
    dw 0            ; (base gets set above)
    db 0
    db 0x92         ; present, ring 0, data, expand-up, writable
    db 0            ; byte-granular, 16-bit
    db 0

gdt_end:

论坛徽章:
0
3 [报告]
发表于 2005-03-20 23:25 |只看该作者

向大家请教几个保护模式编程的问题!很初级,请大家费心了。

下面这段程序用nasm编译通过,可以运行,是一个从实模式到保护模式再到实模式的例子程序。

我这里有几个问题请加大家
1、在mov cr0,eax和mov cr0,eax之间加上loop1:jmp loop1这条指令,都会导致重启。这是为什么呢?
2、如果我不修改0x0D号中断,也就是屏蔽掉mov [es:0x0D * 4],edx ,mov edx,[es:0x0D * 4],mov [es:0x0D * 4 + 2],cs,lea ax,[trap],mov [es:0x0D * 4],ax这5条指令,则屏幕上什么也不打印,这又是为什么呢?

说明一下,我是在Bochs 2.1.1上调试一下程序的。程序有点长,附在下面,请大家帮忙看看,我都快急死了。


  1. [ORG 0x100]
  2. [BITS 16]

  3. start:  xor ebx,ebx
  4.     mov bx,ds                       ; BX=segment
  5.     shl ebx,4                       ; BX="linear" address of segment base
  6.     mov eax,ebx
  7.     mov [gdt2 + 2],ax               ; set base address of 32-bit segments
  8.     mov [gdt3 + 2],ax
  9.     mov [gdt4 + 2],ax               ; set base address of 16-bit segments
  10.     mov [gdt5 + 2],ax
  11.     shr eax,16
  12.     mov [gdt2 + 4],al
  13.     mov [gdt3 + 4],al
  14.     mov [gdt4 + 4],al
  15.     mov [gdt5 + 4],al

  16.     mov [gdt2 + 7],ah
  17.     mov [gdt3 + 7],ah
  18.     mov [gdt4 + 7],ah
  19.     mov [gdt5 + 7],ah

  20.         lea eax,[gdt + ebx]             ; EAX=PHYSICAL address of gdt
  21.         mov [gdtr + 2],eax

  22.     xor ax,ax
  23.     mov es,ax
  24.     mov edx,[es:0x0D * 4]       ; INT 0Dh vector ->; EDX
  25.     mov [es:0x0D * 4 + 2],cs
  26.     lea ax,[trap]
  27.     mov [es:0x0D * 4],ax

  28.     mov ebx,0xB809A         ; ES still 0
  29.     mov byte [es:ebx],'R'       ; 'R' in upper right corner of screen

  30.     mov ax,cs
  31.     mov [RealModeCS],ax
  32.     lea ax,[do_rm]
  33.     mov [RealModeIP],ax

  34.     mov ax,0xB800
  35.     mov es,ax

  36.     lgdt [gdtr]

  37.     mov eax,cr0
  38.     or al,1
  39.     mov cr0,eax

  40.         lea si,[msg0]                   ; ->; "still in real mode!"
  41.         mov di,(80 * 1 + 2) * 2         ; row 1, column 2
  42.         mov cx,38
  43.         cld
  44.         rep movsb

  45.     jmp SYS_CODE_SEL:do_pm          ; jumps to do_pm

  46. trap:   mov ax,0xB800
  47.     mov fs,ax
  48.     mov byte [fs:0x9C],'='
  49.     pop ax              ; point stacked IP beyond...
  50.     add ax,5            ; ...the offending instruction
  51.     push ax
  52.     iret
  53.    
  54. [BITS 32]
  55. do_pm:


  56.         xor edi,edi
  57.         xor esi,esi

  58.     lea si,[msg1]                   ; ->; "ES, DS still real mode!"
  59.         mov di,(80 * 2 + 3) * 2         ; row 2, column 3
  60.         mov ecx,46
  61.         cld
  62.         rep movsb

  63.     mov ax,SYS_DATA_SEL
  64.     mov ds,ax
  65.     mov ss,ax

  66.     mov ax,LINEAR_SEL
  67.     mov es,ax

  68.     ; questionable PM code here
  69.     mov byte [es:dword 0xB8000],'0'

  70.     ; more questionable PM code here
  71.     mov byte [es:dword 0xB8002],'1'

  72.     ; still more questionable PM code here
  73.     mov byte [es:dword 0xB8004],'2'

  74.     ; (you get the picture)
  75.     mov byte [es:dword 0xB8006],'3'

  76.     lea esi,[msg2]                  ; ->; "Finally in protected mode!"

  77.     mov edi,0xB8000 + (80 * 3 + 4) * 2      ; row 3, column 4
  78.     mov ecx,52
  79.     cld
  80.     rep movsb

  81.     jmp REAL_CODE_SEL:do_16
  82. [BITS 16]
  83. do_16:

  84.     mov ax,REAL_DATA_SEL
  85.     mov ss,ax
  86.     mov ds,ax           ; leave ES alone

  87.     mov eax,cr0
  88.     and al,0xFE
  89. loop1:jmp loop1
  90.     mov cr0,eax

  91.     jmp far [RealModeIP]

  92. [BITS 16]

  93. do_rm:  mov byte [es:dword 0xB8008],'4'

  94.     xor ax,ax
  95.     mov es,ax
  96.     mov byte [es:dword 0xB800A],'5'

  97.     lea esi,[msg3]          ; ->; "ES, DS still protected mode!"
  98.     mov edi,0xB8000 + (80 * 4 + 5) * 2      ; row 4, column 5
  99.     mov ecx,56
  100.     cld
  101.     ;rep movsb

  102.     a32             ; same as 'db 0x67'
  103.     rep movsb

  104.     mov ax,cs
  105.     mov ds,ax
  106.     mov ss,ax
  107.     mov ax,0xB800
  108.     mov es,ax

  109.     lea si,[msg4]                   ; ->; "back to BORING old real mode"
  110.     mov di,(80 * 5 + 6) * 2         ; row 5, column 6
  111.     mov cx,56
  112.     cld
  113.     rep movsb

  114.     xor ax,ax
  115.     mov es,ax
  116.     mov [es:0x0D * 4],edx       ; EDX ->; INT 0x0D vector

  117.     sti
  118.     mov ax,0x4C00
  119.     int 0x21
  120. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  121. ; data
  122. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  123. RealModeIP:
  124.         dw 0

  125. RealModeCS:
  126.     dw 0
  127. msg0:   db "s t i l l   i n   r e a l   m o d e ! "
  128. msg1:   db "E S ,   D S   s t i l l   r e a l   m o d e ! "
  129. msg2:   db "F i n a l l y   i n   p r o t e c t e d   m o d e ! "
  130. msg3:   db "E S ,   D S   s t i l l   p r o t e c t e d   m o d e ! "
  131. msg4:   db "b a c k   t o   B O R I N G   o l d   r e a l   m o d e "

  132. gdtr:   dw gdt_end - gdt - 1    ; GDT limit
  133.     dd gdt                  ; (GDT base gets set above)
  134. gdt:    dw 0            ; limit 15:0
  135.     dw 0            ; base 15:0
  136.     db 0            ; base 23:16
  137.     db 0            ; type
  138.     db 0            ; limit 19:16, flags
  139.     db 0            ; base 31:24

  140. ; linear data segment descriptor
  141. LINEAR_SEL  equ $-gdt
  142.     dw 0xFFFF       ; limit 0xFFFFF
  143.     dw 0            ; base 0
  144.     db 0
  145.     db 0x92         ; present, ring 0, data, expand-up, writable
  146.         db 0xCF                 ; page-granular, 32-bit
  147.     db 0

  148. ; code segment descriptor
  149. SYS_CODE_SEL    equ $-gdt
  150. gdt2:   dw 0xFFFF               ; limit 0xFFFFF
  151.     dw 0            ; (base gets set above)
  152.     db 0
  153.     db 0x9A         ; present, ring 0, code, non-conforming, readable
  154.         db 0xCF                 ; page-granular, 32-bit
  155.     db 0

  156. ; data segment descriptor
  157. SYS_DATA_SEL    equ $-gdt
  158. gdt3:   dw 0xFFFF               ; limit 0xFFFFF
  159.     dw 0            ; (base gets set above)
  160.     db 0
  161.     db 0x92         ; present, ring 0, data, expand-up, writable
  162.         db 0xCF                 ; page-granular, 32-bit
  163.     db 0

  164. ; a code segment descriptor that is 'appropriate' for real mode
  165. ; (16-bit, byte-granular, limit=0xFFFF)
  166. REAL_CODE_SEL   equ $-gdt
  167. gdt4:   dw 0xFFFF
  168.     dw 0            ; (base gets set above)
  169.     db 0
  170.     db 0x9A         ; present, ring 0, code, non-conforming, readable
  171.     db 0            ; byte-granular, 16-bit
  172.     db 0

  173. ; a data segment descriptor that is 'appropriate' for real mode
  174. ; (16-bit, byte-granular, limit=0xFFFF)
  175. REAL_DATA_SEL   equ $-gdt
  176. gdt5:   dw 0xFFFF
  177.     dw 0            ; (base gets set above)
  178.     db 0
  179.     db 0x92         ; present, ring 0, data, expand-up, writable
  180.     db 0            ; byte-granular, 16-bit
  181.     db 0

  182. gdt_end:
复制代码

论坛徽章:
0
4 [报告]
发表于 2005-03-20 23:27 |只看该作者

向大家请教几个保护模式编程的问题!很初级,请大家费心了。

??

论坛徽章:
0
5 [报告]
发表于 2005-03-20 23:29 |只看该作者

向大家请教几个保护模式编程的问题!很初级,请大家费心了。

!!!

请大家费心了!

论坛徽章:
0
6 [报告]
发表于 2005-03-21 00:19 |只看该作者

向大家请教几个保护模式编程的问题!很初级,请大家费心了。

看起来好累~~~,能不能调一下版式啊   

论坛徽章:
0
7 [报告]
发表于 2005-03-21 23:24 |只看该作者

向大家请教几个保护模式编程的问题!很初级,请大家费心了。

请大家帮忙啦!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP