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

以下のCをx86_32のアセンブラに落とすと下記の様になるのですが、アセンブラのアセンブラ指令の
.zero 4の意味ですが、
ここはCでは8バイトのdwordにデータ12345Lを入れているので、最初の4バイトに.longで12345を入れて、後の4バイトに.zero 4で0を入れているという理解で良いのでしょうか?webを検索してみたのですが、アセンブラ指令で.zero nを説明してくれているサイトが見つかななかったのですが、良いサイトがある場合は、教えて下さい。

(C言語)
1 /* Program ex3-75.c */
2 //#include <stdio.h>
3
4 union un_def {
5 struct st_def {
6 int dn;
7 int up;
8 } word;
9 long dword;
10 }un_dat = {12345L};
11
12 int main() {
13 //printf("%ld\n", un_dat.dword);
14 un_dat.word.dn = 123;
15 un_dat.word.up = 456;
16 //printf("%d %d\n", un_dat.word.dn, un_dat.word.up);
17 }
(x86_32アセンブラ)
1 .file "ex3-75.c"
2 .text
3 .globl un_dat
4 .data
5 .align 4
6 .type un_dat, @object
7 .size un_dat, 8
8 un_dat:
9 .long 12345
10 .zero 4
11 .text
12 .globl main
13 .type main, @function
14 main:
15 .LFB0:
16 .cfi_startproc
17 pushl %ebp
18 .cfi_def_cfa_offset 8
19 .cfi_offset 5, -8
20 movl %esp, %ebp
21 .cfi_def_cfa_register 5
22 movl $123, un_dat
23 movl $456, un_dat+4
24 movl $0, %eax
25 popl %ebp
26 .cfi_restore 5
27 .cfi_def_cfa 4, 4
28 ret
29 .cfi_endproc
30 .LFE0:
31 .size main, .-main
32 .ident "GCC: (Debian 8.3.0-6) 8.3.0"
33 .section .note.GNU-stack,"",@progbits

A 回答 (3件)

gccが使っている gas (GNU assembler)ですね。


公式リファレンスに説明があります。
https://sourceware.org/binutils/docs/as/index.html

.zeroのページは、https://sourceware.org/binutils/docs/as/Zero.html

一般に、公式リファレンスのURLは、Wikipeaiaで調べると、
(今回は https://ja.wikipedia.org/wiki/GNU%E3%82%A2%E3%82 …
その最後の方の外部リンクに載ってます。公式リファレンスがあればですが。
    • good
    • 0

ほそく.



「8バイトのdwordにデータ12345Lを入れている」のところ, どうして「『8バイトのdword』に『データ12345L』を入れている」と解釈した?
    • good
    • 0
    • good
    • 0

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


このQ&Aを見た人がよく見るQ&A