比较相同字母的大写和小写版本是否相等

Compare for equal to uppercase and lowercase versions of the same letter

你好,目前我正在用 asm 语言做一个项目,我想出了这段代码:

mov ah, 07h 
int 21h 
mov bl,al     

cmp bl, 'w'
je  up
cmp bl, 'W'
je  up 

代码是输入一个字母跳转到另一个函数。我想做的是比较它,即使它是大写或小写。有办法吗?

因为大写字母 [A,Z](ASCII 码 [65,90])与小写字母 [a,z](ASCII 码 [97,122])相差 32,并且由于 ASCII table 是有组织的,所有小写字母都设置了 bit5,而大写字母的 none 设置了 bit5。

成功case-insensitive

比较前可以or字符编码为32,然后只需要比较一次即可。

mov ah, 07h 
int 21h 
mov bl, al     

or  al, 32     ; Make case-insensitive
cmp al, 'w'    ; Only comparing lowercase, but accepting both cases
je  up

这条or al, 32指令的作用是:

  • 如果 AL 是 [A,Z] 它变成 [a,z]
  • 如果 AL 是 [a,z] 它仍然是 [a,z]