鱼C论坛

 找回密码
 立即注册
查看: 6869|回复: 11

[争议讨论] 寄存器长度和段的理解

[复制链接]
发表于 2012-6-29 13:49:45 | 显示全部楼层
首先你已经打错而特错了。。。80386里面段寄存器是96位的,不是16位,线性地址是
段寄存器是个结构体,里面有一项是base,    例如 mov eax,ds:[0x12345678] ,这里的0x12345678是有效地址,ds.base + 0x12345678 才是线性地址, 80386里面ds.base的值被初始化为0,所以一直省略不写的。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-29 13:51:53 | 显示全部楼层
若是楼主无法理解我说的段寄存器是96位的话,还是不要纠结了。。。程序员里面懂段的人没有几个。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-30 00:43:35 | 显示全部楼层

例如:mov es,ax段寄存器是96位,只是CPU没有提供为96位寄存器赋值的指令,所以提供了GDTR寄存器,又缔造了GDT表,通过ax的值低三位清0,作为索引,GDTR.BASE 作为基质,在这个表里面用8个字节扩展为80位,再加上ax里面的16位,扩充成96位,赋值给es。  这个赋值过程特别复杂,要经过重重判断。。。重重检查。。。LZ还是不要去纠结了。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-30 10:21:06 | 显示全部楼层
hy19970612 发表于 2012-6-30 09:37
[quote]Tzdner_C 发表于 2012-6-29 13:49 http://hi.baidu.com/lovetolinux/blog/item/e000411a88f9e917861 ...

还好像没我说的这么大。。。我没百度过,但是段寄存器里面的结构,我能一一列举出来,我不是说了吗,懂段的人没几个,所以不跟你们扯了。。。。扯了也白扯。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 05:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表