在x8086汇编语言中,如何检查char是否为大写字母?

时间:2016-02-26 18:45:13

标签: assembly x86 masm uppercase

我目前正在编写一个程序,它接受密码并根据某些标准检查强度,我无法确定我的逻辑是否正确检查大写字母。

    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

2 个答案:

答案 0 :(得分:2)

您的程序不正确,当密码包含例如' @'时可能会出现误报。 (0x40)而不是大写字母。减去' A'来自' @'产生-1(0xFF), 低于' Z' A' A' (0x19),所以你跳转到lower_check虽然没有遇到大写字母。我的主张是避免将字符作为带符号的数字进行比较:

  mov cx, count
  mov si, OFFSET pw
  cld
upper_loop:
  lodsb
  cmp al,'A'
  jb not_u
  cmp al,'Z'
  jbe lower_check ; Break if at least one uppercase letter is present.
not_u:loop upper_loop
upper_msg ; prompt user that no uppercase letter was entered

答案 1 :(得分:1)

  • 我没有看到你在运行循环之前清除了DX。
  • 您需要从字符串中检索字节,因为在每次迭代时,您只需将指针清除一次。
  • 您必须以无符号方式解释比较结果,否则从0到64的所有ASCII都将被视为大写字母!

坚持你的例子,这就是结果:

@page {
    margin: 7mm 4.2mm 5mm;
}