如何检查数字是否仅由字母构成

时间:2015-05-24 16:42:25

标签: assembly

我想知道如何确定一个数字是否完全由字母构成。 例如,数字AAAA / BBBB / FABE等等是仅包含字母的数字。 另一方面,数字ABC6中有一个数字,因此,它不是字母数字。

2 个答案:

答案 0 :(得分:1)

您想知道只有在将数字转换为十六进制时,存储在某个寄存器中的数字编号是否包含字母?正确?

这是同样的问题:...如果十六进制表示只包含数字> = N而你的情况下N是0xA。

如果也不允许前导零(在这种情况下你必须指定十六进制数字!)a将建议以下算法:

屏蔽十六进制数的“偶数”位置,并从每个位置减去0xA。然后检查是否有进位/借入“奇数”位置。

对数字的“奇数”位置执行相同操作。如果您使用数字的整个宽度(例如32位数字的8位数字),您还必须从高位数检查进位!

在x86汇编中,对于8位十六进制数字,此算法看起来像这样:

mov EAX, number_to_be_tested
and EAX, 0xF0F0F0F ; Mask even digits
sub EAX, 0xA0A0A0A ; Subtract 0xA from even digits
test EAX, 0xF0F0F0F0 ; Check for a carry/borrow into an odd digit
jnz contains_numbers
mov EAX, number_to_be_tested
and EDX, 0xF0F0F0F0 ; Do the same with teh odd digits...
sub EAX, 0xA0A0A0A0
jc contains_numbers ; Special case: The uppermost digit...
test EAX, 0xF0F0F00
jnz contains_numbers
jmp contains_letters_only

如果你想允许前导零(例如0x000ABCDE = 0xABCDE),你必须稍微修改一下这个算法......

答案 1 :(得分:0)

这可能是我在膝盖上写的一种方式。我不是说这是最好的。

module.map