Irvine32链接库的isdigit源代码
首先回顾一下0~9这10个字符以ASCII码表示,它们的二进制、十六进制、十进制分别是什么。
二进制 | 十进制 | 十六进制 | 字符 |
00110000 | 48 | 30H | 0 |
00110001 | 49 | 31H | 1 |
00110010 | 50 | 32H | 2 |
00110011 | 51 | 33H | 3 |
00110100 | 52 | 34H | 4 |
00110101 | 53 | 35H | 5 |
00110110 | 54 | 36H | 6 |
00110111 | 55 | 37H | 7 |
00111000 | 56 | 38H | 8 |
00111001 | 57 | 39H | 9 |
Isdigit子过程的功能是,检查存放在AL寄存器里的内容,按照ASCII标准是否可以解释为字符0~9,如果是ZF=1,否则ZF=0。源代码如下:
Isdigit PROC
cmp al, 00110000b
jb ID1 ;al如果小于00110000b那么相减会得负数,证明al小于0。ZF自动被设置为0。
cmp al, 00111001b
ja ID1 ;al如果大于00111001b那么相减结果正数,证明al大于0。ZF自动被设置为0。
test ax,0 ;如果以上都通过,利test将ZF设置为1。
ID1: ret
Isdigit ENDP