请问这个最小值是怎么算的?
我算出来是1000H,但是用1000H去推算出来是1FFFFH,看网上的答案有1001H,有点不明白
首先,你的问题描述不严谨。不是段地址应该满足什么,而是段寄存器中存放的值应该满足什么。我并不是在教条概念,段基址就是段基址,和寄存器中存放的值不是一回事(保护模式就更不是一回事了),所以请题主一定要明辨。
实模式下,段寄存器中存放的值必须对齐至16,所以,若取偏移地址最大,可以使用整数Ceil除法对齐至16,如下:
(0x20000 - 0xffff + 0xf) >> 4 == 0x1001
即,最小取值是0x1001。
又因为偏移量是无符号整数,所以最大取值是0x2000。
你这个除法有截断,所以并不相等。是
$$\frac{10001H}{16} > 1000H$$
$$\frac{FFFFH}{16} > FFFH$$
而且,实际要解的也不是等于,而是:
$$20000H \le sa \times 16 + FFFFH$$
从而:
$$sa \ge \frac{20000H-FFFFH}{16}$$
于是,解法1是:
$$sa \ge \frac{20000H-FFFFH}{16} = \frac{10001H}{16} > 1000H$$
大于 1000H 的最小整数时 1001H ,经检验满足条件。
而解法二是:
$$sa \ge \frac{20000H-FFFFH}{16} = \frac{20000H}{16} - \frac{FFFFH}{16} < 2000H - FFFH = 1001H$$
(注意 FFFFH / 16 前是减号)
从这个式子是得不到 sa 的范围的。
1. 内存与地址 图 17.1. 邮箱的地址 我们都见过像这样挂在墙上的很多个邮箱,每个邮箱有一个房间编号,根据房间编号找到相应的邮箱投入信件或取出信件。内存与此类似,每个内存单元有一个地址(Address),内存地址是从0开始编号的整数,CPU通过地址找到相应的内存单元,取其中的指令或者读写其中的数据。与邮箱不同的是,一个地址所对应的内存单元不能存很多东西,只能存一个字节,以前讲过的int、fl
我有这样的结构: 在类< code >集合内部。 当我尝试删除列表的最后一个元素时,使用此函数: 前一个节点的< code>*next仍然指向现在为空的地址位置,如何将< code >目标内存位置设置为< code>null? 有关详细信息,这是我的函数
问题内容: 我正在尝试调试使用很多指针的二进制文件。有时为了快速查看输出以找出错误,我打印了对象的地址及其对应的值,但是对象地址是随机的,这违背了快速检查的目的。有没有一种方法可以暂时/永久禁用此功能,以便每次运行程序时都获得相同的值。 哎呀。操作系统是 问题答案: 在Ubuntu上,可以使用…禁用它。 在Windows上,这篇文章可能会有所帮助… http://blog.didiersteven
说明 地址URL /v1/common/Address/getAddress 支持格式 {url}?k1=v1&k2=v2&k3=v3&... HTTP请求方式 GET 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的AppKey access_token string yes 授权
问题内容: 这是关于Linux中的C语言。 我在其中创建2个子进程。然后,在两个子进程中都运行一个函数,其中有一个局部变量。我在其中写一些价值。然后,我用打印此变量的地址。 这两个过程都打印相同的地址。我以为每个孩子都会得到父母记忆的(独立)副本。我需要每个进程都有自己的变量。我该怎么办或我做错了什么? 问题答案: 您需要了解,物理内存与进程的虚拟地址空间之间存在脱节。 每个进程都有 自己的 4G
问题内容: 正如“具有ipv6功能的inet_aton和inet_ntoa功能所需 ”中所要求的那样,当前没有用于存储IPv6地址的MySQL函数。建议用于存储/插入的数据类型/功能是什么?(我不打算将它们存储为字符串)。我也不想将IPv6地址分为2个INT。 问题答案: 怎么样: 那应该足够有效。 如该错误报告中所述,当前在MySQL服务器中没有将文本IPv6地址从二进制转换为二进制的功能。您需