うちはgdb-5.0ですが、からさわさんと同じことが起きたのでちょっと 調べてみました。 ldscript(h8300h.x)の先頭には /* The memory size is 256KB to coincide with the simulator. Don't change either without considering the other. */ なんてことが書いてあり、gdbのソースを読んでみると、 h8300hの場合は (1<<18) つまりほんとに256Kbだけしか simulateしてくれないようです。 このへんは gdb-5.0/sim/h8300/inst.h にハードコーディングされており gdb-5.0/sim/h8300/compile.c で利用されていますが、 異なる値を渡せるようにはなっていません。 で、pushでもpopでも、それを行うとstack pointer(er7)は ((1<<18) - 1) == 0x3FFFF で AND されてしまいます。 そういうわけなので、この現象はsimulaterが確保するメモリを 制限したための仕様という感じです。 この制限から逃れるには、gdbのソースをちょと書き換えて再コンパイル するしかなさそうですが、今時のPCなら(1<<24)にしても平気かも:-)。 -- ----_--__---_-_-_-__--_-__-__---_-_----_--_-_---_---_---- _/ TANAKA Yoshitomo _// / Suginami-ku Tokyo, Japan _// serow@xxxxxxxxxxxxxxxxxx