[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00417] Re: DS!=SS 対応コンパイラ?



なるなると申します。

 > <20000902003606.dd40fd2.20253@nifty.ne.jp>
 > From: CQB04050@nifty.ne.jp
 > Date: Sat,  2 September 2000 00:36:06 +0900

 > 私はWonderWitch用のコンパイラにPC9801用のTurboC++を使っているのですが
 > この前、マニュアルでDS!=SSにするオプションを見つけました。

# Borland C/C++ にもあります。(Turbo C 2.0 は知りません。)

 > 元プログラム
 > http://homepage2.nifty.com/amenity/sample.txt
 > 
 > DS!=SSオプションつきのアセンブラコード
 > http://homepage2.nifty.com/amenity/sample_a.txt

# このくらいなら、デバッグ情報だけ削除してそのまま書いてしまっても良いかも
しれません。


--sample.txt
#include <sys\bios.h>

void main()
{
   int i;
   int a[] = { 0,1,2,3,4,5,6,7,8,9 };

   text_screen_init();

   for(i = 0;i < 10;++i)
   {
      text_put_numeric(0,i,4,4,a[i]);
   }
   key_wait();
}

生成コードの該当個所だけ抜き出すと以下のようになっていて、この範囲では問題
ないと思います。

--from sample_a.txt
; DS != SS でコンパイル
; 配列の初期化 memcpy(ss:bp-20, ds:d@w+0, 20);
	push	ss
	lea	ax,word ptr [bp-20]
	push	ax
	push	ds
	mov	ax,offset DGROUP:d@w+0
	push	ax
	mov	cx,20
	call	near ptr N_SCOPY@

; 初期化はどちらでも ss にコピーしている。

; a[i] のアクセス
	mov	bx,si
	shl	bx,1
	lea	ax,word ptr [bp-20]
	add	bx,ax
	push	word ptr ss:[bx]  ; <--- 違う場所 ----------------------------

; 要素のアクセスは DS != SS を指定したときだけ ss を使用している。



ML Archives