请问16位代码段与32位代码段有什么区别?
icbm 2006-02-28 05:36:24 最近在看李彦昌写的“保护模式教程”,教程里只是说了代码段(存储段)描述符的第6字节的第6位对是确定该描述符所描述的代码段是16位还是32位。但是具体并没有讲16位代码段和32位代码段有什么区别。
我的理解是:
16位代码段使用的通用寄存器只能是ax(ah,al,其它类似),bx,cx,dx,si,di,堆栈push,pop时使用双
字节。
定义段时使用:
seg16_name segment use16
... ...
seg16_name ends
32位代码段使用的通用寄存器可以是eax,(ax,ah,al,其它类似),ebx,ecx,edx,esi,edi,堆栈push,pop时使用四字节。
seg32_name segment use32
... ...
seg32_name ends
但我发现教程在16位代码段中,也可以使用eax。如,在向保护模式切换时,使用了eax寄存器:
mov eax, rc0
or al, 01h
mov rc0, eax
而这段代码是放在16位代码段中的。请教各位大侠:16位代码段与32位代码段有什么区别?或者哪里可以找到相关资料。谢谢。