Assembly 组件中的CMP和jmp变化
我感兴趣的是如何使用区间码和ASCII码来减少cmp的数量。Assembly 组件中的CMP和jmp变化,assembly,x86-16,cmp,Assembly,X86 16,Cmp,我感兴趣的是如何使用区间码和ASCII码来减少cmp的数量。 谢谢 ASCII码是数字。当您写入“0”时,汇编程序将其转换为30h=48d。正如您在字母“0”到“9”中看到的,它们由连续的数字30h..39h表示。因此,您可以撤消检查:如果al低于“0”或al高于“9”,则转到错误。您只需要两个比较: cmp al,'0' je true cmp al,'1' je true cmp al,'2' je true cmp al,'3' je true cmp al,'4' j
谢谢 ASCII码是数字。当您写入“0”时,汇编程序将其转换为30h=48d。正如您在字母“0”到“9”中看到的,它们由连续的数字30h..39h表示。因此,您可以撤消检查:如果
al
低于“0”或al
高于“9”,则转到错误。您只需要两个比较:
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码是连续的。因此,您只需检查是否(x>='0'&&x
cmp al,'0'
jb error ; jump if below
cmp al,'9'
ja error ; jump if above
true: