- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アセンブラでの記述について教えてください。)
アセンブラでの記述について教えてください
このQ&Aのポイント
- アセンブラでの記述について質問です。CMDでのアセンブリで、mov命令を使用してデータをコピーする際、一部の命令では直接アドレスを使用する場合と、データを一旦別のアドレスに格納してからコピーする場合がありますが、それぞれの違いについて教えてください。
- masm(Microsoft Macro Assembler)の場合、データをコピーする際にはアドレスを用いて遠まわしにコピーする必要があるのですが、なぜ直接アドレスを使用できないのでしょうか?
- アセンブラでのデータのコピーについて、CMDとmasmの違いについて教えてください。CMDでは直接アドレスを使用してコピーが可能ですが、masmではアドレスを一度別の変数に格納してからコピーする必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
データサイズが違うからです。 dxは16ビットですが、data1はdb擬似命令により 定義されているので8ビットと解釈されます。 movにせよcmpにせよデータサイズが違う操作は できません。 こういう時はオーバライドします。 mov dx,word ptr data1 尚、mov dx,[200]とかmov dx,[bx]の場合は 受け取り側、あるいは送り出し側のオペランドで 勝手にサイズを合わせるので問題がありません。 おまけ 16ビットのデータ交換ではaxを使うほうが命令が 1バイト少なくて済みます。条件分岐は前後に 飛べるバイトレンジが短いので、こういうケチり かたも、必要なことがあります。
お礼
ご回答ありがとうございます。 データサイズが原因であるとは、うかつにも気がつきませんでした。 とても納得できました。 文句なしのベストアンサーとさせて頂きます。