关于进入保护模式解决思路
关于进入保护模式
Start PROC
mov ax,DSEG
mov ds,ax
;准备要加载到GDTR的伪描述符
mov bx,16
mul bx
add ax,OFFSET GDT ;计算并设置基地址
adc dx,0 ;界限已在定义时设置好
mov WORD PTR VGDTR.Base,ax
这是教科书上的一小段进入保护模式的代码,请问如何理解 mov bx,16和
mul bx
谢谢
------解决方案--------------------
这个是一个计算上的技巧:取出段,左移动4位+偏移=物理地址
------解决方案--------------------
mov ax,DSEG
mov ds,ax
;准备要加载到GDTR的伪描述符
mov bx,16
mul bx
————————————————————————
上面的三行语句是计算DSEG段的物理基地址用的,因为这时候指令还在实模式下运行,
而在实模式下段的物理基地址=段寄存器中的值*16,上面的语句具体对应如下:
mov ax,DSEG ;加载DSEG段到ax中
mov bx,16 ;于bx中加载乘数(16)
mul bx ;将ax中的数与bx(16)相乘,这时dx:ax就是结果,也就是DSEG段的
;物理基地址
Start PROC
mov ax,DSEG
mov ds,ax
;准备要加载到GDTR的伪描述符
mov bx,16
mul bx
add ax,OFFSET GDT ;计算并设置基地址
adc dx,0 ;界限已在定义时设置好
mov WORD PTR VGDTR.Base,ax
这是教科书上的一小段进入保护模式的代码,请问如何理解 mov bx,16和
mul bx
谢谢
------解决方案--------------------
这个是一个计算上的技巧:取出段,左移动4位+偏移=物理地址
------解决方案--------------------
mov ax,DSEG
mov ds,ax
;准备要加载到GDTR的伪描述符
mov bx,16
mul bx
————————————————————————
上面的三行语句是计算DSEG段的物理基地址用的,因为这时候指令还在实模式下运行,
而在实模式下段的物理基地址=段寄存器中的值*16,上面的语句具体对应如下:
mov ax,DSEG ;加载DSEG段到ax中
mov bx,16 ;于bx中加载乘数(16)
mul bx ;将ax中的数与bx(16)相乘,这时dx:ax就是结果,也就是DSEG段的
;物理基地址