[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[WitchTech 00427] Re: DS!=SS 対応コンパイラ?
- Subject: [WitchTech 00427] Re: DS!=SS 対応コンパイラ?
- From: 高橋 亮 <CQB04050@nifty.ne.jp>
- Date: Sun, 3 Sep 2000 03:17:27 +0900
高橋です、どうも。
>
> なるなると申します。
>
> > TurboC++の出力コードは、まさに、そのような対処を行っているものですから
、
> > これは正常に動作すると考えて良いと思います。
>
> そのとおりなんですが、ポインタは依然として near ですから、(「これでいいん
> でしょうか ?」っていうような話だと) まだまだはまる余地は残っているような気
> がします。
>
> こんなのどうでしょう ? > 元記事の方
試してみました。
DS!=CSでコンパイルしたときのみ以下の警告がでました。
Suspicious pointer conversion
問題のあるポインタの変換
だそうです。実行してみても正しい値はでません。
一応その部分を抜き出してみました。
生成されたコードはDS!=SSオプションに関わらず同じです。
; main()
; val = foo(height(buf), buf);
;
lea ax,word ptr [bp-4]
push ax
mov ax,4
push ax
call near ptr CGROUP:_foo
pop cx
pop cx
mov si,ax
; int foo(int n, char buf[])
; while (n-- > 0) {
; tmp += *buf++;
;
mov al,byte ptr [di]
cbw
add si,ax
inc di
C言語ソース
http://homepage2.nifty.com/amenity/sample2.txt
生成されたコード
http://homepage2.nifty.com/amenity/sample2a.txt
川俣さんのおかげでアセンブラの読解力がついたので読んでみます。
・・・だめですね。スタックへのポインタをfooへ渡しているのに
foo内でbyte ptr [di]としています。
結局このオプションでDS!=SSを無視できるわけではないようです。
ただ、この警告が出ることでDS!=SSではまる可能性が減るということでしょうか。
おかげさまでコンパイラのDS!=SSが何をしてくれるのかわかってきました。
ありがとうございます。
ML Archives