在AVR中,为什么有时有时只取带符号的数字的二进制补码?

用户名

我目前正在为考试做准备,但是我订购了自己的Arduino套件,并且想自己了解更多。

我正在为这堂课学习MULSU和MULS。这是他给我们的一个例子:

LDI r16, 150
LDI r17, 10
MULS r16, r17

;-106 * 10 = -1060
;R1:R0 = 0xFB:0xDC

我不明白的是为什么我们不取10的补码,而取150的补码。我想,因为它们都是带符号的,所以我们要取两者的补码,然后相乘。如果数字在一定范围内,是否经过签名可以不必更改?我注意到这在AVR中有很多应用,我觉得这是我需要了解的内容,以便获得该领域的技能。

谢谢

用户名

我假设我们在这里处理8位寄存器。

您提到的两个数字都可以由bitvector编码10010110当您将其阅读为无符号数字时,表示150。当您将其阅读为二进制补码时,则表示-106。

如果数字在一定范围内,是否经过签名可以不必更改?

好问题。要查看发生了什么,您可能想要列出长度为8的所有可能的位向量,并尝试将它们解释为无符号和有符号数字:

         unsigned signed
00000000        0      0
00000001        1      1
00000010        2      2
...
01111101      125    125
01111110      126    126
01111111      127    127
10000000      128   -128
10000001      129   -127
10000010      130   -126
...
11111101      253     -3
11111110      254     -2
11111111      255     -1

无符号整数的范围是0 .. 255,而两个补码数字的范围是-128 .. 127但是正如您所看到的,只要最高有效位是0,则无符号解释和有符号解释是相同的。

因此,为了提示您问题的答案:

我不明白的是,为什么我们不采用10的二进制补码,而是采用150的二进制补码。

我认为您使用的汇编语言不允许您编写带符号的数字。目的是将-106和10相乘,如您的老师的注释所示,但汇编程序可能只理解未签名的数字。这就是为什么您要编写与(预期)有符号数具有相同编码的无符号数。对于-106,恰好是150(均编码为10010110),对于10,恰好是10(均编码为00001010)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么二进制文件上的grep -P有时匹配错误的字节?

来自分类Dev

链表二进制插入排序,错误216,有时有效

来自分类Dev

为什么写文件二进制方法有时返回一个字母而其他一个十六进制?

来自分类Dev

C-当负数始终被编码为其二进制数的2的补码时,负数char中的带符号位(-128)在哪里?

来自分类Dev

为什么.rstrip()有时有效,但有时却无效?

来自分类Dev

将原始的14位二进制补码转换为带符号的16位整数

来自分类Dev

带符号的16位整数是否与二进制补码16位整数相同?

来自分类Dev

将整数转换为带符号的2的补码二进制字符串

来自分类Dev

在Scala 2.13中,为什么有时有时无法显式地召唤类型类?

来自分类Dev

为什么有时有时无法编辑Google表格公式行距?

来自分类Dev

为什么有时有时可以从右边折叠无限个列表?

来自分类Dev

为什么有时有时需要手动重启路由器?

来自分类Dev

为什么有时有时首选关键代理而不是配置文件?

来自分类Dev

为什么有时有时需要手动导入密钥?

来自分类Dev

为什么Javascript将数字视为二进制补码

来自分类Dev

为什么递归二进制搜索有时会导致某些但不是全部不存在的输入的堆栈溢出?

来自分类Dev

python中数字的二进制补码

来自分类Dev

python中数字的二进制补码

来自分类Dev

使用位掩码将有符号整数转换为二进制补码

来自分类Dev

Boost二进制序列化有时不起作用。解析的数据有时会损坏

来自分类Dev

在Java中,为什么在创建新对象时有时将父类放在左侧?

来自分类Dev

为什么typeof有时只抛出ReferenceError?

来自分类Dev

在Java中将24位二进制补码转换为带符号的十进制数

来自分类Dev

如何将带符号的十进制转换为十六进制的24位二进制补码带符号数

来自分类Dev

为什么 console.log(undefined) 有时有效,但有时无效?

来自分类Dev

为什么这个 file_get_contents() 有时有效,有时无效?

来自分类Dev

将带符号的10位二进制数字转换为十进制?

来自分类Dev

为什么在具有docker-compose的Docker容器中,Python进程的父pid有时有时为0?

来自分类Dev

为什么有时在Javascript中,函数参数前会有美元符号($ arg)?

Related 相关文章

  1. 1

    为什么二进制文件上的grep -P有时匹配错误的字节?

  2. 2

    链表二进制插入排序,错误216,有时有效

  3. 3

    为什么写文件二进制方法有时返回一个字母而其他一个十六进制?

  4. 4

    C-当负数始终被编码为其二进制数的2的补码时,负数char中的带符号位(-128)在哪里?

  5. 5

    为什么.rstrip()有时有效,但有时却无效?

  6. 6

    将原始的14位二进制补码转换为带符号的16位整数

  7. 7

    带符号的16位整数是否与二进制补码16位整数相同?

  8. 8

    将整数转换为带符号的2的补码二进制字符串

  9. 9

    在Scala 2.13中,为什么有时有时无法显式地召唤类型类?

  10. 10

    为什么有时有时无法编辑Google表格公式行距?

  11. 11

    为什么有时有时可以从右边折叠无限个列表?

  12. 12

    为什么有时有时需要手动重启路由器?

  13. 13

    为什么有时有时首选关键代理而不是配置文件?

  14. 14

    为什么有时有时需要手动导入密钥?

  15. 15

    为什么Javascript将数字视为二进制补码

  16. 16

    为什么递归二进制搜索有时会导致某些但不是全部不存在的输入的堆栈溢出?

  17. 17

    python中数字的二进制补码

  18. 18

    python中数字的二进制补码

  19. 19

    使用位掩码将有符号整数转换为二进制补码

  20. 20

    Boost二进制序列化有时不起作用。解析的数据有时会损坏

  21. 21

    在Java中,为什么在创建新对象时有时将父类放在左侧?

  22. 22

    为什么typeof有时只抛出ReferenceError?

  23. 23

    在Java中将24位二进制补码转换为带符号的十进制数

  24. 24

    如何将带符号的十进制转换为十六进制的24位二进制补码带符号数

  25. 25

    为什么 console.log(undefined) 有时有效,但有时无效?

  26. 26

    为什么这个 file_get_contents() 有时有效,有时无效?

  27. 27

    将带符号的10位二进制数字转换为十进制?

  28. 28

    为什么在具有docker-compose的Docker容器中,Python进程的父pid有时有时为0?

  29. 29

    为什么有时在Javascript中,函数参数前会有美元符号($ arg)?

热门标签

归档