繁体   English   中英

汇编:段寄存器和偏移寄存器

[英]Assembly: Segment register & offset register

我在理解10H值来自何处时遇到了一些麻烦? 例子说ds = 1275H(?segment reg。)和bx:457H(?offset)为什么ds乘以10H。 他们的意思是1275是十六进制值(所以dec。值是4725)? 来自“计算机病毒小书”的精确文本

段寄存器指向一个16字节的内存块......

这就是混乱开始的地方。 段寄存器指向65536字节的存储器块,偏移寄存器指示要添加到该65536字节块的起始位置的字节数。 在16字节块的开头添加字偏移是没有意义的!

这些64KB块在内存中重叠很多。 它们的起始地址仅相差16个字节! 您可以将这些64KB块视为形成数组,然后段寄存器包含的是其元素的基于零的索引。

因此,这些块之间的间距是您所询问的10H的真正含义。

为了得到存储器位置的线性(实际)地址,我们需要将段寄存器中的值乘以16(用十六进制表示法表示为10h),然后将偏移量加到它上面。

这里的关键词是“段寄存器指向16字节的存储器块”。 如果将整个存储器排列为16字节块,则段寄存器(例如DS)将包含块的编号。

要从段寄存器的值到线性地址,必须乘以16,这与十六进制数10相同,后者通常写为10H。

计算段的起始地址后,添加偏移寄存器。

是的,1275H是十六进制数,就是“H”表示的数字。 它对应于4725十进制数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM