linux中fs的作用,“ FS” /“ GS”寄存器的用途是什么?

TL; DR;

“ FS” /“ GS”寄存器的用途是什么?

只需访问默认数据段(DS)之外的数据。就像ES。

长读:

因此,我知道以下寄存器及其用途是什么:

[...]

好吧,但DS几乎不是“某些”数据段,而是默认数据段。默认情况下所有操作都发生(* 1)。这是所有默认变量都位于-本质上data和bss。这是x86代码非常紧凑的部分原因。所有最常用的基本数据(加上代码和堆栈)都在16位速记距离之内。

ES用于访问其他所有内容(* 2),以及DS的64 KiB之外的所有内容。类似于文字处理程序的文本,电子表格的单元格或图形程序的图片数据等。与通常假定的情况不同,该数据的访问量不大,因此使用前缀比使用较长的地址字段所受的伤害小。

类似地,在进行字符串操作时可能必须加载(和重新加载)DS和ES只是一个小麻烦-至少这被其当时最好的字符处理指令集之一所抵消。

真正令人痛心的是,当用户数据超过64 KiB且必须开始操作时。尽管某些操作一次只对单个数据项完成(请考虑A=A*2),但大多数操作需要两个(A=A*B)或三个数据项(A=B*C)。如果这些项目位于不同的段中,则每个操作将重新加载ES几次,从而增加了相当大的开销。

最初,使用来自8位世界(* 3)的小型程序和同样小的数据集,这没什么大不了的,但是它很快就成为了主要的性能瓶颈-尤其是对于程序员(和编译器)。最终,随着386英特尔的加入,英特尔又增加了另外两个段,从而可以进行任何一元,二进制或三元运算,并且元素分布在内存中,而无需始终重新加载ES。

对于编程(至少在汇编中)和编译器设计,这是一个很大的收获。当然,可能还有更多,但是有了三个瓶颈就基本消失了,因此无需过度操作。

明智地将字母F / G命名为E之后的字母连续。至少从CPU设计的角度来看,没有任何关联。

* 1-将ES用于字符串目标是一个例外,因为仅需要两个段寄存器。没有它们就没有太大用处-或始终需要一个段前缀。这可能会杀死令人惊讶的功能之一,即使用(非重复)字符串指令(由于其单字节编码)而导致极高的性​​能。

* 2-因此,事后看来,“其他所有细分”的命名方式要比“其他细分”更好。

* 3-牢记8086只是在8800完成之前的一个止步措施,始终是非常重要的,它主要用于嵌入式世界,以吸引8080/85客户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值