Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 组件中的CMP和jmp变化_Assembly_X86 16_Cmp - Fatal编程技术网

Assembly 组件中的CMP和jmp变化

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码来减少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'
 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: