我只是想知道将十进制整数(由用户输入)转换为内存中 2 的补码表示的代码是什么。
示例:用户输入 1234 作为小数。我想在 AX 中存储 04D2 (二进制 2 的补码表示)(因为我只允许使用字长字符串)
我正在使用 80x86 架构。
将一串数字转换为整数非常简单:一次读取一个数字,然后将其转换为十进制数(通常通过从中减去“0”)。您将现有值乘以十,然后加上当前数字的值。
处理负数只会增加一点难度。大多数人这样做是通过保留一个标志来表示如果它以'-'开头的数字是负数。然后,当他们转换数字时,如果设置了该标志,他们就会否定。
但是,这确实有一个问题:转换最大负数需要一些额外的工作,因为(在 2 的补码中)最大负数的幅度大于您可以表示为正数的幅度(不使用更多位)。例如,16 位 2 的补码范围从 -32768 到 +32767,但您需要(至少)17 位或无符号 16 位数字来表示 +32768。
编辑:将十进制数字转换为整数后,您需要将整数转换为十六进制数字才能以十六进制显示。这种转换要容易一些。您反复除以 16,余数成为下一个十六进制数字。您通常会使用像“0123456789abcdef”这样的表格,并使用该余数来索引表格以获取要显示的数字。您重复除法并使用余数,直到您的股息为零。一个技巧是,这会以相反的顺序(从最低有效位到最高有效位)产生数字,因此您通常将它们放入缓冲区中,从缓冲区的末尾开始,然后朝着开头前进。
它需要注意位,然后加 1 ......但只有当你知道它是否为正时。如果它的负数你必须取1,那么不是它,相反的操作。它应该是2个周期来做。