質問: 他のサイトでも掛け持っているのですが 知恵袋 なんか変数宣言について調べたのですがなかなか有益な情報がつかめないので 教えてください。 ほんとは参考書など買いたかったのですが、お金がないので・・・ (仮想環境はパソコン壊れたからできない・・・) 前回の質問 でいただいた回答で・・・ ``` .text msg: .ascii "hello world\n" msgend: .equ len, msgend - msg .globl _main _main: subl $12, %esp movl $len, 8(%esp) movl $msg, 4(%esp) movl $1, (%esp) call _write addl $12, %esp ret ``` というコードをいただきました。 (回答者本人に質問するべきなのかもしれませんが、質問タイトルと 話が変わってしまうのでやめました。) 私が理解できないのはここです。 ``` .text msg: .ascii "hello world\n" msgend: .equ len, msgend - msg ``` .textから下の変数宣言の場所(参考サイト)からわかりません。 msg: .ascii "hello world\n" ここは変数msgにアスキー文字列を代入する・・・ですよね? msgend: .equ len, msgend - msg これはなんですか? 私の認識の範囲で言うならば変数masgendに .equ len, msgend - msgを代入する・・・(絶対違う) masgendが特別な何かだと思ったのですが ぐぐっても出てこないことから そうではないみたいです。 ここはどういうものなのでしょうか? "アセンブリ言語 変数 宣言" みたいなワードで調べたのですが欲しい情報を手に入れられません。 どうやって調べたらいいでしょうか? (C言語とかより、資料がないですね・・・ 英語ならあるかもしれないけど・・・)
回答: > > msg: .ascii "hello world\n" > > > ここは変数msgにアスキー文字列を代入する・・・ですよね? > > > 高級言語で一番近い表現を探せばそのとおりですが、その考え方ではアセンブリ言語は(というか次の行が)理解できません。 y_waiwaiさんの回答にもありますが アドレスに「msg」と名付け、そのアドレスから「hello world\n」を配置です。 > > msgend: .equ len, msgend - msg > > > 見たことのない文法ですがたぶん文脈からして、 msgend: 文字列の終わった地点のアドレスに「msgend」と名付け、 .equ len, msgend - msg それはそれとして、「len」という定数を「msgend - msg」という内容で定義 ですかね。 msgend-msgで2つのアドレスの差、つまり文字列のデータ長が出ます。