[英]How to check if a number represents an uppercase character in NASM Assembly?
假设您有一个数字存储在EAX
。 如何检查此数字是否代表大写字符?
坦白说,我什么都没尝试。 我最接近的想法是创建一个大写字符数组('A','B','C,'D',...),然后检查EAX
是否等于这些字符中的任何一个。 在NASM组件中,有没有更简单的方法可以做到这一点?
我使用的是32位程序的64位CentOS。
如果您的字符是用ASCII编码的,则只需检查EAX
的范围是65到90(“ A”到“ Z”)即可。 对于其他编码(以Unicode为基数,请考虑变音符号),我认为答案根本不容易,您最终应使用操作系统中的API。
对于ASCII字符,类似的方法将起作用:
cmp eax,'A'
setnc bl ; bl = (eax >= 'A') ? 1 : 0
cmp eax,'Z'+1
setc bh ; bh = (eax <= 'Z') ? 1 : 0
and bl,bh ; bl = (eax >= 'A' && eax <= 'Z')
; bl now contains 1 if eax contains an uppercase letter, and 0 otherwise
假设您可以破坏al
,则是Michael的答案的较简单版本:
sub al, 'A'
cmp al, 'Z' + 1 - 'A'
setc al ; al now contains 1 if al contained an uppercase letter, and 0 otherwise
如果要分支,请根据setc
用jc
或jnc
替换setc
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.