

アセンブラでの記述について教えてください。
CMDでのアセンブリで、
mov dx , [0200] (0200へは'ab'を代入しておく)
mov [0400] , dx
とすれば0400番地へabが複写されるのですが、これをmasmで
mov dx , data1
mov data2 , dx
data1 db 'ab'
data2 db '00'
とすれば「invalid instruction operands」というエラーが生じます。
dataのアドレス値を他に格納してから複写すると上手くいくのですが、お聞きしたいのは上記の違いです。
[0200]はmasmだと data1
また、
[0400]はmasmだと data2
実際のアドレス値は当然違いますが、これは理屈的に同じとならないのでしょうか?
なぜmasmの場合だと、
mov si , offset data1
mov di , offset data2
mov al , [si]
mov [di] , al
などのように、わざわざアドレス値を用いて遠まわしにしなければならないのでしょうか?
どなたかご教授のほどをお願いします。
No.1ベストアンサー
- 回答日時:
データサイズが違うからです。
dxは16ビットですが、data1はdb擬似命令により
定義されているので8ビットと解釈されます。
movにせよcmpにせよデータサイズが違う操作は
できません。
こういう時はオーバライドします。
mov dx,word ptr data1
尚、mov dx,[200]とかmov dx,[bx]の場合は
受け取り側、あるいは送り出し側のオペランドで
勝手にサイズを合わせるので問題がありません。
おまけ
16ビットのデータ交換ではaxを使うほうが命令が
1バイト少なくて済みます。条件分岐は前後に
飛べるバイトレンジが短いので、こういうケチり
かたも、必要なことがあります。
ご回答ありがとうございます。
データサイズが原因であるとは、うかつにも気がつきませんでした。
とても納得できました。
文句なしのベストアンサーとさせて頂きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
select caseの入れ子
-
VBAバーコード照合 バーコード...
-
マクロにてセルに文字表示
-
VBAにて『元に戻すボタン』を作...
-
最大値が0b100である3bit同士の...
-
マクロの「SaveAs」でエラーが...
-
【Excel関数】UNIQUE関数で"0"...
-
「段」と「行」の違いがよくわ...
-
エクセル 上下で列幅を変えるには
-
Excelのフィルター後の一番上の...
-
Excelで、あるセルの値に応じて...
-
【マクロ】実行時エラー '424':...
-
エクセルで離れた列を選択して...
-
エクセルで複数のシートのクリ...
-
エクセルVBA 配列からセルに「...
-
Excel グラフのプロットからデ...
-
VBA 別ブックからコピペしたい...
-
Excelで空白セル直前のセルデー...
-
VBAマクロ実行時エラーの修正に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
VBAにて『元に戻すボタン』を作...
-
select caseの入れ子
-
エクセルで選択したセルがディ...
-
配列の値を保持しながら要素を...
-
プログラムの記述方法について
-
VBAバーコード照合 バーコード...
-
VBAにて文字列の長さを取得...
-
1つのテーブルに重複している列...
-
VBAについて
-
vbs 文字位置を中央に
-
エクセルVBAのプログラム
-
VBA コード エラー対処
-
最大値が0b100である3bit同士の...
-
xlookup関数の引数を利用して検...
-
すべての組合せをシートに出力...
-
targetでクリックしたら○
-
アセンブラでの記述について教...
-
エクセルで簡単なオートシェイ...
-
指数関数近似を行うプログラム...
おすすめ情報