【发布时间】:2016-02-26 18:45:13
【问题描述】:
我目前正在编写一个程序,它接收密码并根据某些标准检查强度,我无法确定我的逻辑是否适合检查大写字母。
mov cx, count
mov bx, OFFSET pw
upper_loop:
mov ax, [bx]
cmp dx, count
je upper_msg ; prompt user that no uppercase letter was entered
sub ax, 'A'
cmp ax, 'Z' - 'A'
jle lower_check
inc bx
inc dx
jmp upper_loop
【问题讨论】:
-
是的,看起来是正确的,除了你处理的是 16 位而不是 8 位。我不认为你在这里处理 unicode?所以在任何地方都将
ax更改为al。 -
哪个字符集和编码? ('A' - 'Z' 不太可能是您的程序从中获取输入的字符集中唯一的大写字母。这就是为什么有
isupper()的库。)(如果您只想考虑 'A'-' Z',让你的用户 [以及你的代码维护者] 休息一下,告诉他们。) -
应该是 8086 或 x86 而不是 x8086,其中 x 是通配符,因此 x86 表示 8086、80186、80286、80386、80486、80586、80686 甚至 8088。这些也是统称为 IA-32 处理器。 [现在,X64 完全不同了:一个在扩展 64 位架构上包含 x86 指令的处理器。我想这就是您透明地运行 x86 程序的原因。]
标签: assembly x86 masm uppercase