汇编代码为2的补码

时间:2012-04-09 22:14:44

标签: assembly input x86

我只是想知道将十进制整数(由用户输入)转换为内存中2的补码表示的代码是什么。

示例:用户输入1234作为小数。我想在AX中存储04D2(2的补码)(因为我只允许使用字长串)

我正在使用80x86架构。

2 个答案:

答案 0 :(得分:1)

将数字字符串转换为整数非常简单:您一次读取一位数,将其转换为十进制数(通常从中减去“0”)。您可以获取现有值,将其乘以10,然后添加当前数字的值。

处理负数会增加一点难度。大多数人通过保持一个标志来表明如果以' - '开头则表示该数字为负数。然后,当他们转换了数字时,他们会否定是否设置了该标志。

然而,这确实有一个问题:转换最负数需要一些额外的工作,因为(在2的补码中)最负数的幅度大于你可以表示的正数(不使用更多位) 。例如,16位2的补码数范围为-32768到+32767,但您需要(至少)17位或无符号16位数来表示+32768。

编辑:将十进制数转换为整数后,您需要将整数转换为十六进制数,以十六进制显示。转换更容易一点。您反复除以16,其余为十六进制数字。您通常会使用类似“0123456789abcdef”的表格,并使用该余数来索引表格以获取显示的数字。您重复除法并使用余数直到您的红利为零。一个技巧是,这会产生 reverse 顺序的数字(从最小到最重要),所以你通常将它们放入一个缓冲区,从缓冲区的末尾开始,一路向前开始

答案 1 :(得分:-2)

它需要对位进行注释,然后加1 ...,但这仅是在您知道其是否为正数的情况下。 如果它的值为负,则必须取1,而不是相反的操作。它应该是2个周期。