7: 2010-01-26 (火) 21:48:58 lina |
現: 2024-01-08 (月) 12:58:58 lina |
| 2010/01/25 15:34 219,474 typeck.c | | 2010/01/25 15:34 219,474 typeck.c |
| 2010/01/25 15:34 42,890 typeck2.c | | 2010/01/25 15:34 42,890 typeck2.c |
| + | |
| gccディレクトリ内 | | gccディレクトリ内 |
| 2010/01/25 15:36 12,446 cppmain.n | | 2010/01/25 15:36 12,446 cppmain.n |
| 0x40 0x40 | | 0x40 0x40 |
| }; | | }; |
| + | |
| ばんざーい! 解析できたーーーーー!!!!! | | ばんざーい! 解析できたーーーーー!!!!! |
| | | |
| | | |
| -g01libc1内のものはみんなKタン作であることを確認。(考えてみれば、.nasや.askを書くヒトなんてKタンくらいではなかろうかとwww) | | -g01libc1内のものはみんなKタン作であることを確認。(考えてみれば、.nasや.askを書くヒトなんてKタンくらいではなかろうかとwww) |
| + | |
| + | |
| + | *gas2naskに例の問題が? [#m8ea55fc] |
| + | g01化された最新(たぶん)のgas2naskに例の |
| + | skip:adcl %edx, 20(%ecx) |
| + | skip:adcl %edx, 20(%esi) |
| + | エラーが出ることが判明。これを修理。~ |
| + | COLOR(blue){その意味では初のg01アプリのバージョンアップwつーことになるかな? www} |
| + | |
| + | ・・・あれ? 前のと違うじゃんこれ! |
| + | |
| + | **検証 [#na0f0d63] |
| + | 以前にも似たバグがあった。今、手動でbim2bin.cを中間コンパイルしてbim2bin.gasを作ってみた。みてみると・・・ |
| + | |
| + | あったあった。二箇所。 つまり、上記のエラーは、gas2naskが 「そんなオペランド知らんぞ!訳せないぞ!」とこういっているわけ。っということは、GASのオペランドと、Nasuku(NASM互換?)のオペランドをつき合わせて書いてあげればいい・・・ということかな??? |
| + | |
| + | (前回と違い、今回はgas2naskのソースは最新。うへぇ~! こまったぁ・・・・)~ |
| + | |
| + | これはようするに、i386 CPUのオペランドとニーモニックの一覧表がないとどーしよーもないぞおぉぉ!!! orz |
| + | |
| + | SIZE(22){''だれかそういうのの載ってるURL教えてけれ!!''}~ |
| + | ググっても全然みつからないよ・・・orz・・・ |
| + | |
| + | **手がかりがあったぞ [#kb1378d6] |
| + | adclは、''拡張加減算''と呼ばれるものらしい。 |
| + | |
| + | ・・・やっとこさ、NASMの解説サイトを見つけたんだが・・・・~ |
| + | http://ryujin.kuis.kyoto-u.ac.jp/~nobu/study/nasm/nasm.html |
| + | |
| + | これからこれを読むのか・・・頭クラクラしてきた・・・ |
| + | |
| + | **お得意のやっつけ変化球 [#he38ac39] |
| + | 実験的にadclの行を抜いてgas2naskしてみた。するってーと、Nasukaとしてはこんな文法になることがわかった。 |
| + | _rc_encode0: _rc_encode0: |
| + | pushl %ebp PUSH EBP |
| + | movl %esp, %ebp MOV EBP,ESP |
| + | movl 8(%ebp), %ecx MOV ECX,DWORD [8+EBP] |
| + | shrl 4(%ecx) SHR DWORD [4+ECX],1 |
| + | cmpl $0, 12(%ebp) CMP DWORD [12+EBP],0 |
| + | jne L4079 JNE L4079 |
| + | movl 4(%ecx), %eax MOV EAX,DWORD [4+ECX] |
| + | xorl %edx, %edx XOR EDX,EDX |
| + | addl %eax, 16(%ecx) ADD DWORD [16+ECX],EAX |
| + | ; adcl %edx, 20(%ecx) |
| + | L4079: L4079: |
| + | movl 4(%ecx), %eax MOV EAX,DWORD [4+ECX] |
| + | cmpl $16777215, %eax CMP EAX,16777215 |
| + | |
| + | また、adcl、そしてそれに良く似たaddl命令の働きがわかって来た。COLOR(blue){上記の例で解る通り、addlはgas2naskで翻訳できていて、さらにそのパターンがわかる!} |
| + | | |>|>|GASソース| |>|>|Nasuka(NASM風)ソース| |
| + | |addl命令| addl | %eax | 16(%ecx) | | ADD | DWORD[16+ECX] | EAX| |
| + | |
| + | これらの比較から、まだ未確認だがこういう予測が立ってきた・・・ |
| + | |
| + | -COLOR(blue){多くの命令は、GASの場合、おケツにlが付いているだけ。} |
| + | -COLOR(blue){第一オペランドと第二オペランドが逆} |
| + | |
| + | ・・・つーことはだよ? x86に、''ADC''という命令がダイレクトにあれば、addl(ADD)と同じ翻訳でいいんでないのか?これ???? |
| + | |
| + | **出ました!乱暴者!!! [#m6641f49] |
| + | どうもx86には、''ADC''という命令はあるっぽい(まだ、調べきっていないのだが)。・・・だったらさぁ・・・・ |
| + | |
| + | さっき出来た.nasに、手書きでADC命令を書きこんでNasukaにかけ、bim2binをでっち上げてみる!!!!~ |
| + | さぁ!動くか!? うごくのかあぁぁぁぁ!!!! |
| + | |
| + | COLOR(blue){動いちゃうんだからやめられないよなホントwwww} |
| + | - -osacmp -tek0 正常動作。出力ファイルに違いがない! |
| + | - -osacmp -tek1 正常動作。出力ファイルに違いがない! |
| + | - -osacmp -tek5 正常動作。出力ファイルに違いがない! |
| + | |
| + | 完璧だ・・・私は完璧だ! 今日から戦闘力10万の完璧超人を名乗らせてもらおう!! |
| + | |
| + | |
| + | **貴様風情に北斗1800年の歴史を極めることなどできない [#n520ae2b] |
| + | ・・・でさ・・・gas2naskどうすんのよ・・ |
| + | |
| + | ・・・・・・・・・・・・・orz・・・・・・・・・・・・・・・ |
| + | |
| + | さてgas2naskのソースを眺めてると、acDl(ADD)命令の定義が二箇所ある。さらに各々の定義部に、one_param、tow_paramという名前がつけられている。 |
| + | |
| + | ・・・これは、オペランドが一個しかないもの、2個あるものっていう定義なのだろうか? もしそうなら、addl命令は、オペランドがひとつの場合と二つの場合があり、3つってのはない・・・そうなるが・・・ |
| + | |
| + | ふむ。大体合ってると思う。one_param内にはCALLやJPがあるが、tow_param内にはないし。 |
| + | |
| + | しかしそうなると、ADDにはオペランドが一個っていう場合がある・・・のかなぁ。そういう用法が見つからない。むむむ・・・ |
| + | |
| + | |
| + | あぁぁぁっと!勘違いだ! ADDにはパラメータ一個は存在しない! それは、''FADD''だ!! |
| + | |
| + | うーん・・・ADDに対してFADDはFPUを使っての命令・・・と。で、その場合はパラメータ一個もありうる・・・(まだ未確認) |
| + | |
| + | しかし、逆に、これのCF関連命令であるADCに、FADCっていう命令はみつからないぞ? もしかしてない?? |
| + | |
| + | たぶんこれで合っているはず。adcl(ADC)命令には、パラメータ一個のパターンは存在しない!!!! |
| + | |
| + | なので、たぶん、adclの定義はtwo_param内に追加すればいいはず! |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | **ソース内の定義の意味は? [#b9cd74ec] |
| + | gas2naskのソース内では、たとえばaddlの場合、 |
| + | "1addb ADD", |
| + | "4addl ADD", |
| + | "2addw ADD", |
| + | こんなことをしている。先頭の数値とお尻の一文字。これはどういう意味なんだろう?? お尻はほとんど関係なくADDに翻訳されているんだが、頭の数値はなんだんだろうこれ・・・ |
| + | |
| + | *いけた?でもわかんねw [#b41591ab] |
| + | "1addb ADD", |
| + | "4addl ADD", |
| + | "2addw ADD", |
| + | "4adcl ADD", |
| + | もうわっかんないので無理やりこんなことしてみたら、ちゃんと.nasが正しく出力されたぞ?? いいのか? 本当にこれでいいのか???www |
| + | |
| + | *復帰~ [#n48bb630] |
| + | うーん・・・思うところもあるけど、本来の目的であるhidetol_8を完成させる観点から、ちょっとこれで突き進めちゃおう・・・~ |
| + | (どーせこれは、GOでもなんでもない。28GOであり、hidetolなんだから・・・<オープン アゲイン!!! |
| + | |
| + | *そんなわけで第一期完成 [#oe00b9a9] |
| + | |
| + | 実行ファイル |
| + | #ref(hidetol_8.exe) |
| + | |
| + | ソース |
| + | #ref(hidetol_8_src.exe) |
| + | |
| + | COLOR(red){まだOSASKもなんもコンパイルしてません・・・自分自身のソースを自分でコンパイルできるようになったってレベル} |
| + | |
| + | |
| + | **OSASKコンパイル [#s89fc85d] |
| + | ・・・ダメでした・・・orz・・・ |
| + | |
| + | で、問題を検証してみたんだけど、どうもpokonがおかしい。で、どの段階でおかしいかってーと、obj2bimだってことが解った。pokon0.objまでの段階ではまったく同じバイナリなんだけど、こいつをobj2bimでpokon0.bimにすると違いが出ちゃう。 |
| + | |
| + | -差を見てみると、なんとかくだけど規則的に差が出ているように見える・・・ |
| + | -そもそも、ほんのわずかだけど、サイズが異なる |
| + | |
| + | でね。こりゃ、obj2bimがバグってるのかぁ?っていうと、winman0ではこれが起きてないんだよなぁ・・・(winman0はこの後のbinでもまったく同じバイナリになってる) |
| + | |
| + | ・・・どゆことなんだべか??? |
| + | |
| + | COLOR(blue){おぉぉっとぉ! 動いたぞ!!!} |
| + | |
| + | 二つの差。それは、rulファイル(各々専用)。ちょっとヤマカンでやってみたのよ。mak_pk0.txtを! |
| + | |
| + | 元々のmak_pl0.txt こうしますた! |
| + | STK_PK_AT = 1m STK_PK_AT = 64k |
| + | STK_PK_TW = 1m STK_PK_TW = 64k |
| + | STK_PK_NE = 1m STK_PK_NE = 64k |
| + | |
| + | これでコンパイルかけてみた。やっぱり同じにはならないんだけど、サイズが揃ったんだよね。で、runしてみるってーと・・・ジャジャ~ン!!! |
| + | |
| + | オレは天才だあぁぁぁ! どんな言語もたちどころに習得できるのに、誰も奥義を授けようとはしなかったあぁ!!! |
| + | |
| + | **はりぼて [#xb68fdc5] |
| + | こーっちもイケたぞおぉぉ!!! |
| + | |
| + | リリース近し!! w |
| + | |
| + | |
| + | **qemuが起動しないミス [#tb2bc0ba] |
| + | 例によってhikarupspさんが見つけてくれた!! |
| + | |
| + | qemuの起動に問題があったので一部やり直しました。 |
| + | |
| + | #ref(hidetol_8_2.exe) |
| + | |
| + | |
| + | |
| + | *リリース向け準備 [#o104ee3b] |
| + | たぶんもう問題はないと思う。リリースに向けて最後の準備。 |
| + | |
| + | で! |
| + | |
| + | この版ではコマンドそのものやパラメータがいろいろ変化していて、hidetol_7みたいにOSASKやはりぼてでチェックができない。(あちこち直さないといけない) |
| + | |
| + | Linuxとかならpatchを流せばいいんだけどWinの場合はねぇ・・・ |
| + | |
| + | そんなわけで、とりあえずご用意。 |
| + | |
| + | **OSASK4.7の代替 [#n923b4d2] |
| + | [[ここ>http://osask.net/w/540.html]]からOSAKA Ver4.7を落としてくださいな。OSAKAはOSASKからの派生物。で、なに派生したかって、なーんにも変化していないというwww~ |
| + | コイツはhidetol_8で一発コンパイルできるようにMakefile関係だけをイジってあると考えていただければ。 |
| + | |
| + | |
| + | **はりぼての代替 [#f7ba3dc7] |
| + | #ref(harib27f_x.zip) |
| + | |
| + | こいつは「30日で出来る!OS自作入門」付属CD-ROM内の、30日目の最後のソースに、hidetol_8でコンパイルできるようにMakefileやらなんやらを改造したもの。以下ね。 |
| + | harib27_x |
| + | ├app_mak.txt |
| + | ├apilib |
| + | │ └Makefile |
| + | ├haribote |
| + | │ └Makefile |
| + | └gvuiew |
| + | └Makefile |
| + | |
| + | |
| + | |
| + | *リリース完了! ('10/2/1)[#ld83d289] |
| + | |
| + | リリースが完了しましたので、このページは凍結♪ 添付も引っこ抜きます。以降は[[こちら>http://osask.net/w/542.html]]にて。 |