选择符超出范围是怎么回事!高手请进!谢谢!在线等待!

flyintoy 2005-10-04 11:48:35
这段代码是模拟实现实模式到保护模式的转换,可是在运行到jmp dword 8:0的时后说是
选择符超出范围了,
00000789339i[CPU0 ] -----------------------------------
00000789339i[CPU0 ] selector->index*8 + 7 = 15
00000789339i[CPU0 ] gdtr.limit = 0
00000789339i[CPU0 ] fetch_raw_descriptor: GDT: index > limit
00000789339i[CPU0 ] protected mode


org 0x07c0
mov ax, cs
mov ds, ax
mov ss, ax
mov es, ax

xor eax, eax
mov ax, cs
shl eax, 4
add eax, run32
mov word [_gdt+10], ax
shr eax, 16
mov byte [_gdt+12], al
mov byte [_gdt+15], ah

cli

xor eax, eax
mov ax, ds
shl eax, 4
add eax, _gdt
mov dword [base+2], eax
lgdt [base]

;@open_a20
call empty_8042
mov al, 0xd0
out 0x64, al
call empty_8042
mov al, 0xdf
out 0x60, al
call empty_8042
jmp open_a20_ok
empty_8042:
dw 0x00eb, 0x00eb
in al, 0x64
test al, 2
jnz empty_8042
ret
open_a20_ok:

;@to_protect
mov eax, cr0
or eax, 1
mov cr0, eax
%if 0
mov ax, 0xb800
mov es, ax
mov ah, 0ch
mov al, 'i'
mov [es:0], ax
jmp $
%endif
jmp dword 8:0

_gdt:
dw 0, 0, 0, 0
dw 0xffff
dw 0x0000
dw 0x9e00
dw 0x00c0

dw 0xffff
dw 0x0000
dw 0x9200
dw 0x00c0
base: dw 24
dd 0


[section .s32]
[bits 32]
run32:
mov ax, cs
mov ds, ax
mov ss, ax
mov es, ax

mov ax, 16
mov gs, ax
mov ah, 0x0c
mov al, 'i'
mov [gs:0], ax
jmp $
...全文
101 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2005-10-04
  • 打赏
  • 举报
回复
~luck~
flyintoy 2005-10-04
  • 打赏
  • 举报
回复
自己成功了!谢谢!

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧