装配中的CMP和jmp变化

时间:2015-11-09 11:30:05

标签: assembly x86-16 cmp

 cmp al,'0'
 je true
 cmp al,'1'
 je true
 cmp al,'2'
 je true
 cmp al,'3'
 je true
 cmp al,'4'
 je true
 cmp al,'5'
 je true
 cmp al,'6'
 je true
 cmp al,'7'
 je true
 cmp al,'8'
 je true
 cmp al,'9'
 je true
 jne error 

我很感兴趣如何使用间隔和ASCII码来减少数量的cmp。 谢谢。

1 个答案:

答案 0 :(得分:3)

ASCII码是数字。当你写'0'时,汇编程序将它转换为30h = 48d。正如您在this ASCII table中看到的那样,字母'0'到'9'由连续数字30h..39h表示。因此,您可以撤销支票:如果al低于'0'或al高于'9',则转到error。您只需要进行两次比较:

cmp al,'0'
jb error      ; jump if below
cmp al,'9'
ja error      ; jump if above
true: