assembly - 为什么使用 MSB 作为符号位?
问题描述
我正在阅读 Kip Irvine 的关于 x86 汇编编程的书,在解释有符号整数时,提到 MSB(最高有效位)用作有符号位,0 表示 +ve,1 表示 -ve,如果我不是错误的。但是,我不明白为什么要使用 MSB 来表示符号。如果改用 LSB,恕我直言,更大的数字可能已存储在相同数量的位中。是因为 LSB,即第一位(第零位的位),是表示奇数所必需的吗?
解决方案
让 MSB 表示符号允许使用完全相同的硬件(晶体管)集执行无符号和有符号加法。
这与有符号整数对非负值使用与无符号相同的位模式有关,如果将符号位放在其他任何地方,情况就不会如此。这意味着像 C 这样的操作(unsigned)my_intvar
是免费的,而不需要移位或循环指令,或一些特殊的转换指令。
AFAIK,这是符号位最合乎逻辑和最不令人惊讶的位置。实际上,如果想要一个 16 位有符号数来允许对值 65534 进行编码,则需要放弃奇数。
从数学角度来看,认为每个位具有不同的权重也更有意义:1,2,4, ..., 16384, 32768 用于无符号 16 位值,但 1,2,4, ..., 16384 , -32768 用于有符号值。这简化了硬件算法的分析,例如允许有符号和无符号乘法共享绝大多数逻辑。
推荐阅读
- java - 具有 ResponseEntity 的 Spring Boot 控制器测试始终返回空响应
- javascript - 如何创建 react-chartjs 插件
- excel - VBA ListBox 不返回任何值
- postgresql - 在 Django-Graphene 中返回 Django ORM 联合结果
- react-native - @react-navigation/drawer 中的 toggleDrawer 在 React-Native 中不起作用
- python - django vs code中的块没有突出显示
- vue.js - Vue 3 axios 发送表单数据
- python - 连接数据框列表并包含原始数据框名称作为键
- python - 为什么我收到 ImportError: cannot import name 'PieChart' from 'openpyxl'
- .net-core - Serilog.Sinks.EventLog - 事件 ID