![]() |
Message Log 33 | Return to Parent Menu |
Last Updated by 07/01/05(Fri) |
| |||
やっぱり 2001 年もアセンブラッ!!だねっ |
| |||
| |||
: 1B62h [2001/12/31 Mon 21:56:29] [211.8.49.4] はじめまして。アセンブラを半年ほど独学でしている高校生です。アセンブリプログラムは286の98でやっています。N88BASIC、C/C++、JAVAなどもやっています。オペコード表を見ながらハンドアセンブルをするのが好きでCOMファイルは作れるようになったのですが、EXEファイルのヘッダ(リロケーションテーブル、必要メモリ、オーバレイなど)がよくわからず作れません。どなたか教えていただけないでしょうか。あと、よければFPUエミュレーションでの浮動小数点演算についてもお願いします。(286なのでFPUがないのです) あすむ [2001/12/30 Sun 22:00:18] [211.128.161.197] 初めまして。あすむと申しますです。 Visual C++6.0の開発環境でインラインアセンブラを使用 していてわからない事があります。 現象はインラインアセンブラで書いた関数をコンパイルして、 デバッグ上で動かすとうまく動くのですけど、実行モジュールを ダブルクリックで起動すると、「エラーが発生しました。」の ダイアログが出力され、原因を調べて見ようとデバッグボタンを 押すと「Access Violation」のダイアログが出力されます。 質問したいことは、 @ 何故、「実行」(ホットキーCtrl+F5)と「デバッグ上での 実行」(ホットキーF5)は動作が違うのでしょうか? A そしてその現象を回避するにはどうすればいいのでしょうか? 開発環境 OS Windows98 CPU PentiumIII 450MHz いろいろ調べてはいるのですけど、なんかこう‥さくっと解決で きずに日々悶々としている今日この頃です。 そろそろあきらめるか、と思うところでこのページに出会いました。 情報が少ないのか、情報の探し方が悪いのかよくわかりません。 #たぶん後者だと思うのですがどうでしょうか? どなたか宜しくお願いします。 澤口@一升金 [2001/12/11 Tue 15:53:03] [211.2.146.22] 澤口@一升金です。 Microsoft社の Windbg を忘れていました。 ↓ http://www.microsoft.com/ddk/debugging/default.asp 澤口@一升金 [2001/12/11 Tue 11:07:05] [211.2.146.47] 澤口@一升金です。 プロテクトモード用のフリーのデバッガを少しまとめてみました。 Borland Turbo Debugger ↓ http://www.borland.com/bcppbuilder/turbodebugger/ 386SWAT ↓ http://www.sudleyplace.com/swat/swat.htm GoBug ↓ http://www.jorgon.freeserve.co.uk/ Pro32 Debugger ↓ http://www.geocities.com:80/SiliconValley/Bay/9159/prodb.html OpenWatcom(本来は C++ Compiler だけど、付属ツールに Assembler や Debugger がある) ↓ http://www.openwatcom.org/ 澤口@一升金 [2001/12/11 Tue 10:51:49] [211.2.146.47] 澤口@一升金です。 x86 のデータシートや MASM の使い方を詳細な Windows Help 形式で まとめられたドキュメントがここにありました。 ↓ http://ns2.sitedesign.co.jp/~hero/hero.htm X86CPU.CHMとASM.CHMです。 こういう仕事をなさる方には感謝いたしたいですね。 ヴォーギン [2001/11/28 Wed 23:10:53] [43.237.224.20] 澤口@一升金さんどうもです.まさにこれを捜してました. 「はじめて読むMASM」をよんでMASMでプログラムかいたりも (売ったりも ^_^;) 何年も以前はしていたのですが,VB,VCで遊ぶようになって 気づいたら eax? なにそれ? axと何が違うの? と言う状態に なっていたのであちこち探してここでお聞きしました. またよろしくお願いします. 澤口@一升金 [2001/11/28 Wed 10:19:01] [211.2.146.9] 澤口@一升金です。 to ヴォーギンさん: とりあえずこんなところでいいですか? ↓ http://tt.sakura.ne.jp/~suzu/asm/3.html やりたいこととか、困っていることをもっと具体的に書かれると 詳細なレスがつくと思います。 ごく細かいアーキテクチャ情報は、ここからインテルのドキュメ ント関係がダウンロードできます。英語ですが。 ↓ http://www.intel.co.jp/jp/developer/design/intarch/index.htm ヴォーギン [2001/11/28 Wed 02:09:45] [43.237.224.20] こんにちは eax,ebpなどのレジスタについての解説はここにはないですか? 検索ではみつけられず,ありましたら教えてください なべちゃん@abk [2001/11/23 Fri 04:17:56] [61.201.87.59] 一番上にプログラム本体。その次にデータが続き、データは上から使って、 スタックは下から使う。ぶつからない限り大丈夫だから有効に使える。 ……ということなのでしょう。昔はメモリ高かったし、いかに有効に使うか考えたのでしょう。 ただ、この方法が現在のセキュリティーホールとされるものの原因になってたりする。 一時的なデータはスタックに取られることが多くて、プログラムが安易に作ってあると、 予想してないぐらい大きなが来たときにスッタクがデータ領域を食いつぶして、 プログラム領域にまで達する。するとどうでしょう? うまくすれば、自分の思い通り のプログラムを実行させることが可能ではないですか! なんてね。 Microsoft IIS や Sendmail 等々多数のプログラムのセキュリティーホールはコレ。 メモリを有効に使うという歴史的経緯からすると、スタックサイズ超過を考えることが ナンセンスなのかもしれませんけど(領域を明確に割り切ると、データ領域は余ってるのに スタックがオーバーとか、その逆があるわけですね)、 バッファから一時データ領域を確保して転送するときこのスタック超過 を考えないと、こんな攻撃対象になってしまうわけです。 とかなんとか関係ない話をしてみたり。 (どっちかと言うとCで書くとき問題になるからなぁ〜) ファオ [2001/11/22 Thu 14:10:03] [210.253.130.180] 澤口@一升金さんへ。 説明ありがとうございます。歴史的経緯を受け継いできたという ことですね。 澤口@一升金 [2001/11/22 Thu 01:52:03] [211.2.146.6] 澤口@一升金です。 to ファオさん: おっしゃる通り、現代の半導体RAMでは下から上でも上から下でも特に違いはない と思います。 歴史的には1949年に作られた ↓ http://www.senshu-u.ac.jp/~thm0507/W-history/HistoryofComputer.htm EDSAC という計算機が「サブルーチン」の始まりなので、おそらくこの機械の設計 が、スタックの始まりでしょう。 この時代からマイクロプロセッサの発明される時代まではおそらくデータメモリ、 プログラムメモリ、スタックメモリは別々だったはずで、当然データメモリは下から 上へ使っていくものだったと思われます。 で、半導体メモリが発明されたときにもデータメモリは下から上へというのが継承 された。(当時のスタックはサブルーチンの戻り番地格納のみに使われていたの で、ごく小さく、どこでもよかった。ゆえにプログラムアーキテクチャ上ではデータ メモリの配置を優先した) データメモリを下から上にとすれば、スタックはいやでも上から下にとなりますね。 ちなみに、8086は電源初期化時にはFFFF:0000番地から実行を始めますので ここはROMである必要があります。 スタックが最上位番地に来ているわけではないです。 ファオ [2001/11/21 Wed 11:22:45] [210.253.130.180] 今までずっと疑問なのですが、x86の場合(他は知りませんが) pushしたり、ローカルな領域を確保する場合は スタックを減らしますよね。 つまり、スタックはアドレスが高い方から低い方に向かって使われれる。 で、プログラム開始時にはespはスタックの最後を指しているんですよね? これはどうしてなのですか? なんで、スタックはアドレスが低い方から高い方に使われる という仕様にしなかったのですか? こうすると何か不都合でも生じるのでしょうか? 田阪 [2001/11/18 Sun 12:01:28] [211.125.17.116] 田阪です。 澤口さん、ありがとうございました。 いまアセンブラのコードを読んでいて行き詰まっていた のですが、澤口のアドバイスのおかげで次に進むことが できました。本当にありがとうございました。 澤口@一升金 [2001/11/16 Fri 22:20:52] [211.2.146.41] 澤口@一升金です。 to 田阪さん: わたしは癖でリストファイルと縮めて言ってしまうのですが、正しくは リスティングファイルです。 これは、アセンブル結果のバイナリコードをアドレス順に左側に書き 出して、それに対応するソースコードを右側に書いたテキストファイル です。 これで、どのデータやコードがどこのアドレスに配置されているかわか りますから、デバッグの見当がつけやすくなります。 田阪 [2001/11/14 Wed 19:19:52] [61.121.60.225] 田阪です。 澤口さん、アドバイスありがとうございます。感謝です! リストファイルというのは生成された.objの中身を ユーザに分かりやすくしたファイル(ユーザが眺めるだけの ファイル)という認識で間違えていないでしょうか。 もしかして他にリストファイルは特別な 使い方があるのでしょうか? すいません、手持ちの資料を見たのですが リストファイルのことについて書かれた資料が ありませんでした。知っている方がおられましたら 教えてください。よろしくお願いします。 澤口@一升金 [2001/11/14 Wed 00:46:58] [211.2.146.30] 澤口@一升金です。 to 田阪さん: .sall は、マクロの展開をリストファイルに含めないという指示です。 .xlist は、リストファイルの生成を中止する指示です。 田阪 [2001/11/13 Tue 23:48:52] [211.133.26.197] こんにちは、はじめまして!田阪といいます。 擬似命令で分からないところがあって 検索をかけていたらここにたどり着きました。 もしよろしければ .sall .xlisti の動作についてアドバイスいただけないでしょうか。 よろしくお願いします。 MM-santa [2001/11/01 Thu 09:37:27] [203.141.139.213] 3回目か4回目の書き込みです to a.out氏 さん 使用している、CPU、OS、Cの処理系について 書かれていないので具体的には言えませんが (gasも使用したことがありません) test()関数内で、 (1) int a[5]={1, 3, 5, 7, 9} (2) a[0]=3 のようなコードを付け足してみてアセンブラ ソースを見れば、何故だか解るかも知れません。 スタックの領域長を計算するときの考慮点 (1)CPUは、32ビット/62ビットモードで実行? (2)C処理系の内部では、倍精度でint変数を保持? (3)test()関数内部で、別の関数を呼出して いないか? (4)関数への引数はあるのか? お返事は、はい です。 [2001/10/31 Wed 00:38:08] [211.129.252.46] To 澤口@一升さん なるほど。 よくわかりました。 アドバイスありがとうございました。 澤口@一升金 [2001/10/29 Mon 15:21:56] [211.2.146.16] 澤口@一升金です。 to おへんじは、はい!さん: コードを書いただけで変になることはないと思います。 実行すればハングしたりエラーが出たりすることはありますが、 これはアセンブラに限らないでしょう。 a.out氏 [2001/10/29 Mon 11:13:59] [133.26.136.3] はじめまして。 gas について質問です。 cで例えば test() { int a[5]; .... } のような関数を作り、それを逆アセンブラすると このtest関数で sub $0x28, %esp とローカルバッファを確保するのですが、 なぜ0x28も確保してしまうのですか? test関数ではこの配列以外にローカル変数を定義していません。 どうか、教えてください。 かつら [2001/10/26 Fri 05:04:33] [202.247.117.100] >ところでスパコンとかだと 1byte 単位以外でアドレスが付いてるのですか? スパコンはいじったことがないです。当時.東大に1台しかなかったですから。 2バイト単位でアドレスがついている機械(16ビットコンピューター)と 3バイト単位でアドレスがついている機械(24ビットコンピューター)を いじったことがあります。8ビット演算では1−2バイトの無駄な領域の演算をしないように(キャリー等でおかしな事になる)andで消して使いました。 お返事は、はい [2001/10/25 Thu 23:16:09] [211.129.252.10] すみません。お返事は、はいです。 ブラウザの調子が悪くて、何度も書きこみのボタンを押してしまいました。 お返事は、はい おへんじは、はい!(人のまねです。笑) [2001/10/25 Thu 23:10:21] [211.129.252.92] こんばんは。 質問なのですが、アセンブリ言語をPC上で使うとOS(私は現在windows98(TM)とlinux(TM)を使っているのですが、これらの上でNASMなりMASMなりgasをつかい、まちがった?コードを書いてしまうとオペレーティングシステムがおかしくなったりすることはありますか?今windows98にMASM32をインストールしてサンプルのコードをコンパイル?して試してみたりしたのですが、勿論サンプルのソ−スコードなのでおかしくなったりはしません。そして現在インターネット上にある膨大の量のドキュメントを読んでいるところで、まだブール代数の章なのです(The Art of Assembly Language's 16bit old version(スペルこれでよかったかな?)よろしかったら、(勿論このサイトはアセンブリ言語に関するサイトですよんね)オペレーティングシステムがおかしくなったりしないかどうか教えていただけませんか? おへんじは、はい!より皆様へ 読んでいただいてありがとうございました。 おへんじは、はい!(人のまねです。笑) [2001/10/25 Thu 23:10:20] [211.129.252.92] こんばんは。 質問なのですが、アセンブリ言語をPC上で使うとOS(私は現在windows98(TM)とlinux(TM)を使っているのですが、これらの上でNASMなりMASMなりgasをつかい、まちがった?コードを書いてしまうとオペレーティングシステムがおかしくなったりすることはありますか?今windows98にMASM32をインストールしてサンプルのコードをコンパイル?して試してみたりしたのですが、勿論サンプルのソ−スコードなのでおかしくなったりはしません。そして現在インターネット上にある膨大の量のドキュメントを読んでいるところで、まだブール代数の章なのです(The Art of Assembly Language's 16bit old version(スペルこれでよかったかな?)よろしかったら、(勿論このサイトはアセンブリ言語に関するサイトですよんね)オペレーティングシステムがおかしくなったりしないかどうか教えていただけませんか? おへんじは、はい!より皆様へ 読んでいただいてありがとうございました。 おへんじは、はい!(人のまねです。笑) [2001/10/25 Thu 23:06:50] [211.129.252.92] こんばんは。 質問なのですが、アセンブリ言語をPC上で使うとOS(私は現在windows98(TM)とlinux(TM)を使っているのですが、これらの上でNASMなりMASMなりgasをつかい、まちがった?コードを書いてしまうとオペレーティングシステムがおかしくなったりすることはありますか?今windows98にMASM32をインストールしてサンプルのコードをコンパイル?して試してみたりしたのですが、勿論サンプルのソ−スコードなのでおかしくなったりはしません。そして現在インターネット上にある膨大の量のドキュメントを読んでいるところで、まだブール代数の章なのです(The Art of Assembly Language's 16bit old version(スペルこれでよかったかな?)よろしかったら、(勿論このサイトはアセンブリ言語に関するサイトですよんね)オペレーティングシステムがおかしくなったりしないかどうか教えていただけませんか? おへんじは、はい!より皆様へ 読んでいただいてありがとうございました。 おへんじは、はい!(人のまねです。笑) [2001/10/25 Thu 23:06:50] [211.129.252.92] こんばんは。 質問なのですが、アセンブリ言語をPC上で使うとOS(私は現在windows98(TM)とlinux(TM)を使っているのですが、これらの上でNASMなりMASMなりgasをつかい、まちがった?コードを書いてしまうとオペレーティングシステムがおかしくなったりすることはありますか?今windows98にMASM32をインストールしてサンプルのコードをコンパイル?して試してみたりしたのですが、勿論サンプルのソ−スコードなのでおかしくなったりはしません。そして現在インターネット上にある膨大の量のドキュメントを読んでいるところで、まだブール代数の章なのです(The Art of Assembly Language's 16bit old version(スペルこれでよかったかな?)よろしかったら、(勿論このサイトはアセンブリ言語に関するサイトですよんね)オペレーティングシステムがおかしくなったりしないかどうか教えていただけませんか? おへんじは、はい!より皆様へ 読んでいただいてありがとうございました。 FOX [2001/10/25 Thu 20:23:56] [211.133.141.4] 澤口さん、どうもありがとうございます そのアセンブラの存在は知っていたのですが、 Linuxが会社にないので使えなかったのです。 (家に帰ればあるのですけど、実際に*.asmを作成してアセンブルとなると 擬似命令やなにやと覚えないとならないでしょうし) で、今回はCソース中に_asm _emitを埋め込んでしまおうと思ったのですが どうもアプローチ方法が違っていたようです。 Itaniumでは、自分でCPUモードを遷移しなくともよいようなので。 (変なブートローダのようなものがやってくれている) トニー [2001/10/24 Wed 03:12:59] [66.51.196.27] 初めましてトニーと申します。 こんな部屋に辿りつけて、わくわくドキドキしています。 アセンブラーは3日前から始めたばっかりです。 始めたといっても、HLA(High Level Assembly)ですが・・・。 よろしくお願いします。 澤口@一升金 [2001/10/22 Mon 09:49:36] [211.2.146.44] 澤口@一升金です。 to さだおさん: たとえば、ここにある ↓ http://www.smidgeonsoft.prohosting.com/ PEBrowse Professional (v3.9.4) なんてのが逆アセンブルツール です。 free x86 disassembler というようなキーワードで googlle 検索すれば いくつも出てきますよ。 澤口@一升金 [2001/10/22 Mon 09:32:00] [211.2.146.44] 澤口@一升金です。 to FOXさん: Itanium は縁が無いのでよくわかりませんが、ここにあるのが Assembler でないの? ↓ http://developer.intel.com/software/products/opensource/tools1/asm.htm 澤口@一升金 [2001/10/22 Mon 00:12:50] [211.2.146.26] 澤口@一升金です。 to なべちゃんさん: >但し、486の廉価版である 486SX のみは FPU が別になってたので、 >厳密に分けるのは問題アリですが。 いえ、486 シリーズは全て FPU ユニットを内蔵しています。FPU ユニット の電気配線をわざとカットして FPU が機能しないようにしたのが 486SX (FPU の検査工程が不用になるので安くできる)、FPU ユニットの機能を そのままにしたのが 487SX です。 486SX の PC に 487SX を取り付けた場合、 486SX は完全に動作を停 止し、487SX が FPU 機能を含む、全ての CPU 動作を行います。 ここらは、 386 と 387 の関係とは違うところです。(387 は FPU 機能しか 持っていないので、単独では動作できない) さだお [2001/10/21 Sun 08:13:09] [203.198.23.126] 逆アセンブラのソフト はじめまして これから機械語等を覚え逆アセンブラ等をしたいと思ってますさだおと申します。 しかし、ずぶの素人でありましてどういうソフトを使ってよいかもわかりません。 そんな人間でもOSはWindows2000なんかを使ってしまっております。 Win2000用の逆アセンブラソフト等ご存知の方おりましたらご教授よろしくお願いいたします。 なべちゃん [2001/10/20 Sat 02:09:42] [210.252.157.21] 別にintelを擁護する気はないのですが(というかどちらかと言えば嫌いやし)。 一つ訂正。書き込んだ後に気付いたのですが、汎用レジスタのサイズ+ 論理アドレスのビット数の両方満たして、という感じがしますね。 >でもデータ関係は8ビットでアドレスが割り当てられています。 >だから.8ビットCPUだと思います。 16bitアクセス両方の方法が用意されてるから、 16bit CPU におまけで 8bit アクセスと考えることもできると思います。 このパーシャルレジスタアクセスを欠点と取るか、長所と取るかでしょうが、 一長一短な感じがします。 (CPUが内部的に見せかけてるだけで、実際には下位数ビット、 8086なら16、80386(DX)なら32、Pentiumなち64、単位アクセスですし) ところでスパコンとかだと 1byte 単位以外でアドレスが付いてるのですか? 私は Z80、x86、x68系しか知らないのですが……。 >テータは8ビットで複数のアドレスに存在するデータを >さも1つのように取り扱っています。ですから.8ビットでしょう。 ですから私はこれは逆だと思います。 32/64bit 単位で存在するデータを(ハード的にそうですし)、 あたかも byte 単位で存在するように見せかけてる機構を積んでいるだけですから。 >インテルでは8086−80486の頃浮動小数点処理部は >CPUとは別にして販売していました。 不動小数点が内蔵されるようになったのはi486以降ですね。 但し、486の廉価版である 486SX のみは FPU が別になってたので、 厳密に分けるのは問題アリですが。 >中央演算処理装置 勉強になりましたです(苦笑) CPUの定義は、どこか変わってしまったんでしょうね。 私の知ってるのは、CPUはCPUのみ(変な日本語)。 その他多くをハードウェアと分類するモノです。 #n bit CPUってのは前から色々考えて疑問だったので、いい機会です(^^ かつら [2001/10/20 Sat 01:28:37] [202.247.117.97] >(知る限り)明確な定義は存在しないのですが、汎用レジスタのサイズ、がn Bit CPU の n の部分に相当しているように感じます。 8086は.アドレッシング関係が16ビット.アドレッシング関係に使用できるレジスタは16ビット. でもデータ関係は8ビットでアドレスが割り当てられています。だから.8ビットCPUだと思います。 ペンテも32ビットのデータを保存できれば良いのですが.テータは8ビットで複数のアドレスに存在するデータをさも1つのように取り扱っています。ですから.8ビットでしょう。 24ビット大型コンピューターの演算部は.データバスもアドレスバスも演算部も24ビットです。たしか浮動小数点演算も命令が存在したかと思います。インテルでは8086−80486の頃浮動小数点処理部はCPUとは別にして販売していました。 >これも違うと思います。 ただ単にコンピューターというと大型コンピューター.マイコンというとマイクロコンピューターと呼んでいた頃の話ですね。 コンピューターの回路図を見ると.CPUには.いろいろなものがつながっていました。テレタイプとかマークカードリーターとか各種ティスクとか。「中央」という意味は.「端末」に対しての「中央」なのです。だから.「中央演算処理装置」には.各種IOポートが存在する必要があります。又.メモリーボートも「中央演算処理装置」を構成する1部品です。時計も「中央演算処理装置」の一部分であり.NIP(ニューイニシャライズプログラムローダー.ディスクにあるIPLを主記憶に移動するプログラムを保存しているメモリーとディスクを指示するための簡易なコンソール(16進数直接入力).演算処理装置の動作状態を表示する簡易ディスブレイ(16進数直接表示)を含めて)も「中央演算処理装置」の一部を構成する一つの部品です。「主記憶装置」は「中央演算処理装置」と別れて記載されていた頃があります。これは.真空管の発熱が激しくて別にしないと火災になるとか.の話や.ROM部を人間が配線して作っていた頃のなごりです。20年ぐらい前ですと.既に20256(?メモリーIC名)程度の2KBスタティックメモリーや2764程度の64KB程度のリードオンリーメモリーがあり.24ビット全体でも20枚程度のボードですから.中央演算処理装置の一構成部品として収納されていました。 今のパソコンでは.メインボート(キーボート関係を除く)+メモリーボード+グラフィックやCRT関係や通信関係を除く各種ボードを差し込んだ電源を含めた部分が.コンピューターの中央演算装置です。あるいは.パソコンからグラフィック関係ボート.各種ディスク.キーボードIF.モデムボードを引き抜いた状態と言って良いでしょうか。 当時.モデムは中央恵那残処理装置から外されていましたし.グラフィック関係にはグラフィックディスプレイが販売されていましたし.キーボートとCRTディスプレイにはコンソールが販売されていましたから。ただ.現在演算装置がどのような状態にあるのか(アクセスしているアドレスや実行しているタスク.IOボートの状態)を表示する機能は不足しています。 一つの機械の名称としての「中央演算処理装置」と部品としての「中央演算処理装置」は別のものでしょう。 当時販売されたマイコンのIMSI(スペル疑問)はCPUだけの販売でしたね。使えるようにするには.別にテレタイプを購入する必要がありました。高くて買えませんでした。 FOX [2001/10/19 Fri 18:02:36] [211.133.141.5] >プロテクトモード及び、リアルモードを断続的に切り替えを行う >というのは、CPUで対応しているのでしょうか? >又、このような経験をお持ちの方おられないでしょうか? 出来ますよ、同じことをやっています。 Real/Protectedモード間でCSの更新が成功しているのでしょうか? FOX [2001/10/19 Fri 17:47:09] [211.133.141.5] おひさしぶりですFOXです なんかIA-64(Itanium)に関わることになってしまいました。 32ビットインストラクションモードに遷移するために br.iaを実行したいのですが、アセンブラがないので データシートを見ながらハンドアセンブルしてみましたが IA-64マシンは初めてなので不安です。 どなたか、これで間違っているかどうか教えていただけませんか? 40 00 00 00 00 80 00 00 00 00 00 04 00 00 10 D0 BundleのTemlateは0x16 { B-unit, B-unit, B-unit }で、 内訳は、 br.ia, nop.b, nop.b としたつもりです。 # pqっていうのがよくわかってないので、全部0で埋めてしまいましたが・・・ なべちゃん [2001/10/17 Wed 15:33:10] [202.236.152.84] free386 >リアルモード<->プロテクトモード変換を行い、 >上位アドレスにメモリアクセスを行うプログラムを作成しましたが、 さぁソースを見てないし、情報不足すぎなので何とも言えない気もしますが。 変換ルーチンが基本的に間違ってないのなら、ただ単純にメモリを破壊して 誤った命令コードを実行しているだけでしょう、 (仮想86モードとリアルモードを勘違いしてないとすれば) よくするミスとしては、86モードに戻るときに セグメントレジスタ や GDTR や IDTR などを戻し忘れてるだけのような気もします。 CPUモードを切り替えた後は、ちゃんと初期化処理をしてあげないと あらぬ(切り替え前のモード時の)メモリにアクセスしたり、 あらぬメモリを参照して割り込みが発生したりします。 (たしか。もう昔なのでよく覚えてないけど) ###↓書き忘れ マイコンの処理装置はマイコンだけあって micro processing unit = MPU と呼ばれてました(MPUからマイコンという名が誕生したのが 本来的なような気もしますが)。 なべちゃん [2001/10/17 Wed 15:25:15] [202.236.152.84] 古いですが。 >ですから8086は8ビット. >ペンテのマニュアルを眺めた雰囲気では.相変わらず8ビットCPUで.一部16.32.64ビット部分 >(前置命令をつけて演算機を切り替えている雰囲気)があるようです。 ちょいと違う気がします。8086は16bit / 80386以降は32bit CPUというのが一般的。 (知る限り)明確な定義は存在しないのですが、汎用レジスタのサイズ、が n Bit CPU の n の部分に相当しているように感じます。 >ところでCPUというのはインテルで作った言葉です. これも違うと思います。スパコンなどの大型コンピュータの処理装置を CPU(central processing unit/中央演算処理装置)と呼んでいました。 20年ぐらい前でしょうか。当時大きな大学とか研究時にしかなかったコンピュータですが、 始めて個人用のコンピュータが登場して、それをマイコンと呼びました。 家庭用の小型コンピュータ(microcomputer)の略でマイコンです。 で、いっきにマイコンが浸透するのですが(今とは比べ物にならないけど)、 そのマイコンの一つとして出されてた intel の石が乗った製品(IBM製だと思う)があって そのとき intel は自分達が作ったプロセッサ(処理装置)を他と 差別的にするため(?)か、大型コンピュータに匹敵する性能と思わせたかったのか よくは知りませんが CPU と呼んで売り出しました。 #とその時代にパソコンいじってなかったのですが。 dart234 [2001/10/14 Sun 21:01:08] [61.116.186.69] >PENTIUM3 [2001/10/10 Wed 15:32:46] [210.138.207.195] >初めてMessageします。 >リアルモード<->プロテクトモード変換を行い、上位アドレスにメモリ >アクセスを行うプログラムを作成しましたが、断続的に上位アドレス >にアクセスを行うと CSレジスタ値がおかしくなり動作が止まってしま >います。 >プロテクトモード及び、リアルモードを断続的に切り替えを行うとい >うのは、CPUで対応しているのでしょうか? >又、このような経験をお持ちの方おられないでしょうか? というか、リストをみなきゃなんとも言えませんが、タスクスイッチは うまくいっていますか? 又、TSSディスクリプタの内容は正確です か? リストがないので初歩的な事だけにとどめておきます。 PENTIUM3 [2001/10/10 Wed 15:32:46] [210.138.207.195] 初めてMessageします。 リアルモード<->プロテクトモード変換を行い、上位アドレスにメモリアクセスを行うプログラムを作成しましたが、断続的に上位アドレスにアクセスを行うと CSレジスタ値がおかしくなり動作が止まってしまいます。 プロテクトモード及び、リアルモードを断続的に切り替えを行うというのは、CPUで対応しているのでしょうか? 又、このような経験をお持ちの方おられないでしょうか? みゅう [2001/10/10 Wed 11:31:05] [61.208.239.37] しろさんへ MASM32付属のdumpbinコマンドを使って、 コマンドラインから.objファイルに対して dumpbin /symbols cpp.obj /out:s.txt を実行し、 出力されたダンプファイルのシンボル名とアセンブラ側の シンボル名を一致させたらリンクできました。 どうもありがとうございました!! wz [2001/10/08 Mon 13:09:45] [65.10.10.239] アセンブリ言語を勉強中の者です。 WindowsまたはUnix用のフリーのCコンパイラでマシン語を含む リスティングファイルを生成してくれるものってあるのでしょうか? Borlandのものは以下の様にCのコードとともにアセンブリ言語を 吐いてくれて良いのですがマシン語までは表示してくれません。 ; } /* end of while */ ; printf("Loop End %d\n",VariableLen); ; ?debug L 79 ?live1@320: ; @7: push dword ptr [ebp-4] push offset s@+52 call _printf add esp,8 ; ; } ; ?debug L 80 かつら [2001/10/05 Fri 01:53:14] [202.247.117.112] >nビットCPUって、何がnビットなの? 昔のプロセッサでは.演算装置がnビットの場合です。 ですから8086は8ビット. ペンテのマニュアルを眺めた雰囲気では.相変わらず8ビットCPUで.一部16.32.64ビット部分(前置命令をつけて演算機を切り替えている雰囲気)があるようです。 ところでCPUというのはインテルで作った言葉です.インテル製品に限るのかしら?モトローラではMPUという言葉を使っていました。日本製では「ロジック」でしょうか? しろ [2001/10/04 Thu 06:47:10] [61.207.99.124] 解決方法ではないのですが、とっかかりになると思いますので、 .cpp と .asm から生成された .obj ファイルに対して、コマン ドラインから link /dumpbin /symbols asm.obj cpp.obj /out:s.txt などとして、シンボルをファイルに出力してみて比べてみてくだ さい。 みゅう [2001/10/02 Tue 20:03:15] [61.208.239.37] MASMで、C++のグローバル変数が参照できなくて困っています。 externdef c シンボル名:dword とするとアセンブルは通るのですが、 リンクでエラーになってしまいます。どなたか、解決方法を知ってる 方はいませんでしょうか。ちなみに環境はVisualC++で、 そこからMASM用のカスタムビルドでアセンブルしています。 子獅む笑む獅子@777 [2001/10/02 Tue 10:57:02] [210.154.48.58] nビットCPUって、何がnビットなの? データバスの本数? アドレスバスの本数? とするとPentium4は64ビット? .db [2001/09/29 Sat 15:11:39] [202.224.108.218] こんにちは。 .db です。 あるアセンブラでは、ld a, $80\ ld b, a\ ld c, a\ のように改行無しで書けます。 それは masm32 でも可能でしょうか? ヘルプを調べたのですが、キーワードが不明なのか見つかりませんでした。 よろしくお願いします。 なべちゃん [2001/09/28 Fri 03:20:47] [210.252.157.21] ↓にまだお返事付いてなかったんですね。 align しか分かりませんが、これはそれを書いた場所を 指定した数の倍数のアドレスに揃えるというものです。 その他もすべて疑似命令としいって、命令コードを生成しない アセンブラに対する動作指示なのですが、疑似命令とか入れて 検索して調べてください。 また、gcc が出力するアセンブラコードは GAS と 呼ばれるものだと思います。捜し物の参考までに。 # type 32 は 32bit code ということかな。 Nyon [2001/09/20 Thu 20:57:33] [211.132.85.239] 初めまして。 早速ですがgcc -Sなどとやって作成されるアセンブリコードの中に .align 4 .def _hoge; .scl 3; .type 32; .endef などといったものがでてきますがこの中の .align, .def, .scl, .type, .endefの意味が分かりません。よろしければポインタだけでも結構ですので教えていただけないでしょうか? よろしくお願いします。 K.Takata [2001/09/16 Sun 00:42:50] [210.253.95.115] >MASM32が違法だとか,本物が有料だとか,年間契約だとか,別物が制限つきだとか, MASM32 は違法性がありそうですが、Win98DDK に付属の MASM ならば 何の問題もないでしょう。 XDA は私もよく使っています。VxD の逆汗には重宝しています。 EIL [2001/09/16 Sun 00:17:31] [61.125.80.138] そういえば、6502には www.6502.org というそのままなサイトがありました。 http://www.st.rim.or.jp/~nkomatsu/ 若干読みづらいですが、こちらの ICコレクションは有名どころの古 CPU の情報がてんこもりです。 管理人さん曰く、そういう用途には向かないように作ってあるそうですが、 文章から情報を取り出せれば使えます(^^。 #PADDUSBなんかをMMX使わずに、8回ループより高速に演算する方法ってありませんかね? EIL [2001/09/15 Sat 23:55:45] [61.125.80.138] こんばんは。 > 1._く、詳しく知りたいのれす。バイナリレベルでの違いはどうなってるにょぉ? VC++等で使われている COFFフォーマットの lib、obj、並びに Win32用のEXE(PEフォーマット)の資料なら msdn online にあります。が、、、 msdn online http://www.microsoft.com/japan/developer/library/default.asp > 2._「処理系」とは如何なる物でございましょうか。 「系」は「システム」と読み替えるとわかりやすいかもしれません。 処理(する)システム、この場合、コンパイラやアセンブラのことです。 > 3._逆アセンブラ「xda」を信じる糧を私は知り得ません、 サイズが大きいので使ったことがないのですが、 説明書を読む限り win32-EXEの逆汗なら、ある程度信用できそうですが。。。。 > ___vbではp-codeと称する.exeを作ると言いますがこれを逆汗しても無意味と言う事ですか? p-code とは仮想的なコンピュータ用の機械語です。 p-code は仮想的なコンピュータのエミュレータ、つまりバーチャルマシン(VM) によって実行されますが、その VM はx86命令で書かれているので、 逆汗すれば、VM の解析はできるかもしれません。 そこで得た情報から p-code を逆汗・・・・ という面倒なことをすれば意味があるかもです(^^;。 > 1._く、詳しく知りたいのれす。バイナリレベルでの違いはどうなってるにょぉ? > ___さらに文章ファイルまでも逆汗したらアセンブリがでてきました。 「バイナリ」について調べるか、こちらのサイトを一読されることをお勧めします。 http://www.geocities.co.jp/SiliconValley-SanJose/5780/data.html : |
e-mail: mist@e-net.or.jp | Structured Anchor Tree Return to Menu Return to Parent Menu |
Powered by Unit Missing Link. |