[解決済み] .ascizと.stringアセンブラディレクティブの違いは何ですか?
質問事項
は知っています。
.ascii
ディレクティブのように、文字列の末尾にヌル文字を置くわけではありません。
.asciz
ディレクティブはそのために使われます。しかし
.string
ディレクティブは、文字列の末尾にヌル文字を置きます。
もし、NULL文字が付加されるのであれば、その後に続く
.asciz
と
.string
のディレクティブは?私にとっては
.asciz
と
.string
は冗長な気がします。
解決方法は?
によると binutilsドキュメント :
.ascii "string"
(ここでは念のため)
.asciiは、カンマで区切られた0個以上の文字列リテラルを想定しています。各文字列は、(自動的に末尾の0バイトを除いた)連続したアドレスに組み合わされます。
.asciz "string"
.ascizは.asciiと同じですが、各文字列の後に0バイトが付きます。.asciz』の『z』は『ゼロ』を意味します。
.string "str", .string8 "str",
.string16 "str", .string32 "str",
.string64 "str"
strの文字をオブジェクトファイルにコピーします。コピーする文字列は、カンマで区切って複数指定できます。特定のマシンに対して特別な指定がない限り、アセンブラは各文字列の終わりを0バイトでマークします。
...
string16、string32、string64 は、str の各 8 ビット文字をコピーしてそれぞれ 16、32、64 ビットに拡張する点が、文字列疑似オペコードと異なります。展開された文字は、ターゲットエンディアンのバイトオーダーで格納される。
いずれもエスケープシーケンスに対応し、複数の引数を受け付けます。との違いについては
.string
と
.asciz
:
-
特定のアーキテクチャにおいて
.string
はヌルバイトを追加しません。.asciz
常にそうなります。自分のシステムをテストするには、次のようにします。-
echo '.string ""' | gcc -c -o stdout.o -xassembler -; objdump -sj .text stdout.o
. - 1 バイト目が 00 の場合、ヌル文字が挿入されたことになります。
-
-
.string
は、文字を特定の幅(16、32、64)に拡張するサフィックスも持っていますが、デフォルトでは8です。
質問に対するコメントにあるように、ほとんどの場合、セマンティクス以外の違いはありませんが、技術的には2つの擬似オペは異なっています。
追記
結論から言うと、ドコモは する は、異なる挙動をする2つのアーキテクチャについて言及しています。
-
HPPA (HP Precision Architecture) - 0を追加しないが、特別な
.stringz
ディレクティブを使用します。 -
TI-C54X (Texas Instruments 社のいくつかの DSP チップ) - 各ワード (2 バイト) の上位 8 ビットをゼロフィルする。関連する
.pstring
ディレクティブは、文字をパックし、未使用のスペースをゼロ埋めします。
のソースコードを掘り下げると
gas/config
フォルダで確認することができ、さらにもう一つ見つけることができます。
-
IA64(インテル・アーキテクチャ)-。
.string
と.stringz
はHPPAのような挙動をします。
関連
-
[解決済み] g++ 出力: ファイルが認識されません。ファイル形式が認識されない
-
[解決済み] gcc エラー:間違った ELF クラスです。ELFCLASS64
-
[解決済み] .ascizと.stringアセンブラディレクティブの違いは何ですか?
-
[解決済み] 警告: 異なるサイズの整数への/からのポインタへのキャスト
-
gccコンパイルオプション -fpermissive
-
[解決済み] gccやldで位置非依存の実行ファイルを作成するための-fPIEオプションとは何ですか?
-
[解決済み] cygwinにgccをインストールするにはどうしたらいいですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】valgrindエラーの解釈 サイズ4の無効な書き込み
-
[解決済み】警告:イニシャライザーの周りに中括弧がないことを修復する方法?
-
[解決済み] gcc/g++とcc1/cc1plusの違いは何ですか?
-
[解決済み] シュール vs サール ... x86 アセンブリ gnu
-
[解決済み] LD_LIBRARY_PATH と LIBRARY_PATH の比較
-
[解決済み] gccやldで位置非依存の実行ファイルを作成するための-fPIEオプションとは何ですか?
-
[解決済み] なぜGCCはa*a*a*a*aを(a*a*a)*(a*a*a)に最適化しないのでしょうか?
-
[解決済み] どのフラグが -march=native で有効になるかを確認する方法は?
-
[解決済み] ライブラリを静的にリンクするようにgccに直接指示する
-
[解決済み] ライブラリヘッダからのGCC警告を抑制する方法は?