0

次のコード セグメントの翻訳に取り組んでいるとき、誰かptrそこにいる目的を教えてもらえますか?

cmp byte ptr [eax], 0

ptr はラベルで、値は次のとおりです。

(++>

私の理解でcmpは、左側の値と右側の値を比較します。

3 番目のパラメータ ( ptr) が関係していますが、これはどういう意味ですか? ptrAND のメモリアドレス値をeaxと比較してい0ますか?

誰かが私のためにそれを英語に翻訳できたら、それは素晴らしいことです. ありがとう。

4

3 に答える 3

4

インテルのアセンブラー構文では、オペランドのサイズについて明示的に言及されていません。あなたが言うときmov eax, 0、32ビットのオペランドが必要であることは明らかです(eax32ビット幅であるため)、mov al, 08ビットを意味します。

ただし、メモリ位置を逆参照する場合、オペランドのサイズを推測する方法がないため、8 ビット、16 ビット、32 ビット、および 64 ビットのオペランドに対してそれぞれ 、byte ptrword ptrまたはdword ptrと言って明示的に指定する必要があります。quad ptr

したがって、命令は、の値でアドレス指定されたメモリの 1 バイト (8 ビット)eaxを 0 と比較しています。

于 2013-10-30T19:05:41.197 に答える
0

PTR は命令オペランドではなく、最初のオペランドのオプションです。

于 2013-10-30T20:11:03.340 に答える
0

eax何らかのアドレスへのポインタが含まれています。命令 cmopares は、バイト値eaxが指す int を 0 にします。

に似ている:

char *p = addr;
if(*p == 0)
   ...
于 2013-10-30T19:04:35.817 に答える