🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

4 total messages Started by BFnEDOBI J Mon, 13 Apr 1998 00:00
$B65$($F$/$@$5$$!#(J
#433
Author: BFnEDOBI J
Date: Mon, 13 Apr 1998 00:00
23 lines
1160 bytes
$BFnED!w#T#S#I$G$9!#(J
$B<!$N%W%m%0%i%`$O%*%U%;%C%HCM$N;;=P$NNc$NMM$J$N$G$9$,!"(J
$B@5$7$$$N$G$7$g$&$+(J(32$B%S%C%H#U#N#I#X$N>l9g!K!)(J

1     unsigned int start,end,offset;
2     void *p1,*p2;
3     start=(unsigned int)p1;
4     end=(unsigend inf)p2;
5     offset=end-start;

2$B9TL\$G$O#p#1!"#p#2$O%]%$%s%?JQ?t$H$7$F$N@k8@$@$1$G$9$h$M!)(J
$B#39TL\$G$O#p#1$NITDj$NFbMF$,#s#t#a#r#t$KF~$k$H;d$O;W$&$N$G$9$,!#(J
$B;d$O#3!"#49TL\$N#p#1!"#p#2$NA0$K!u1i;;;R$,$D$1$PBg>fIW$+$J$H(J
$B;W$&$N$G$9$,$I$&$G$7$g$&!#(J
$B$h$m$7$/$*4j$$$7$^$9!#(J


-- 
**************************************************
     $BElEE%=%U%H%&%'%"3t<02q<R(J  $B@)8f5;=Q%7%9%F%`It(J
             $BFnEDOBI'(J  E-mail:minamida@tsi.co.jp
**************************************************
Re: 教えてください。
#434
Author: Kentaro ONIZUKA
Date: Mon, 13 Apr 1998 00:00
38 lines
1953 bytes
In article <01bd669a$64962480$75910e0a@gxi117.tsi.co.jp> "南田和彦" <minamida@tsi.or.jp> writes:

 >次のプログラムはオフセット値の算出の例の様なのですが、
 >正しいのでしょうか(32ビットUNIXの場合)?
 >
 >1     unsigned int start,end,offset;
 >2     void *p1,*p2;
 >3     start=(unsigned int)p1;
 >4     end=(unsigend inf)p2;
 >5     offset=end-start;
 >
 >2行目ではp1、p2はポインタ変数としての宣言だけですよね?
 >3行目ではp1の不定の内容がstartに入ると私は思うのですが。
 >私は3、4行目のp1、p2の前に&演算子がつけば大丈夫かなと
 >思うのですがどうでしょう。
 >よろしくお願いします。

あの、何のオフセットとか知りたいんでしょうか?これだと、p1,p2 には、適
当な値が入るだけだから、start も end も offset も全部適当な値になって、
なにがなんだかわかりません。

前の質問にもあったけれど、

unsigned int start,end,offset;
char* p1="foo";
char* p2="bar";

start=(unsigned int)p1;
end=(unsigend inf)p2;
offset=end-start;

とかやれば、すくなくとも "foo" と "bar" の始まるポインタの位置とかその
オフセットは求まりますけれど、、、。それとも、上の 2行目と3行目の間に、
なんかp1,p2 を計算、とかこれらに代入するような行があるっていうのでしょ
うか?

鬼塚
Re: $B65$($F$/$@$5$$!#(B
#435
Author: Junn Ohta
Date: Mon, 13 Apr 1998 00:00
26 lines
1590 bytes
fj.comp.lang.c$B$K9T$-$^$9!#(B

fj.lang.c$B$N5-;v(B<01bd669a$64962480$75910e0a@gxi117.tsi.co.jp>$B$G(B
	minamida@tsi.or.jp$B$5$s$O=q$-$^$7$?!#(B
> $B<!$N%W%m%0%i%`$O%*%U%;%C%HCM$N;;=P$NNc$NMM$J$N$G$9$,!"(B
> $B@5$7$$$N$G$7$g$&$+(B(32$B%S%C%H#U#N#I#X$N>l9g!K!)(B

$B@5$7$/$J$$$G$7$g$&!#(B

> 2$B9TL\$G$O#p#1!"#p#2$O%]%$%s%?JQ?t$H$7$F$N@k8@$@$1$G$9$h$M!)(B
> $B#39TL\$G$O#p#1$NITDj$NFbMF$,#s#t#a#r#t$KF~$k$H;d$O;W$&$N$G$9$,!#(B

$B$*$C$7$c$k$H$*$j$G$9!#(B

> $B;d$O#3!"#49TL\$N#p#1!"#p#2$NA0$K!u1i;;;R$,$D$1$PBg>fIW$+$J$H(B
> $B;W$&$N$G$9$,$I$&$G$7$g$&!#(B

$B$=$N>l9g$O(Bp1$B!"(Bp2$B$H$$$&JQ?t$,(B($B%9%?%C%/>e$K(B)$B3d$jIU$1(B
$B$i$l$?%"%I%l%9$,(Bstart$B$H(Bend$B$KF~$j!"(Boffset$B$K$=$N:9J,(B
$B$,F~$k$3$H$K$J$j$^$9!#$3$l$O$*K>$_$N7k2L$G$O$J$$$G(B
$B$7$g$&!#$^$?!"$=$N(Boffset$B$,CM$H$7$F5a$^$C$?$H$7$F$b!"(B
$B$=$NCM$KMxMQ2ACM$O2?$b$J$$$G$7$g$&!#(B
--
$BB@ED=c(B(Junn Ohta) ($B3t(B)$B%j%3!<(B MA$B;v6HIt(B NSC/MA DBSG
ohta@src.ricoh.co.jp/JCF00656@niftyserve.or.jp
Re: 教えてください。
#436
Author: 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/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads