1
 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 を削減する方法に興味があります。ありがとう。

4

1 に答える 1

3

ASCII コードは数字です。'0' を書き込むと、アセンブラは 30h = 48d に変換します。この ASCII テーブルでわかるように、文字 '0' から '9' は連続した数字 30h..39h で表されます。したがって、チェックを逆にすることができます。al「0」未満またはal「9」を超える場合は、 goto error. 必要な比較は次の 2 つだけです。

cmp al,'0'
jb error      ; jump if below
cmp al,'9'
ja error      ; jump if above
true:
于 2015-11-09T12:29:08.063 に答える