2的补码的汇编代码

问题描述 投票:-1回答:2

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

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

我正在使用80x86体系结构。

assembly input x86
2个回答
1
投票

将一串数字转换为整数通常非常简单:您一次读取一个数字,然后将其转换为十进制数字(通常通过从中减去'0')。您将现有值乘以十,然后加上当前数字的值。

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

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

编辑:将十进制数字转换为整数后,需要将整数转换为十六进制数字以十六进制显示。这种转换要容易一些。您反复除以16,其余的变为下一个十六进制数字。通常,您将使用“ 0123456789abcdef”之类的表,并使用该余数索引该表以获取要显示的数字。您重复除法并使用余数,直到分红为零。一个窍门是,它会按reverse顺序生成数字(从最低到最高),因此通常将它们放入缓冲区,从缓冲区的末尾开始,一直到开头。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.