Article View: fj.lang.c
Article #436Re: 教えてください。
From: Munesato Nakada
Date: Mon, 13 Apr 1998 00:00
Date: Mon, 13 Apr 1998 00:00
63 lines
3003 bytes
3003 bytes
中田@青大です。
<01bd669a$64962480$75910e0a@gxi117.tsi.co.jp>の記事において
minamida@tsi.or.jpさんは書きました。
| 南田@TSIです。
| 次のプログラムはオフセット値の算出の例の様なのですが、
| 正しいのでしょうか(32ビットUNIXの場合)?
とりあえず、FreeBSD 2.2.2R(Intel x86)で試してみました。
作成したソース
1 #include <stdio.h>
2 void main(void){
3 unsigned int start, end, offset;
4 void *p1, *p2;
5 start =(unsigned int)p1;
6 end =(unsigned int)p2;
7 offset =end -start;
8 printf("start =%X, end =%X, offset =%X\n", start, end, offset);
9 }
これを試すと、私の環境では次のようになりました。
start =3, end =FFFFFFFF, offset =FFFFFFFC
これだけでは判りにくいので、コンパイラの吐いたアセンブリ・ソースを
参照すると、
.stabd 68,0,5 // 5行目
movl -16(%ebp),%eax // p1の内容(アドレス)をレジスタ eaxへ
movl %eax,-4(%ebp) // レジスタ eaxの内容を変数 startへ
.stabd 68,0,6 // 6行目
movl -20(%ebp),%eax // p2の内容(アドレス)をレジスタ eaxへ
movl %eax,-8(%ebp) // レジスタ eaxの内容を変数 endへ
.stabd 68,0,7 // 7行目
movl -8(%ebp),%edx // 変数 endの内容をレジスタ edxへ
subl -4(%ebp),%edx // レジスタ edxから変数 startの値を引く
movl %edx,-12(%ebp) // 結果を変数 offsetへ
のようになりました。多分これは正しいと思います。
どうせ書くなら、次のようにしたらどうでしょう?
こちらだと処理内容がよりはっきりしますし、また出力が変わります。
# 吐くアセンブリ・ソースがより良くなります。
1 #include <stdio.h>
2 void main(void){
3 unsigned int start, end, offset;
4 int a1, a2;
5 start =(unsigned int)&a1;
6 end =(unsigned int)&a2;
7 offset =end -start;
8 printf("start =%X, end =%X, offset =%X\n", start, end, offset);
9 }
出力はこちら。
start =EFBFD6E8, end =EFBFD6E4, offset =FFFFFFFC
それでは。
==============================================================
所 属 : 青森大学工学部 情報システム工学科3年
氏 名 : 中田 宗里
E-mail : is839@edu.aomori-u.ac.jp
Home : http://www.aomori-u.ac.jp/student/inform/is839/
Technical Details
Message-ID:
<6gsb3t$7el$1@news0.mono.aomori-u.ac.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<01bd669a$64962480$75910e0a@gxi117.tsi.co.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 106434,fc71488cf5570b81 X-Google-Attributes: gid106434,public From: is839@edu.aomori-u.ac.jp (Munesato Nakada) Subject: Re: 教えてください。 Date: 1998/04/13 Message-ID: <6gsb3t$7el$1@news0.mono.aomori-u.ac.jp> X-Deja-AN: 343519027 References: <01bd669a$64962480$75910e0a@gxi117.tsi.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Organization: Aomori University, Aomori, Japan. Newsgroups: fj.lang.c