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