![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?5a7ff87)
アセンブラでの記述について教えてください。
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) x86_32のGASの擬似命令 3 2023/06/07 19:55
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- Mac OS MacのFinderでmovファイルのサムネイルが表示されないのと、クイックルックが出来ません。 こ 3 2023/07/24 18:40
- ノートパソコン 拡張子の変換 6 2023/05/07 20:43
- その他(動画サービス) YMM4 で MOV ファイルが読み込まれているがプレビューされない 2 2022/07/25 18:36
- Visual Basic(VBA) いつもお世話になります 下記のコード実行すると エラーになります わかるかた教えてくれませんでしょう 6 2022/12/17 15:01
- その他(AV機器・カメラ) ピアノ演奏の録画録音 3 2022/10/28 14:01
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
エクセルを開いたらカウントし...
-
ある一定時間の最高値と最小値...
-
VBAマクロにての絶対値
-
セルに入ってる数式を他のセル...
-
エクセル インデックスを用い...
-
Excel 範囲指定スクショについ...
-
エクセルで特定の文字列が入っ...
-
ワイルドカード「*」を使うとう...
-
「段」と「行」の違いがよくわ...
-
EXCEL VBA 文中の書式ごと複写...
-
excelのデータで色つき行の抽出...
-
エクセルで複数のシートのクリ...
-
Excelで数字を入れたら対応する...
-
フォルダ内の全てのファイルに...
-
シートをコピーする下記記述で...
-
チェックボックスをクリックし...
-
B列の最終行までA列をオート...
-
VBA 指定した列にある日時デー...
-
エクセル マクロ オートフィ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
VBAにて『元に戻すボタン』を作...
-
vbs 文字位置を中央に
-
select caseの入れ子
-
VBAバーコード照合 バーコード...
-
エクセルで選択したセルがディ...
-
指数関数近似を行うプログラム...
-
セルに入ってる数式を他のセル...
-
ある一定時間の最高値と最小値...
-
C++で、b[bit]の非負整数(例え...
-
xlookup関数の引数を利用して検...
-
スペース区切りのAND検索
-
エクセル インデックスを用い...
-
アセンブラでの記述について教...
-
VBAマクロ実行時エラーの修正に...
-
Worksheets メソッドは失敗しま...
-
マクロの「SaveAs」でエラーが...
-
エクセルで特定の文字列が入っ...
-
エクセルで離れた列を選択して...
-
B列の最終行までA列をオート...
おすすめ情報