アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のx86_32アセンブラの擬似命令の.alignの使い方ですが、
.align 4は、テキストデータを2の4乗=16バイト境界で整列させると言う意味だと思うのですが、
実際にgdbでデバッグしてみると、mainは下記のように0x5655618c番地から始まっていて、
16進表示の最下位ビットが0になっていない様なのですが、どうしてなのでしょうか?
何か勘違いをしている様であれば、御教示ください。

(デバッグ)
Breakpoint 1, 0x5655618c in main ()
1: x/i $pc
=> 0x5655618c <main>: mov $0xd5,%al
2: /x $eax = 0xf7fbcdc8
3: /x $ebx = 0x0

(x86_32アセンブラ)
.file "examreg.s"
.text
.align 4
.globl main
main:
movb $0xd5, %al # al = 213
movb $3, %bl # bl = 3
subb %bl, %al # al = al - bl
ret    # end of program

A 回答 (3件)

正確にいうと,


.align 4

・4バイト境界
・(1<<4)バイト境界
のどちらかの意味になる. 「どちらの意味になるか」はシステム次第.

どうしてもどちらかを強制したければ .align ではなく .p2align または .balig を使うべし.
    • good
    • 1

> .align 4は、テキストデータを2の4乗=16バイト境界で整列させると言う意味だと思うのですが、



何も調べずに、alignが境界整列の意味だと言うことから自分で推測したのでしょうか?推測自体は悪い事ではない(むしろ好ましい)ですが、事実と整合しないときは、推測が間違っていたと言うことが明らかなので、事実に合うように考え直すか、推測するのをやめて調べるかしましょう。

.align 4 は4バイト境界です。
    • good
    • 1

マニュアル, 読んだ?

    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!