2016-03-20 6 views
0
var1 db 20 

;--------code 1------- 
lea bx, var1 
mov byte ptr[bx],40 

;--------code 2------- 
lea bx,var1 
mov [bx], 40 

これはどちらも有効ですか?同じですか?はいの場合は、バイトptrを使用する理由は何ですか?これらのコードはどちらも同じことでしょうか?

+1

_ "blを取ることができるバイトを変更したければ" _あなたは 'mov [bl]、40'を意味しますか?それは妥当ではなく、たとえそれが同じであっても同じ意味を持ちません。 – Michael

+2

_ "これらのコードはどちらも同じことをしますか?"いくつかのアセンブラはそれらを同じように扱い、あるものはそうでないかもしれない。 immediate 40のサイズは不明です。これが 'byte ptr'が使われている理由です。 – Michael

+2

'byte ptr'を明示的に使って* byte *を移動すると、アセンブラは移動されるデータのサイズを推測しなければならず、あなたのケースで間違ったサイズ(ワードのように16ビット) 。 –

答えて

2

いいえ、そうではありません。

最初のコードには、サイズ指定子:byte ptrが含まれています。これがなければ、アセンブラにソースとデスティネーションのサイズに関するヒントを与えることはありません。 の状況(例えば、コードの全体的なアセンブリを制御するさまざまな指令)が同じように実行されることがわかっている間は、これは頼りにされません。

曖昧に思えるかもしれないのは、サイズ指定なしでmov var1, 40と書かれている可能性があるということです。しかし、生成されたコードを逆アセンブルする場合は、アセンブラが、var1 db行のヒントを使用してシーンの背後にある問題を処理したことがわかります。これは、ワード、ワードなどではなくバイトであることを示します。

mov byte ptr [var1], 40 
関連する問題