🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #436

Re: 教えてください。

#436
From: Munesato Nakada
Date: Mon, 13 Apr 1998 00:00
63 lines
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-mail
References: <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