【发布时间】:2016-11-11 15:39:36
【问题描述】:
我很难理解 10H 值的来源?该示例说 ds=1275H (?segment reg.) 和 bx:457H (?offset) 为什么 ds 乘以 10H。他们是否意味着 1275 是十六进制值(所以 dec. 值是 4725)?
【问题讨论】:
-
请不要张贴文字图片。该网站上的一些用户是盲人。
标签: assembly cpu-registers x86-16
我很难理解 10H 值的来源?该示例说 ds=1275H (?segment reg.) 和 bx:457H (?offset) 为什么 ds 乘以 10H。他们是否意味着 1275 是十六进制值(所以 dec. 值是 4725)?
【问题讨论】:
标签: assembly cpu-registers x86-16
段寄存器指向一个16字节的内存块...
这就是混乱的开始。段寄存器指向一个 65536 字节的内存块,偏移量寄存器告诉要添加多少字节到这个 65536 字节块的开头。在 16 字节块的开头添加字偏移是没有意义的!
这些 64KB 块在内存中大量重叠。它们的起始地址仅相差 16 个字节!您可以将这些 64KB 块视为形成一个数组,然后段寄存器包含的内容是对其元素的从零开始的索引。
因此,这些块之间的间距才是您所询问的 10H 的真正含义。
为了获得内存位置的线性(真实)地址,我们需要将段寄存器中的值乘以 16(这在十六进制表示法中表示为 10h),然后加上偏移量。
【讨论】:
这里的关键词是“段寄存器指向一个 16 字节的内存块”。如果您将整个内存安排在 16 字节块中,则段寄存器(例如 DS)将包含该块的编号。
从段寄存器的值到线性地址,要乘以16,和十六进制数10一样,一般写成10H。
计算出段的起始地址后,加上偏移寄存器。
是的,1275H 是一个十六进制数字,这就是“H”的含义。对应十进制的4725。
【讨论】: