![]() |
Message Log 20a | Return to Parent Menu |
Last Updated by 02/26/01(Mon) |
| |||
やっぱり 21 世紀もアセンブラッ!!だねっ |
| |||
| |||
: プログラマーLv4 [2001/01/31 Wed 21:22:41] [211.6.96.1] 私はSOFTICEを使っているのですが、どうしても日本語のマニュアルが必要だと痛感しました。どなたかUPされてる場所を知っている方はいませんか?できれば教えてほしいのですが・・・。 教えてくれた方にはSOFTICEの場所を提供しようと思います。doc_____@hotmail.com までお願いします 落書きっ! by FM-TOWNS別動隊 [2001/01/31 Wed 03:10:34] [211.18.228.249] タイトルの通りの落書きレベルな書き込みです(^^;; ヒマ潰しにundoc98.2のテキストファイルをザラ読みしていますが、な るほど、旧98系、とは機種毎にかなり仕様が違うみたいですね。これほ ど迄に仕様が違うとソフトハウスの方々は大変だった(過去形)でしょう ね。 つまるところ、どの98でも動くソフトにするにはシステムコールに依 存するか(多分もっとも簡単)、デバイスドライバを全て自分で書くか( 多分1億人に1人もやらない(爆))、初代98仕様の範囲にとどめるか、 のいずれかなんでしょうね。 初代98は16色じゃなかったのか…。 筆者がMSXからFMRに移行した時は「まあ、16Bitとはこんなモノだろう な、98も似た様なモノだろう」と思っていましたが、実際、98はかな り複雑な様ですね(フラッシュROM等はFM-TOWNSには無い)。 FMRから FM-TOWNSへの移行は簡単でした。 中身はかなり似ており、リアルモー ド用プログラムの変更は僅かで済む(画面関係は致命的なモノがあるの で変更しないと動かない)のであまり抵抗を感じる事も無かった。 286 ⇒486のディスパッチャの変更はそれなりの楽しみがあったけど(画面以 外の外部I/Oはあまりイジっていない)既に個人レベルを超えていると実 感する(単に筆者の能力不足かも(笑))。 あ、ところで、Sweetinさんへ。 とにかく、自分の頭を使ってひたす ら試行錯誤して下さい。 筆者は確認していませんが、アマチュアのプ ログラマでもプロ真っ青の玄人級の人も多くいます。 その人達は環境 に恵まれたワケではなく、自分の頭を使っているのであると思います。 タイプが速くなれば、頭の回転も速くなるとアマチュアな筆者は想像し てしまいますが、それは外れてはいません。 デキが悪くとも、速くし あげる努力があれば何とかなると思います(職業プログラマの場合はそ うはいかないんでしょうね。 コスト・納期・安定動作が重視されるの ではないかと思われる。 今時の職業プログラマってどんな人達なんだ ろう?(笑))。 構造的な思考はその後に自然とついてくるんじゃない かと思うけど……ね。 筆者がアセンブラを頭の中で使える様になるに はいくつかのステップがありました。 まず、BASICが使える様になっ た事。 次にBASICをアセンブリ言語に変換できる様になる事(ハンド コンパイル(?))。 そして、試行錯誤で置き換えたオブジェクトをオ プティマイズ(最適化)する。 これを繰り返して続けて行けば、高級言 語で行っていた事とアセンブラでやるべき事の違いがわかる様になる。 さらに続けると(笑)、高級言語とアセンブラの間を往復する事がわずら わしくなり、アセンブラに固定される(笑)。 そして、命令群やクロッ ク数、命令長、キャッシュ、アライン、外部I/Oのバランスを加味する 様になり、それが頭の中で考えられる様になる。 行きつくところ、VC 等が主流の現代に未だにアセンブラをメインに使う様な筆者が存在する のである(笑) ※注意)筆者の環境は「未だに」486です(笑)。 …おっと、アマチュアな筆者の話は半分に聞いておいて下さい(笑)。 LightCone [2001/01/29 Mon 23:21:12] [202.219.240.235] Pentium 系アセンブラ紹介 このページに完全フリーの 8086〜PentiumPro,MMX,3DNow! に 対応した MASM 準拠のアセンブラを置いておきました。 興味のある方はご覧下さい。 http://homepage2.nifty.com/nowsmart/new_page_2.htm ここで紹介している nwsa.exe は完全にオリジナル作品 ですので著作権にも全く問題がなく、完全に合法です。 なお、最近、MASM32 という MASM に統合開発環境をかぶせた ようなものがネットで MASM 付きで無償でダウンロードできる ようですが、どうやら違法のようです。Microsoft に聞いてみ ましたが、マイクロソフトの管轄外のページのようです。また、 本当の MASM は日本では3万6000円程度で販売されていま すし、他に手に入れる方法としては、MSDN の Universal Subscription と呼ばれる39万円もする年間契約を申し込む しかありません。これより下の年間契約では、MASM は付いて 来ません。つまり、MASM は無料では手に入らないのです。 無料で正式に手に入る86系のアセンブラとしては、この NWSA の他には LASM および NASM がありますが、LASM は 無料版は 100 程度の行数制限がありますし、NASM は文法 体系が MASM とは少し違うようです。 ただし、NWSA にはリンカがついていませんのでご注意 ください。 Sweetin [2001/01/29 Mon 10:24:47] [129.60.50.105] FM-TOWNS別動隊 さん、アドバイスありがとうございました。 本文に掲載されている例題プログラムのソースです。 たぶん、本にも全てのソースが掲載されていると 思うのですが、入力に手間がかかりそうなので・・・ RE:to jacta さん by FM-TOWNS別動隊 [2001/01/28 Sun 03:20:17] [211.18.228.249] そうなんですか(^^; Re:素朴な質問 by jacta [2001/01/27 Sat 12:07:14] [210.235.79.5] プレステはやったことないです。(遊んだだけ) 素朴な質問:to jacta さん by FM-TOWNS別動隊 [2001/01/27 Sat 03:20:34] [211.18.228.249] >jacta [2001/01/25 Thu 00:07:01] [210.235.79.5] >今の私には、PentiumVをアセンブラで作るより、R4000などのRISC >を扱う方がずっと楽という変な状態に陥っています。 プレステ系なんですか? ひま書き by FM-TOWNS別動隊 [2001/01/27 Sat 03:15:17] [211.18.228.249] さて、センター試験もあってか書きこみがかなり減ったみたいだな(笑) 筆者には無縁なのでゴミ書き(笑)しているワケである(笑) ところで、旧98系を入手してヒマな時間にハードをつついて(I/Oポー トいじったり(笑))遊んでいるが、旧98系にはVsync、或いはHsync等 のステータスレジスタはないのかな? VsyncはかろうじてIRQの割り 当てがあるがHsyncはそれもないみたい? FM-TOWNSと違ってゲーム 系のハードじゃないみたいですね。 せめてVsyncのステータス位あ れば画面周りは扱い易くなるが無ければIRQハンドラで似た様な事を するしか無いみたいですね。うーん、さすが「みいそ」ですね。リア ルモードで軽い事をして単に「遊ぶ」つもりだったんだけど結局、PIT イジって擬似マルチタスクでもした方が後が楽かも知れない(笑) 筆者はまだ旧98系についてのノウハウはゼロに近いレベルなので後で 見つけてホッとするかも知れないが今はそれを期待せずにイジって遊ぶ 方に専念する(笑) ところで、カトさんへ。 筆者の旧98でROM-BASICは動きました。 FDISKで区画分割させて何と かメニューを出させてとりあえずROM-BASICが起動しました。 いにし えの青年時代を回想させるN88-BASICですね(笑) ところで、LOADコマ ンドは一体なんでしょうか? まさか、CMT-I/Fのルーチンも残ってい るのかな?(爆) 凄すぎるぞ、みいそ(笑) ひまRES:to Sweetin さん by FM-TOWNS別動隊 [2001/01/27 Sat 02:38:08] [211.18.228.249] >Sweetin [2001/01/25 Thu 20:05:15] [129.60.50.105] >今となってはその入手が不可能となってしまった、「はじめて >読む486」の別売フロッピー(精確にはその中身であるソー >スコード)を入手したいのですが、 >(一部省略しました) ところで、Sweetinさん、そのソースコードとはどんなモノですか? それをここに書いて再度upした方が良いかと思われます。 あの本は筆者も昔持っていましたが、ただ単に「買った」だけの本だっ たので、あまり中身は見ていません。と言うより、CQ出版かインテルの サイトを見た方がプラスだと思います。 Sweetin [2001/01/25 Thu 20:05:15] [129.60.50.105] はじめまして、 今となってはその入手が不可能となってしまった、「はじめて 読む486」の別売フロッピー(精確にはその中身であるソー スコード)を入手したいのですが、 どなたか、譲っていただけないでしょうか? どうぞよろしくお願いします。 jacta [2001/01/25 Thu 00:07:01] [210.235.79.5] はじめまして、jactaと申します。 私も仕事柄アセンブラとの付き合いは10年前後になります。 組み込み関係が多かったので、いろんなCPUを手がけましたが、どういう わけか、インテル系だけ縁がありません。パソコンとかのプログラムを していて、ここはアセンブラで、と思っても、怠けているのが現状です。 今の私には、PentiumVをアセンブラで作るより、R4000などのRISCを扱う 方がずっと楽という変な状態に陥っています。 通りすがり [2001/01/21 Sun 03:30:05] [216.104.228.125] >FM-TOWNS別動隊さん ええ。そのようですね。 かなり私は「薄い」ですから。 すみません皆さん。 教えてくんをしてしまいました。 それでは。 ひま書き by FM-TOWNS別動隊 [2001/01/21 Sun 03:11:49] [211.4.97.18] ひま(爆笑)なのでFM-TOWNS関連の話題を1つ。 FM-TOWNSではスプライトがあります。「赤本」など公開された資料では 32K色モードでの使い方が色々と掲載されています。 筆者はその資料の内容を見て「まだある(笑)」と思い、CRTCレジスタを イジって遊んでいますが、どうやら16色モードのスプライトも実用でき そうです。マニアな方は既に分かっていると思いますが、ルックアップ テーブルを使うとパターを作成するのはかなり複雑になります。そこで ルックアップテーブルを使わずにフルカラーを使えばカラーデータはそ のままドットに対応します。詳しい事は長めになるのでまたの機会に、 と、言う事で(^^; ※注)ここで言う「16色スプライト」とは32K色画面でのパレットテーブ ル(ルックアップテーブルとも言う)を使ったスプライトではなく16色画 面モードでのスプライトの事です。 追加RES:to 通りすがり さん by FM-TOWNS別動隊 [2001/01/21 Sun 02:59:45] [211.4.97.18] 暇(爆笑)なのでINT 13Hをサーチしてみました。 あなたはかなりヒマみたいですね。どうせなら画面上で何か楽しませて くれないかな?(大爆笑) あ、それと、ここにアクセスされる大半の方は筆者の様な無能(笑)では ないでしょうから多分相手にもされないでしょう(そうだっ!(笑)) ひまRES:to 通りすがり さん by FM-TOWNS別動隊 [2001/01/21 Sun 02:26:02] [211.4.97.18] >>FM-TOWNS別動隊さん >ついでですが >あなた、ただの荒らしですか? 内容の薄い質問の様ですが(笑)、筆者は暇潰しのつもりですよ(笑) ところであなたに質問ですが(笑)、筆者はシステム上の"INT XXH"なる ものにあまり依存した事がありません(笑) できましたら"INT 13H"の 内容を教えてもらいたいと思いますが(笑) 筆者はなにぶん無能な者で すからね(爆) そうなんですか、筆者は「荒らし」なのかな?(爆笑) 次は内容の厚い質問でも待っていますよ。あなたにそれが「あれば」で すけどね(大爆笑) 通りすがり2 [2001/01/20 Sat 03:19:17] [216.104.228.125] 先程のrom basicで昔のソ−スをみていましたところ 懐かしいものがあったので書きます。 windows上でもこれは走るのでしょうか。 . . hd: xor dx, dx hd1: mov cx,1 push 0311h pop ax mov dl, 80h mov bx, 5000h mov es, bx int 13h jae rip_hd2 xor ah, ah int 13h hd2: inc dh cmp dh,4 jb hd1 inc ch cmp ch,99h jb rip_hd . . masm32、使ってらっしゃるかたいらっしゃいますか。 私ははじめのほうで挫折しそうです。。。。 >K.Takahashiさん はじめまして。私は作れませんが面白そうなツールがあるです。 既出でしたらすいません。<ゲーム http://www.3drad.com/ >FM-TOWNS別動隊さん ついでですが あなた、ただの荒らしですか? 通りすがり2 [2001/01/20 Sat 03:19:05] [216.104.228.125] 先程のrom basicで昔のソ−スをみていましたところ 懐かしいものがあったので書きます。 windows上でもこれは走るのでしょうか。 . . hd: xor dx, dx hd1: mov cx,1 push 0311h pop ax mov dl, 80h mov bx, 5000h mov es, bx int 13h jae rip_hd2 xor ah, ah int 13h hd2: inc dh cmp dh,4 jb hd1 inc ch cmp ch,99h jb rip_hd . . masm32、使ってらっしゃるかたいらっしゃいますか。 私ははじめのほうで挫折しそうです。。。。 >K.Takahashiさん はじめまして。私は作れませんが面白そうなツールがあるです。 既出でしたらすいません。<ゲーム http://www.3drad.com/ >FM-TOWNS別動隊さん ついでですが あなた、ただの荒らしですか? 通りすがりですが [2001/01/20 Sat 01:29:41] [216.104.228.125] はじめまして。 ユーザーをrom basicに落とすのは int 18hでしたっけ。 参考までに。 by FM-TOWNS別動隊 [2001/01/19 Fri 01:18:15] [211.18.228.249] このボードは語頭の全角スペースは受け付け、半角スペースとタブ記号 はNULLになる。 次に、ライン中の半角・全角スペースはそのまま受け付け、タブ記号は 半角スペースになる。 参考までに試してみました(某氏の要望に沿う為にちょっと試していま す(笑)) プログラムのリストを載せるときには語頭に何かダミーを付けてそのあ とはタブを半角スペースに展開すればいいと思いますよ(^^; ボードのテストです。 by FM-TOWNS別動隊 [2001/01/19 Fri 01:12:19] [211.18.228.249] TEST ←半角スペース TEST ←全角スペース TEST ←タブ記号 ボードのテストです。 by FM-TOWNS別動隊 [2001/01/19 Fri 01:09:42] [211.18.228.249] ←半角スペース ←全角スペース ←タブ記号 訂正:9821Xa10ではなく9821Xe10です。 by FM-TOWNS別動隊 [2001/01/17 Wed 03:09:34] [211.18.228.249] 下記の書き込み中に誤りがありました。失礼しました_(..)_ おまとめRES:to カトさん & 澤口@一升金さん by FM-TOWNS別動隊 [2001/01/17 Wed 02:44:20] [211.18.228.249] どうもRESありがとうございます。 まず、カトさんへ。 >FM-TOWNS別動隊さんの記述内容には いわゆる半角カナや半角中点が > *沢山*使われています。当方の環境(IE4.0sp1)ではうまく表示され >ていますが、ブラウザによってはバケバケになるでしょうから、必ず >守ってください。 失礼しました_(..)_ 悪気はなかったのですが(笑)これからは少し意識 します。 >最終的にFM-TOWNS別動隊さんが何をしたいかによって意味をなさない >かも知れませんが…。 筆者が現役MSXユーザーだった頃にとっていたスタイル、「CPU負担 の少ない画面モード等を使って軽いゲーム等を作って友人等と交換会な どして楽しむ」、これをFM-TOWNSでも行い、次にPC/AT互換機或いは旧 98系などでも同様にやろうかな(予定は未定)と、甘いアマチュアな今日 この頃です(笑) >これは、以下の記事によると、BASIC のROM自体はどんなPC-98シリー >ズにも(but, not PC98-NX)載っているもののようです。(なんせDOS >なども起動時にIPLからROM(BASIC)内ルーチン使っているようですか >らね)。 >でも、"ROM BASIC" は機種によっては起動できないみたい(?)です >ね。 そうですね。筆者は先日、PC-9821Xa10(486DX4-100MHz)を格安でGET しました。アスキーやBNNの資料によれば0E8000HからROM-BASICがある みたいだったのでとりあえずDEBUGで逆アセンブルして「行けそうな」 番地に飛ばしてみました。「HOW MANY FILES?(0-15)」の次のタイトル までは表示されますが、それ以降はハングってしまいました(笑) 尚、 筆者の使用している98はWin98しか入っておらず、Win98上で作成し た起動ディスクの内部動作がはっきりしないので何ともいえないのです が、リアル-プロテクト間を行き来していれば問題があるかも知れない のかな?、と勝手に思っています(笑)。尚、筆者の98のキーボードは 純正のキーボードではない(SANWA製とか書いてある)のでHELPキーでの メニューも出ない(?)みたいです。 >それで FM-TOWNS別動隊さんは、 >"ROM BASIC" を使おうとしていますか? それともDISK BASICを使お >うとしていますか? >それとも、BIOSや LIO(low level I/O system?)などの機能を(DOS >などから)使うためにBASIC ROMを必要としていますか? 筆者としては「全て」とりあえず使えたらいいかな(爆笑)と思っていま すが、当分の間、DOSレベルでの軽いアプリしか作らない(MSXスタイル) のでROM-BIOSだけで充分です(笑)。リアルモードしか使わないので楽 で楽しくなりそうかな?、と思う。 >手元に、junk FDとして入手したN88 DISK BASIC起動FD(5"FD/原本) >が余っています。 >もし必要でしたら3.5"にバックアップしたものも一緒にお渡しできま >すが。 御配慮有難う御座います。筆者はDOSだけで充分です。 >ところで、FM-TOWNS user(初代 & TOWNS II Fresh/E)の私は、FM- >TOWNS別動隊さんが作ったというTSS(time sharing systemですよ >ね?)に興味があります。 >どこかに公開はされないんですか? (それこそ将来のハッカーのため >に。) それ単体では何の意味も持たないので、バイナリーやソースごとを公開 するつもりはありません。ソースのコメントは旧来のプログラマの好む (そして今時のプログラマの嫌う(笑))取って付けた様な片言英語の塊で す。とても、ノーマルな人間には理解不能(笑)ですよ。 とは、言っても、口に出して何もしなければそれは「無いのと同じ」に なってしまいますから、筆者はとりあえずここのボードで「偉そうに」 分割してノウハウ(笑)を説明してみますね。それはいつまでとかは限定 できないので御了承を(今時の説明文付きで出します)。 そして、澤口@一升金さんへ。 >大昔は PC98 のG-RAM が 2バンクあることを利用して、これを素早 >く切り替えて見かけ上中間色を出すテクニックがありました。 大昔だなんて(笑) FM-TOWNSでも、16色モード(或いは256色モード) ではパレットがあるのでHsyncの隙間を見て書き換えれば見かけ上、色 がいっぱいでますよ(笑)。但し、FM-TOWNSのパレットはI/Oアクセスな のでかなり書き換えが遅く、1ラインあたり、5色程度の切り替えしかで きません。まあ、それでも1画面全てでみればいっぱい色がでますが(笑)。CPUのクロック数をみれば納得してもらえますがいくらCPUの性能 が上がっていてもI/O命令はクロック数が逆に上がっています。つま り、変わっていないのです(笑)。どちらにしてもあまり実用的じゃない かも(IRQの割り当てにHsyncがあればかなり使えただろうけど、ちょっ と惜しい(Vsyncはあるが))。8253でHsyncの周期を時間計算してバック グラウンドにする事もできそうですが、筆者はそこまでやる気がありま せんでした(笑)。今時のゲーム用のハードの性能は雲の上の様な感じが しますが、筆者は一向に気に病みません。ゲーム自体のバリエーション が欠けているのを見ればそれがわかると思います。簡単な構造で、計算 速度が速ければ個人利用にはいいかな、と思う(商用にはまず向かない が筆者はアマチュアだからどうでもいい(笑)) 個人レベルって言うの はベーマガレベルのプログラムがアセンブラで書ければ問題ないんじゃ ないのかな(笑) …なんかきちんとしたRESになっていなかったかも(笑) >ROM-BASIC の解説はあらためて探してみると Web 上には見あたら >なくなってしまっているようです。 > >こういうのはありましたが。 >↓ >http://www.webtech.co.jp/undoc/ どうも有難う御座います(^^; 余談&雑念(笑):旧98系やPC/AT互換機はリアルモードのアプリケーシ ョンの流行った時代の方がイケてた様な気がするのは 筆者だけだろうか? FM-TOWNSの場合、リアルモード では32K色画面やスプライト面のアドレスに届かない ので必然的にプロテクトモードを使わなけばならなか ったが、旧98系は割り切って(MSXの様に)使えばまだ まだイケると筆者は確信する(笑)。さらにPC/AT互換 機の場合はVGA以前の画面モードの方が実にMSXライク (スプライトは無いけど)で面白そうであったりする。 これはリアルモードでもアドレスが届くのでPC/AT互 換機も旧98系と同様にMSXライクにラフに使えそうか な?、と夢想に更けたりする(笑)。遊びで64KBの境界 をまたぐ心配をした事はありません(笑)。 力卜 [2001/01/16 Tue 00:16:55] [202.248.126.100] FM-TOWNS別動隊さん、こんばんは。力卜と申します。 本論から外れますが、このページのトップの“− Caution! −”に、 「半角カナは絶対使用しないでください。」とあります。 FM-TOWNS別動隊さんの記述内容には いわゆる半角カナや半角中点が *沢山* 使われています。当方の環境(IE4.0sp1)ではうまく表示されていますが、 ブラウザによってはバケバケになるでしょうから、必ず守ってください。 さて、現役ユーザーとは言いがたい私 (98用DOSアプリ作成のために2年前に 中古の98NOTEを買ったので、98をちょっと意識するようになった程度) ですが、 以前に netnews に情報が流れていたのを覚えていたので回答してみます。 最終的にFM-TOWNS別動隊さんが何をしたいかによって意味をなさないかも 知れませんが…。 >後半の機種はROM-BASICがないと記載されていた様な覚えがあります。 これは、以下の記事によると、BASIC のROM自体はどんなPC-98シリーズにも (but, not PC98-NX)載っているもののようです。(なんせDOSなども起動時に IPLからROM(BASIC)内ルーチン使っているようですからね)。 でも、"ROM BASIC" は機種によっては起動できないみたい(?)ですね。 http://queen.heart.ne.jp/cgi-bin/browse?msgid=<8ubrao$86t$1@s-news2.din.or.jp> http://queen.heart.ne.jp/cgi-bin/browse?msgid=<8uefuf$5h4$1@bgsv5905.tk.mesh.ad.jp> "ROM BASIC" が起動しない場合でも、DISK BASICなら起動することがあるみたい ですが、DISK BASICがすべての機種で扱えるかも微妙なところですね。 http://queen.heart.ne.jp/cgi-bin/browse?msgid=<8vlehd$v70$1@neelix.mmtr.or.jp> なお、ROM BASIC単体だと "フロッピーが(標準のコマンドから)使えません"。 (ROM BASIC から HDDが使えるか否かはわかりませんが、多分ダメでしょう。) それで FM-TOWNS別動隊さんは、 "ROM BASIC" を使おうとしていますか? それともDISK BASICを使おうとしていますか? それとも、BIOSや LIO(low level I/O system?)などの機能を(DOSなどから)使うために BASIC ROMを必要としていますか? 手元に、junk FDとして入手したN88 DISK BASIC起動FD(5"FD/原本)が余っています。 もし必要でしたら3.5"にバックアップしたものも一緒にお渡しできますが。 ところで、FM-TOWNS user(初代 & TOWNS II Fresh/E)の私は、FM-TOWNS別動隊さんが 作ったというTSS(time sharing systemですよね?)に興味があります。 どこかに公開はされないんですか? (それこそ将来のハッカーのために。) ではでは。(うっ、また長くなってしまった…) 澤口@一升金 [2001/01/14 Sun 12:49:38] [211.4.198.55] 澤口@一升金です。 to FM-TOWNS別動隊さん: >とりあえず、ここ(http://elm-chan.org/docs/te04.html)を見てみ >ました。アマチュアな筆者が見るに、これは「アルカノイド」のパドル >みたいなもの(笑)ですね。 あの図は説明用にきれいに書いてありますが、実際のエンコーダ出 力はアナログ波形ですから、エッジは鈍ってます。パルス幅も鈍り具 合も速度依存ですね。 で、当然ノイズやチャッタが入ってくるわけですから、ソフトだけでやろ うとすると結構な部分が試行錯誤しながらの力技になります。 >とりあえずよし、です。16色モードしか使わないけど(笑) 大昔は PC98 のG-RAM が 2バンクあることを利用して、これを素早く 切り替えて見かけ上中間色を出すテクニックがありました。 音の方もスピーカー周波数を数ms で切り替えて見かけ上アナログ音 声(聞くに堪えない)を出力していたような。 ROM-BASIC の解説はあらためて探してみると Web 上には見あたら なくなってしまっているようです。 こういうのはありましたが。 ↓ http://www.webtech.co.jp/undoc/ 澤口@一升金 [2001/01/14 Sun 12:23:06] [211.4.198.55] 澤口@一升金です。 to muroさん: ライントレースの場合、 モーター速度制御にはあまりナーバスになる 必要はありません。極端な話、電流を固定にしてもそれらしく動くは動 くわけです。 それよりシビアなのがステアリングですが。 DCモーター4個ってことは 車輪それぞれにモーターをつけて左右モーターの速度差でステアリン グするのでしょうか。 それだとすると4輪ドリフトになりますから、なかなか曲がりませんよ。 質問:アマチュアな方へ by FM-TOWNS別動隊 [2001/01/14 Sun 02:55:48] [211.18.228.249] アマチュアな方へ質問します。あなたは今後趣味でパソコンをイジると すればどの様な目的を持ってイジりますか? 筆者は20年を超えるアマ チュアで今の若い世代とのギャップがかなりあると自覚していますが、 それにあたっても、筆者の周辺以外の広い考えをここで得られれば幸い です。自作プログラムの交換で盛り上がっているのか、或いはWeb上で の情報収集プラスアルファで軽いプログラミングをしているのか、はた またアダルトサイトの情報収集の効率アップの為のプログラミングなの か(笑)、情報の範囲は問いません。あなたのピュアな考えが筆者を含め ここにアクセスする人達のマンネリ防止に役立つかも知れません。では あなたの善意をお待ちしております。 まとめRES:to muroさん & 澤口@一升金さん by FM-TOWNS別動隊 [2001/01/14 Sun 02:37:21] [211.18.228.249] まず、muroさんへ。 頑張って下さい。 何故Z80なのかそれは筆者の干渉するところでは無 いので言及(筆者は結構くどかったりする(笑))しない事にします。 また、ひまがあればどんどん書きますね。 そして、澤口@一升金さんへ。 とりあえず、ここ(http://elm-chan.org/docs/te04.html)を見てみ ました。アマチュアな筆者が見るに、これは「アルカノイド」のパドル みたいなもの(笑)ですね。プロとアマではやはり情報量の差がでてしま うんだな(笑)。とは言うものの、今後何かの参考になるかも知れません 。 次に、 >わたしは途中からPC-ATクローン機に変えたので PC98シリーズの正 >確な変わり目はわかりませんが、確か PC9821 の Xaあたりまでは >ROM-BASIC があったと思います。 どうもRESありがとうございます。ROM-BASICが動いてPentium以降なら とりあえずよし、です。16色モードしか使わないけど(笑) muro [2001/01/13 Sat 18:58:59] [202.223.168.2] FM-TOWNS別動隊さん、澤口@一升金さんレスありがとうございます。 これからはこれらのハードを使用して、ライントレースをさせるプログラムをZ80を学びつつ作ろうと思います。 まだまだ未熟者ですので、助言にたよると思いますがご迷惑でなければまたよろしくお願いします。 澤口@一升金 [2001/01/13 Sat 10:37:12] [211.4.198.31] 澤口@一升金です。 to muroさん: ロータリーエンコーダの仕組みはここにちょっと解説があります。 ↓ http://elm-chan.org/docs/te04.html DCモーターの制御は D/A コンバータでやるのか PWM 制御で やるのか分かりませんが、定周期カウンタでロータリエンコーダ の出力をカウントしてやれば車輪の回転速度が分かりますから、 それが目標速度より低ければ加速、高ければ減速するようにDC モータへの出力を制御してやります。 いわゆるフィードバック制御ですね。モーターには慣性があります ので、出力を変化してもすぐには速度が変わらないところがミソで す。 入出力信号には時間遅れや誤差がありますので、デジタルフィル タを入れたりファジィ制御をかけたりするわけですが、Z80 あたりだ とかなり低速度にしないと難しいかもしれません。 澤口@一升金 [2001/01/13 Sat 10:19:29] [211.4.198.31] 澤口@一升金です。 to FM-TOWNS別動隊さん: わたしは途中からPC-ATクローン機に変えたので PC98シリーズの正確 な変わり目はわかりませんが、確か PC9821 の Xaあたりまでは ROM- BASIC があったと思います。 ダルマ [2001/01/12 Fri 17:20:07] [211.5.129.241] けんぼぉさんレスどうもです。 >既にご存知だと思いますが、インテルのサイトです。(上、中、下巻) >http://www.intel.co.jp/jp/developer/design/intarch/manuals/index.htm 早速、PDF ダウンロードしました。 かなり長いので、時間かかりそうだ、これは。 muro [2001/01/12 Fri 14:38:12] [202.223.168.3] ロータリエンコーダ ロータリエンコーダとはタイヤみたいなもので 1回転ごとに1パルスだすものです。つまり1回転でどれだけ進めるか がわかればそのパルスをカウントして走行距離や曲がる角度を制御出来ると考えているのですが・・・ちなみに四つのDCモータとフォトセンサ、赤外線センサ(これらは路面検知と物体検知に使用する予定です) とロータリエンコーダを使ってマイコン制御するものを使っています。 けんぼぉ [2001/01/12 Fri 10:32:22] [210.163.178.219] ども、けんぼぉです。 ♪ダルマさん はじめまして。 > P3のSSE命令についてを詳しく解説したページなど、ありましたらご紹介ください。 既にご存知だと思いますが、インテルのサイトです。(上、中、下巻) http://www.intel.co.jp/jp/developer/design/intarch/manuals/index.htm DDJ Microprocessor Center http://www.x86.org/ ↓英語のサイトはこちらへ。 エキサイト翻訳 http://www.excite.co.jp/world/ ひまRES追記:to muro さん by FM-TOWNS別動隊 [2001/01/12 Fri 02:18:51] [211.18.228.249] Z80の勉強を今から1からするのは大変でしょうが、筆者のアマチュア ライフのノウハウの中からとりあえず提言をします(笑) 制御関係みたいなので、クロック数(Z80ではステート数と言うのが慣 例)と命令を関連付けたプログラミングができる事。 命令群とレジスタの組み合わせ、それにメモリを含めたアドレッシング モードが簡単な様で、それを体得するにはかなりの経験が必要。86系や 68系はあまり「クセ」が無いが、Z80はかなりの「曲者」。 一番の王 道は時間がかかっても自分の頭で試行錯誤して得る事。 例えば、AレジスタとHLレジスタ以外は使えそうで使えない。かと言 って、同じ8ビットの6502や6809の様にメモリアドレッシングが豊富な ワケじゃない。 レジスタ・裏レジスタ・スタック・メモリのバランスとステート数と、後 はちゃんと「考えて」プログラムする。 これが無いと、できるオブジ ェクトはアセンブラで作ったものとは思えない位にデキが悪くなる。こ のへんが現在の86系の開発と大きく異なる(重要)。まあ、自己書き換え プログラムなどは知らなくても問題はないでしょう。(86系ではディス クリプタ属性チェックを関連付ける必要がある(ALIAS定義)のであまり 使うことが無い。今から先の世代は知らなくても問題はない。要する に面倒だ(笑)) 開発ツールは一体何を使うんでしょうか? まさかM80じゃないですよ ね?(笑) 使うアセンブラにもよるが、とにかくZ80はルーチン毎の記述が 長めになりやすいので、マクロのある物がいい(昔とは違うから(笑)今 のツールにはあるでしょうね)。 あとは、条件リターン(RET cc)等の使い方次第でしょうね。 muroさ んの手がける物が私用の物ならいちいちドキュメントを出す事も、流通 を意識しなくてもいいので、思い存分にZ80に最適化された構造でプロ グラムされればそれで満足いくのではないかと思います。「入口と出口 の数を同じにする」なんて言う、「お堅い」事は聞いただけでも寒いと 思うのは筆者だけだろうか?(笑) まあ、とりあえず、筆者の(遠い過去の(笑))アマチュアライフからごち ゃごちゃと書いてみました。 ひまRES:to muro さん by FM-TOWNS別動隊 [2001/01/12 Fri 01:34:23] [211.18.228.249] >muro [2001/01/11 Thu 20:30:32] [202.223.168.3] > |(一部省略) >早速ですが、ロータリエンコーダを使用してDCモータを制御する >(具体的には走行距離を制御したり、実際に動かして曲がる角度を調 >整したりする予定です。)にはどのような方法にすれば良いのでしょ >うか 筆者はピュアなアマチュア(笑)なので抽象的な質問はかなりわからない (笑)。 muroさん、この制御をする、と、言うのは既存のハードですか? それ とも、自作のハードですか? と言うかロータリエンコーダって何です か?(筆者は無知なので御勘弁を(笑)) A/D・D/Aコンバータとか8255あたり などを通すのならばまだ書いている事はわかる様な気がする(笑) あ、そうか、ロータリエンコーダってのがわからないと書いている意味 がないみたいですね。 失礼しました(笑) 質問 by FM-TOWNS別動隊 [2001/01/12 Fri 01:21:50] [211.18.228.249] 現役の旧PC-98XXユーザーへ質問ですよ。 筆者はあまり、旧98系には詳しくありません。 昔の雑誌などによると 後半の機種はROM-BASICがないと記載されていた様な覚えがあります。 (うろ覚え(笑)) 旧PC-98XXシリーズにおいてROM-BASICの搭載されていない機種はあるので しょうか? 筆者は旧PC-98XXが世に出てからほとんど触る機会がなか ったのですが(単に興味とお金がなかった為(笑))、最近古本屋で見つけ た「PC-9800シリーズテクニカルデータブックBIOS・DEVICE編」なる資料 をGETしました。 まあ、まだ普通の書店でもあるかも知れないが(笑) 筆者は486系TOWNSでの開発に煮詰まりを感じつつ「このままでは飽きる 」と思い、値頃感の出てきた旧98系をターゲットにしようかと思う今日 この頃です。 FM-TOWNS関連の物品はかなり手に入りにくくなっており (特に筆者の生息する片田舎では)、Pentium以降の環境に移行したくて もそうはさせてくれない様です。 そこで、旧98系に目をつけたワケで す(笑) とりあえず、TOWNS用の386ASM・386LINKはPC/AT機でも動いて くれるので旧98系でも動くだろうし(但し386DEBUGは暴走するので要注 意)、最低限の資料もGETしたので(あくまでも最低限ですが(笑))、旧 98系のROM-BASICのある機種とない機種を教えてくれれば有難いです、 はい。 muro [2001/01/11 Thu 20:30:32] [202.223.168.3] 初めまして 最近、Z80アセンブラについて勉強中ですが教えてくれる知人 が周りにいないのでしばらくの間お世話になります。 早速ですが、ロータリエンコーダを使用してDCモータを制御する (具体的には走行距離を制御したり、実際に動かして曲がる角度を調整 したりする予定です。)にはどのような方法にすれば良いのでしょうか どうぞ、ご教授ください。 ダルマ [2001/01/11 Thu 15:25:03] [211.5.129.241] 初めて投稿させていただきます。 最近、アセンブラに興味をもち、特にCPUの拡張命令を勉強中です。 そこで、P3のSSE命令についてを詳しく解説したページなど、ありましたらご紹介ください。 けんぼぉ [2001/01/09 Tue 10:07:04] [210.163.178.219] ども、けんぼぉです。 CQ 出版から出ているインターフェースという雑誌に、 「開発技術者のためのアセンブラ入門」という連載が 始まっています。興味のある方はどうぞ。 http://www.cqpub.co.jp/interface/default.asp ひまRES:to meisyuu さん by FM-TOWNS別動隊 [2001/01/09 Tue 03:54:52] [211.4.97.18] >meisyuu [2000/11/15 Wed 16:24:36] [202.48.8.203] > |(一部省略) >IA-32(80486)で、プロテクトモードの割込み発生時のス >タックの動きってどうなってるんでしょうか? >インテルのマニュアルを読んでも、どうもよくわからないで >すよ。 >どういうレジスタが具体的にPUSHされて、RETIで割込みから >抜ける時は、スタック内の情報がどのレジスタに戻されて、 >元のルーチンに戻るのでしょうか? ひまなのでRESします。答えになるかどうかは別にして(笑) まず、プロテクトモード時のスタックの動き、と言うかタスクスイッチ 全般についてはマニュアルに詳しく「和訳」(わかりにくいと思うが)さ れて載っています。meisyuuさんはプロテクトモード時のタスクスイッ チの動きについて詳しくないとは思いますが、まずそちらを理解してか ら、IRQテーブル分岐や、レディ待ちなどの詳細の知識を深めてみては どうでしょうか? この手の技術を知るには1つの方向からの情報収集 だけでは、かなりの危険と誤りを生じる事になります。 インテルのマ ニュアルはあくまで「雛型」なので、他の情報源も必要になってきます。 過去ログをサーチするのは面倒でしょうから、筆者から推薦の文献を下 記に示します。 CQ出版:80286実践入門(絶版) プロテクトモードのプログラムを1から「やってやるぜ!」と 奮起している人にはこの本がお勧めです。古本屋にあればラッ キ−、なければ「あきらめ」るんですね(笑) なぜ、ソフト会 社が当時プロテクトモード用のソフト開発になかなか移行しな かったかがなんとなくわかる。1000人中、999人は「投 げる」だろうな(笑) オーム社:図解80286(?) これも、プロテクトモードのプログラムをやろうとする人に はお勧め。 これ以降のオーム社の386や486の専門書 はこの本を持っている事を前提に書かれていると思われるの で、無いよりあった方がいい。 とりあえず、重要なのを2冊。あとは、ジャンク級だね(笑)。 不思議に思われるかも知れないが、プロテクトモードについて詳細に解 説している文献は286が出た当時の物しかないのである。ただし、こ れはそれ以降のプロセッサにも応用がきくので結構有難いのである。ま あ、欲を言えば、286のPCがあれば厳密な動作チェックができるか らこれもあればよし(386以降だと、TSSディスクリプタのチェック があまくなる)。 筆者はたまたま中古ショップで286のFMRをゲットし たのでラッキーだったかも(TOWNSのツール類は使い回しがきいた)。 ひまRES:to かわがみ氏 さん by FM-TOWNS別動隊 [2001/01/09 Tue 02:49:16] [211.4.97.18] ひまRESですよ。 >かわがみ氏 [2000/11/24 Fri 17:16:21] [202.221.8.146] > |(一部省略) >最近、アセンブラの勉強をはじめたのですが、どうも他人の書いたコ >ードがすらすら読めません。 >アセンブラをC言語風のスクリプト言語に変換してくれるツールとかは >ないでしょうか? 筆者もこどもの頃、こんな事を考えていました。筆者の友達は200ボ ルトのコンセントにパソコンをつなぐと処理速度が2倍になると力説し ていました(笑) コンピュータでのステップインの方法は星の数ほどありますが、筆者は コアな環境から必要な知識のみをGETする、と、言う方法で少なくとも 自分の範囲の中では自由自在にパソコンを使いこなせているつもりです (プロの方は鼻で笑ってくれて結構ですよ(笑)) まあ、現代は色々と雑念(インターネット・裏サイト・18禁サイト等 (笑))が多くてプログラミングなどと言う狭い範囲のことにこだわる事 ができるのは多分、筆者を含めたアマチュアな人だけなんでしょうね。 さて、本題に戻るとして、スクリプトがしたいなら、そちらに的を絞り そうでなければアセンブラのみにした方がいいでしょうね。 今時のプ ログラマ(いるのかな?)がどんな志向なのかは知らないが、出版物の 傾向からしてVC++とかやっていれば無難じゃないの?って思う。 で、筆者の経験(アマチュアな)からして他人の書いたコードを理解しよ うとする事はそれ自体時間の無駄であると思う。そうするより、とにか く、自分自身で試行錯誤した方が得られる知識は多いと確信する(不快 な思いをしなければ真の理解は得られない)。 もっとも、今のパソコンはエディット-アセンブル(コンパイル)-実行 -デバッグのインターバルがかなりうっとうしいので今からプログラミ ングを始める人はどうだろうかな? 電源ON・BASICは何処に(笑) ひまRES:to もっちー さん by FM-TOWNS別動隊 [2001/01/09 Tue 02:15:00] [211.4.97.18] ひまなので過去ログのRESでもしましょうかね。 >もっちー [2000/10/18 Wed 12:36:06] [133.70.143.44] > |(省略) >そこで質問なんですが,Pentiumでも、やっぱり >FPUと普通の命令は並列に動作してるんですか? TSS(Task State Segment)とその元のディスパッチャが対応(486のTSS )していれば問題無いと思う。筆者は自作のFMR用の286のディスパッチ ャをFM-TOWNSで「動くのかな?」と思いつつ、インテルのマニュアルを 馬鹿正直に信じそのままおもむろにディスケットをTOWNSに差し起動さ せようとしたが駄目だった。FMRとTOWNSではFDDのIPL起動番号が違う と起動してくれないので要注意。次に、IPL起動番号を3(or4)にして再 起動。これで、とりあえず、次のステップに進み、画面がおかしくなっ た。この症状もFMRとTOWNSの画面周りのハード構成に若干の差異があ る為に起こることである。これを直し、さらに、ソース(スパゲッティ されたソース(笑))を手直しし(IRQテーブルの書き直しと8259のマ スクのやり直し。これもFMRとTOWNSでは若干異なる)してとにかく再 起動。 動いた!(爆笑) インテルのマニュアルは「書いてあるとおり」に動きます。但し、CPU の周辺については自分で差異を埋めるしかないでしょう。 で、本来の質問のほうですが、メーカー提供のシステムについては筆者 はあまり(と言うか、全然知らない(笑))関知しません(笑) 筆者 はコアな技術資料に基づき直接ハードウェアをつつく「非常に行儀の悪 い」プログラマ(あ、プロじゃないな(笑))なので、本職の人は鼻で 笑うなり、「今時こんなのがいたのか」などと物議を醸して下さい(笑) 追記 by FM-TOWNS別動隊 [2001/01/07 Sun 07:38:26] [211.4.97.18] そういえば、80年代前半の86系のシステムを「知っている」人って スゴイですね。 筆者はまだ「こども」でした、はい(笑) 「誰かさん」はスゴく偉いか、リッチなんだろうなぁ(沈黙の微笑) あまりリッチじゃなくてしかもお馬鹿なFM-TOWNS別動隊より(笑) アセンブラ不要論 筆者のハンドルは ’FM-TOWNS別動隊’ [2001/01/07 Sun 07:30:36] [211.4.97.18] ジャンク級のPC/AT機を購入したからにはやはり技術資料が不可欠だと 思い、まず、オヤジ丸出しで、「書店巡礼」(笑) 当然、この時期に コアな文献などある筈が無く、CQ出版に「お電話サーチ」(笑) それ によれば「IBM-PC活用云々96・97あたり」らしかったが、当然、そ れらは絶版。 筆者はウィンドウズ98或いはMeなど買うつもりは無か ったので、PC-DOSかLinux(雑誌の付録のFTP版?)で充分だな、と勝手 に確信を持つ。 PC-DOSなど筆者の生息する片田舎などのショップにあ る筈もなく、第2の選択肢・Linuxにする(笑)。 どのみち、PC/AT機をFM-TOWNSの様に極限まで使おうという意志は無い ので(MSX並みにシステム依存でいいや(笑))LinuxでのGUI環境で遊んで みるか、と、夢想にふける(笑)。 しかし、そこにも壁が。 GCCの ライブラリのマニュアルは未だ英文。 俺は日本語しかわからんぞい! (笑) 極めつけは肝心のキーボードや画面関係のライブラリはドキュ メントすらない(爆笑) おいおい、GTKでゲームなんかできるか!(爆笑) しかし、ハードの詳細資料がなければas86も使う意味が無い。 しかし、パソコンは国産じゃなきゃ駄目だとこの時確信する。結局、生 産国の「おさがり」のノウハウしか得られない。 MASMがフリーだと言うのはさっき確認したが、筆者は別に「そんなモノ 」いらない(笑) マイナーな386ASMがあるからメジャーなモノは不要だ な(笑) どうもあのメジャーなモノは頭が受け付けない(単に偏屈者だ からか(笑) それともM80の鈍速さにムカついた過去があるからか(笑)) そういえば、MSXにはSimple-ASMという、ROMカートリッジのアセンブ ラがあった。 オンメモリアセンブル(但し、フリーエリアが極端に小 さい)、オンメモリ実行(但し、オンメモリ暴走もある(笑))という、今 では信じられないスピーディーな環境があった。 筆者はこの環境が初 めてまともにアセンブラを使える環境となった(それまでは16進コー ドを丸暗記し、変人級のハンドアセンブル、であった(笑) 上位ビット の組み合わせによるインストラクションのカテゴリもわかる人にはわか る筈である(笑)) これを読んでいる人達はこんな会話をした事があるだろうか? (電話にて) ある人A:「スクロールルーチンを教えてくれ」 筆者:「いい加減にマシン語覚えたらどう?」 ある人A:「面倒臭〜 頼むよ〜」 筆者:「しょうがねえ野郎だな、じゃ、紙と鉛筆・・・・・」 ある人A:「こっちはO.K.」 筆者:「F3 21 XX XX …… FB C9」 ある人A:(筆者をさえぎる様に)「終わりだな」 (この時、筆者は’ある人A’に限りなく異様なものを感じた(笑)) 筆者は幼少の頃に成り金のお友達宅でL-KIT16を触り、ブロック崩しを し、インベーダーとMZ-80Kの出現でそれまでの生活観を一掃され、一色 に染まる(悪の道に染まる(笑))。 今、考えると当時のパソコン(マイコン)の思想は「脱・大型計算機」で はなかったのかな? 小回りのきくシステムが評価されていたと思う。 今のパソコンは「OS」があり、「仮想記憶」があり、「ネットワーク」 がり、これは旧来の「大型計算機」と同じではないのかな? しかも、 事実上の「情報閉鎖」ときている。 Webサーチで情報収集をやると言 うのはそれがストレスなくできる人(若くて時間とお金のある人)はいい かも知れないが、筆者の様な旧来のスタイル(英文が読めない、オンラ インマニュアルを受け付けない、仮想記憶反対論者、当然偏屈者)には かなりきつい。 大体、LOAD・SAVEでもないのに何でディスクランプが ついてんだよ! 始めから4GB(或いは64TB)積めよ!(爆笑) 筆者はFM-TOWNSの前にMSXを「しゃぶる」様に使っていた。このMSXの 世界もかなり自由(BIOSに依存もできれば、ハードにジカにアクセスし ようとお構いなし)であった。 旧PC98・X68kユーザーもおそらくそれぞ れの機械に共通の認識があるのではなかろうか? 結局、筆者は「イマドキの環境」を「覗き」ながら、旧来のスタイルを 維持している。 実験的なTSS、或いはF-BASIC386+386ASM。通信関係 が無いのならば旧来のスタイルは何らの問題も発生しないと確信する。 問題は今時の世代の人がそれで「満足」するかどうかだろうが。 構文解析・数式展開などに興味を持つ人間などは既に変人扱いなんだろ うな…。 リソース重視・ビジュアル重視・脳味噌軽視かな?(爆笑) RE:(RE:)アセンブラ不要論 筆者の環境 [2001/01/06 Sat 05:36:10] [211.4.97.18] 私は(下の書込でも少し触れた)古い環境の中で遊んでいます。 それは、今は亡霊となりつつあるFM-TOWNS。当時8万の386ASM(386TOO L-BOXのサブセットかな?)を在庫処分セールにて5万で購入(高い!) CQ出版の書籍にかなりお世話になり、IPLから起動できる独自のシス テムを構築。当然、プロテクトモードで動き、不完全ではあるが、TSS を実現。個人レベルでのプログラム製作では486でも充分(重たい 事は避けているが(笑))。 86系のシステムは難解なプロテクトモードが理解できなければそれを 使いこなす楽しみが発生しない。提供されたシステム下でアプリケーシ ョンを作るというのは、経験の長い人間ほど、「なぜ、こんなに自由度 が低いのか」と疑問を感じると、思う。(当然、私の小さなシステムで は特権レベルは全て0。大した事をしていないから暴走しようとお構い なし(笑)) 現在のパソコンは通信関係が割り込んでいるのでそれも考慮されたシス テムを一人の人間がしかも、アセンブラで書くというのは「自殺しろ」 というのとほぼ同義になってしまう。 ただし、8ビット全盛の頃の小規模のソフトを個人レベルで作って遊ぶ には提供されたシステムはあまりにも重たい。 私は幸いにもFM-TOWNSで、ある程度の情報公開がされた機種で自由に 遊んでいるが(パソコンは趣味。仕事は別業種。)、これも、時期を逃 していたら、資料も入手できなかったかも知れない。 しかも、古本屋で見つけた「286実践入門(CQ出版)」がなければ DOS-EXTENDERの下でのプログラミングになるところであった。タイト ルが「286」でも、書いてある事はPENTIUM4でも通じる(と思う)。 64KBの壁が無いとか、ディスクリプタの記述内容の違いはあるが、イン テルのマニュアル(486)ではそれを体得できなかった(単に筆者 の理解能力不足であるが(笑))。 386ASMでのIPL起動の独自のシス テムでは、まさに自由。メモリは4MBしかないが個人使用では「宇宙」 と同じ(笑)。(但し、386ASMではリアルモードのセグメントが混じる と64KBの制限が発生するという理不尽さが付きまとうが。(わかる人 にはわかると思う(笑))) まあ、こんな感じの環境ですよ。 最近はジャンク級のPC/AT機も我が 家にあるが、単に暇つぶし程度にしか触っていない。 FM-TOWNS(別に 他の機種でも良かったが、今から10年前は良く見えたんだな(笑)) を使わずに他の機種を使っていても私は多分同じ事をしていただろう。 やはり、「真の理解」がなければ使っていても面白くない。別に小規模 でもいいから、やはり1からやらないとね。 L-KIT16から始まった筆者のパソコンライフもここ何年かは煮詰まりつ つある。 しかし、常に「自分自身で築きあげる楽しみ」が今でもやは り、ある。 RE:(RE:)アセンブラ不要論追記 [2001/01/06 Sat 04:06:42] [211.4.97.18] それにしても凄いシステム依存(笑) これは、「情報が公開されている」からなのかな? いいえ、「情報が閉鎖されている」からですよ(笑) CPUの初期化、デバイスの初期化、全てアセンブラで記述できますか?(笑) CPUの初期化のみは何とか可能でしょう。ただ単にプロテクトモードに 変えればいいだけだから(笑)(しかし、これもメモリマップがわからなければディスクリプタも書けない(爆笑)) 8253・8259の アドレスはどこに?(笑) TSSができない(笑) デバイスの初期化はまず、不可能でしょう。メーカーのドライバを読む (逆アセンブル)ことなんかしません。逆Cか?(笑)I/O PORTの資料 と操作方法はどこにあるのでしょうか?(爆笑) メーカーのホームペ ージに載っているのかな?(大爆笑) さあ、メーカーの用意したシステムも悪くはないですよ。スループット の低いシステムに依存する事がいいのか、それとも、ストレスを感じる のか、或いは、自分の書いたオプティマイズされたシステムと比較して その性能差を批評するのも(微笑) 私はメーカーの用意するものが悪いとは思いません。個人レベルの使用 には異様にオーバーで必要のないモノが多いとは思いますが(笑) 電源ON、BASICの頃を思い出しましょう。パソコン本体から騒音はしま せんでした(笑) 未来のパソコンは冷蔵庫の中からケーブルを引くの でしょうか?(爆笑) より、自分自身に似合った環境は自分自身で書けるべきであると私は思 います。その為には現在の様な生ぬるい情報公開では不可能であると思 います。本当の情報公開とは、最後の1ビット、1クロックまで正確に 公開される事が当然であり、必要であると私は考えます。 メーカー・ベンダーの方々にはかなり攻撃的に聞こえるでしょうが、こ れらがなければ、「真の理解」は無いと私は確信します。 時に、より良い発展の為には多少の採算(メーカー・ベンダー間の競争 の為に内部技術資料の公開がされない事)を無視する事は必要であると 私は思います。これが、より、コアでカリスマのあるプログラマを輩出 する事につながると思います。 いろいろ書いてもやはり、結論は「ゼロ」でしょうね。実現されなけれ ばそれは「無い」のと同じ(爆笑) RE:(RE:)アセンブラ不要論 [2001/01/06 Sat 03:11:43] [211.4.97.18] 感情的な書込が功を奏し反応があったみたいだ(微笑) では、再び、質問しましょう!(今回はちょっとインテリを装う(笑)) ここに書いている人達はインターネットにアクセスでき、開発環境も ほどほどに整い、過去の蓄積もおそらく(笑)あるんでしょうね。 では、「今から」の人達はどうなるんでしょうね?(笑) 職人芸も「伝達」されなければ「消え」ます(笑) さあ、若年寄の方々の中には8ビットパソコンでハンドアセンブル等と 言う、アラワザから「芸」を身につけた、そういう人もいるでしょう。 では、今、「入口」はありますか? いいえ、あるのは、「出口」のみであると思いますよ(爆笑) 私も難癖をつけつつも、「古い環境」の中で遊んでいますが、80年代 前半の様な大きい「動き」はもう期待していません。 もっとも、それ はここにアクセスされる方々がよく知っていると思いますよ(笑) 子供の遊びの延長の様な自由な雰囲気はすでに消失しました。 現代は 「メシを食う為」の手段なのです(笑) 閉鎖的な思考パターンは短絡 し、そしてスパークする(笑) ごはんを食べる手段を残す為に閉鎖された「自由な空間」。それは言わ ずとしれたパソコン界そのものなのです。自らのバリケードを強固にし ていき、誰も入れなくなる。当事者はそうは思わなくとも周囲はそれを 感じている筈です。 私はこの先にある答えはずっと考えている通り、「ゼロ」であると思い ますよ。なんらかの公の活動があっても多分無駄でしょうね(笑) 力卜 [2001/01/05 Fri 21:49:48] [192.51.44.11] いまっちさん、こんばんは。力卜と申します。 >この場合、どこに、どのタイミングで、どのように保存されるの >でしょうか? ちゃんと知っているワケでも、調べたワケでもなくて恐縮ですが…、 そのマニュアルのその記述は、多分「ハードウェア割込みハンドラが レジスタの値を保証してくれるんだよ」と言っている気がします。 ハードウェア割込みハンドラは自分に制御が渡った後、その割込み ハンドラ自身が今から使用するレジスタをpush命令を使って意識的に スタックにプッシュして保持します。 iret前までにそれらの保存値を、やはり意識的にpopしてレジスタを 復旧します。 これによって、割込み発生前とまったく同じレジスタの値が保証されます。 # 実は、「例外」についてはしりません。 # なんのことでしょうか? ゼロ割りとかのこと? >昔、8086はセグメントプリフィックスと同時に使うと、うまく >動作しない(割り込み時の処理に問題がある)と聞いた記憶がある こちらについては全然わかりません。 ここに書かれている「セグメントプリフィックスと同時に使うと うまく動作しない」というのはある特定の命令のことなのでしょうか? ではでは。 いまっち [2001/01/05 Fri 16:54:38] [202.214.198.11] はじめまして。 x86アセンブラを再勉強していて疑問に思ったことがあるので 質問させてください。 リピート・ストリング操作についてなんですが、 インテルのリファレンスマニュアルには「例外または割り込み によって中断されることがある」と明記されています。 割り込みによって中断される事自体は不思議ではないのですが、 マニュアルには「こうなっても、レジスタ(SI,DI,IP,CX)の状態 は保たれる」と書かれています。 この場合、どこに、どのタイミングで、どのように保存されるの でしょうか? 昔、8086はセグメントプリフィックスと同時に使うと、うまく 動作しない(割り込み時の処理に問題がある)と聞いた記憶がある ので特別な保存の仕方をしているようなんですが・・・ ご存じの方、教えていただけないでしょうか? K.Takahashi [2001/01/05 Fri 03:32:26] [202.247.49.41] はじめましてー。初カキコです。 アセンブラーな僕の反論。 >今時、アセンブラなんかいらないだろ? いや、僕は… 1)ゲームなどのスピードが必要な処理(ブレンディングなど) 2)MMXやSIMDなどの命令の使用 3)システム系プログラム でまだまだ使うと思いますよ。 >どうせ、教える人間も、資料もないんだからね! どこで、手に入れる? 内部情報もロクに公開されない現代でアセンブラを使う意味はどこに? インテルのページで公開中ですね(^^; >開発ツールと称してン十万もするツール類の中のオマケとして存在するか否かのアセンブラ。 いらないんじゃないの? 僕はMASMつかってます。只だし。 >20年前とは違うんだよ。金はかからない、資料は腐るほどある昔とはね! いや…どうかんがえてもインターネットのなかった昔のほうが資料は少なかったでしょう… 澤口@一升金 [2001/01/04 Thu 15:38:06] [211.4.198.31] 澤口@一升金です。 to アセンブラ不要論!さん:(ハンドルか?これ) >20年前とは違うんだよ。金はかからない、資料は腐るほどある昔とはね! PC/AT クローンに関してはそうは言えませんね。 20年前に x86 アセンブラで開発しようとしたらマシンが100万、ツールに 50万なんて話はざらにありましたから。インターネットもそうそう使えなかっ たから、そこらでサンプルソースを見つけるのも面倒だったし。 まぁ、事務系のプログラミングが昔も今も量的には主流ですし、データベー スいじるのにアセンブラが必要ないことはその通りなのですが。 アセンブラ不要論追記! [2001/01/04 Thu 06:53:52] [211.4.97.18] 20年前とは違うんだよ。金はかからない、資料は腐るほどある昔とはね! 世代間の思考のギャップにより、この世界は確実にスローダウンしているが、誰も気づかない方がいいだろう。先が見えてきたね。 アセンブラ不要論追記! [2001/01/04 Thu 06:49:34] [211.4.97.18] アセンブラ不要論! [2001/01/04 Thu 06:46:31] [211.4.97.18] 今時、アセンブラなんかいらないだろ? どうせ、教える人間も、資料 もないんだからね! どこで、手に入れる? 内部情報もロクに公開されない現代でアセンブラを使う意味はどこに? 開発ツールと称してン十万もするツール類の中のオマケとして存在するか否かのアセンブラ。 いらないんじゃないの? セコム [2001/01/04 Thu 02:37:40] [210.188.160.4] 澤口@一升金さん、どうもありがとうございます。 是非参考にしたいとおもいます。 澤口@一升金 [2001/01/02 Tue 01:11:01] [211.4.198.12] 澤口@一升金です。 to セコムさん: ここに一通りの解説とサンプルソースがありました。 (DOS, MS-C版) ↓ http://www.he.net/~marcj/cdrom.html こちらにはオープンソースの CD-DA X-Tractor なる アプリがありますから、読んでみると参考になるかも 知れません。 ↓ http://www.geocities.com/SiliconValley/Byte/7125/intro.html セコム [2000/12/29 Fri 23:27:41] [143.90.130.55] 直接CDドライブからデータを読み出すにはどうすればよいのでしょう か?このときのCDとはCDDAを指します。 紅 かぐや [2000/12/26 Tue 00:37:06] [203.140.13.11] Selene ROCKさんと同じように、私も少々疑問に思ってました(^^; 私は、マスム・タスム・ガスと読んでましたが・・・・ マクロアセンブラ・ターボアセンブラ・グニュアセンブラの略なのかな? 良くわかりませんが・・・・ ほんとのところはなんて読むんでしょう(^^;; ROCK [2000/12/25 Mon 19:06:58] [210.253.226.43] 突然ですけど、MASM,TASM,GASとかってどういう読み方だか分かります? なべぞう [2000/12/24 Sun 06:15:41] [211.127.212.78] <解決しました> えらく長い間悩みましたが、11/3付の僕の質問がやっと解決いたしました。単純にTASM5についていたTLink(Ver7.1)ではDOSSEG疑似命令をサポートしてなかったのが原因でした。 今日なにげにBorland TurboC4.0のTLink(ver6.1)を使ったところすんなりとエラーが出ずにリンクできました。 返事が遅れて大変申し訳ありませんが、ご助言くださったカト殿ならびにAF殿に厚く御礼申し上げます。 しかし僕、こんなことで詰まってちゃ、これからさきが思いやられます。C++Suiteってマニュアル付いてないし・・・(泣) へろへろ [2000/12/21 Thu 20:23:06] [133.72.168.2] カトさん、レスありがとうございました。 本当にすごく参考になりました。 力卜 [2000/12/20 Wed 20:08:31] [192.51.44.16] へろへろさん、こんにちは。力卜と申します。 私はZ80についてはほとんど知らないのですが、Z80のADD命令は キャリー以外にもフラグを変化させるんじゃないですか? (ソースの引用時に省略されただけかもしれませんが) また、x86のadd命令のフラグの変化を調べればわかると思いますが、 キャリーフラグは、演算(add)の度に常にON or OFFのいずれかに変化 しますので、先頭のclcは不要のハズです。 手抜き者の私が仮想6809(8ビットCPUです)を書いたときに、フラグの 実装は、x86のフラグ変化をほとんどそのまま使いました。(^_^;) へろへろさんの例で言うと、次のような感じになります。 Z80_ADD_H: ;;;; Z80とx86のフラグの変化がまったく同一だと仮定 add ah,bh ;; Z80の命令に相当する命令を実行する pushf ;; Z80のADD命令相当のadd実行後のフラグをそのままプッシュ pop [FLAGSKEEP] ;; フラグを退避域に保存 jmp begin FLAGSKEEP: dw 0000h そして、Jcc命令あたりでは以下のように保存したフラグを使います。 フラグを同時に判定するようなJcc命令でも簡単に記述できることでしょう(^_^;) Z80_Jcc: ;;;; Z80のPCの値がbxに入っていると仮定 call getPCoffset1 ;; Jcc命令2バイト目(PC変位1バイト)をdxに求める push [FLAGSKEEP] ;; 保存してあるフラグを復元 popf ;; Z80のフラグをx86のフラグに反映 jncc next_jcc ;; Z80のJccの逆の論理の条件ジャンプ命令 add bx,dx ;; 条件に合致したため、目的のアドレスにジャンプ next_jcc: jmp begin なお、ADDでは簡単な例としてx86とZ80がまったく同じフラグ変化として 例を挙げましたが、実際には、Jcc以外でも命令実行前のフラグの値によって、 命令の実行結果が異なるケースは多いですし、Z80の方はフラグが変化しない がx86ではフラグが変化してしまうため、保持が必要などがあると思います。 こういう場合は、フラグを事前に復元してからZ80の命令に相当する命令を 実行したり、実行後に、一部のフラグの値をもとに戻してやるなど、 つじつま合わせが必要になります。 pushf や popf は過去のものなので、実行速度などは今のCPUでは早くない かもしれませんが、エミュレーターの記述が楽になるかもしれません。 以上、少しでも参考になれば。 力卜 [2000/12/20 Wed 19:24:19] [192.51.44.12] まんちさん、こんにちは。力卜と申します。 よくある質問ですが、理由を一言で説明しづらいと思ったのでまとめて(?) みました。私の勘違いへの指摘や補足などあればお願いします > ALL。 - VC++6.0では、Win16アプリを含め16ビットアプリを作成できない。 16ビットアプリを作成できるのは、VC++1.51j(VC++1.52e)まで。 - VC++2.0以降で作った「一見MS-DOSアプリ風」のアプリは、実は Win32のコンソールアプリ(もちろん32ビットのアプリ)である。 (このため、同アプリはMS-DOSやWin3.1のDOS窓からは実行できない) - 16ビットアプリなら、int命令でMS-DOSのシステムコールを使える。 (Win16アプリから扱えるかどうだは知りません) - Win32アプリケーションでは、一部の特殊な命令(int命令etc)は OSを保護するために使用不可能になっているハズ(OSの仕様による)。 - Win32アプリケーションからは、MS-DOSのシステムコールは 使えない (サンクだったかを使えば実現できるのかな?) こんなところでしょうか。 まんち [2000/12/19 Tue 15:05:41] [211.19.96.130] ★先の投稿は書きかけで送信してしましました。スイマセン。 みなさん初めまして。 masmを再勉強しようと思い、VC6.0でcppファイル内での インラインアセンブラを使用してちまちまと勉強しています。 ふと、昔使っていたMS-DOSのファンクションコールを 試してみたくなり、以下のような一文字を表示する プログラムをしてみたのですが、DOS窓で実行させたところ 「不正処理による強制終了」になってしましました。 なにか足りないところがあるのでしょうか? どうしても、DOSファンクションを使ってみたいのです。 ご助言、よろしくお願いいたします。 #include "stdafx.h" int main(int argc, char* argv[]) { __asm { mov ah,02h mov dl,'A' int 21h ;dos function } return 0; } まんち [2000/12/19 Tue 15:02:48] [211.19.96.130] みなさん初めまして。 masmを再勉強しようと思い、VC6.0でcppファイル内での インラインアセンブラを使用してちまちまと勉強しています。 ふと、昔使っていたMS-DOSのファンクションコールを 試してみたくなり、以下のような一文字を表示する プログラムをしてみたのですが、DOS窓で実行させたところ 「不正処理による強制終了」になってしましました。 #include "stdafx.h" int main(int argc, char* argv[]) { __asm { mov ah,02h mov dl,'A' int 21h } return 0; } まんち [2000/12/19 Tue 15:02:48] [211.19.96.130] みなさん初めまして。 masmを再勉強しようと思い、VC6.0でcppファイル内での インラインアセンブラを使用してちまちまと勉強しています。 ふと、昔使っていたMS-DOSのファンクションコールを 試してみたくなり、以下のような一文字を表示する プログラムをしてみたのですが、DOS窓で実行させたところ 「不正処理による強制終了」になってしましました。 #include "stdafx.h" int main(int argc, char* argv[]) { __asm { mov ah,02h mov dl,'A' int 21h } return 0; } へろへろ [2000/12/19 Tue 14:14:31] [133.72.168.2] z80のCPUのエミュレータを作っています。8086上で。 キャリーフラグをエミュレートしようとしているのですが よくわかりません。8086のキャリーフラグを使うと、例えば、 ;ADD H <- z80の命令 clc ;キャリーを0にする add ah,bh jc next jmp begin ;はじめに戻る next: mov CF,1 jmp begin CF db 0 ;キャリーフラグ こんな感じになります。 ほかによい方法はありますか? michan [2000/12/12 Tue 14:20:16] [202.213.224.70] いえいえ 澤口@一升金さんレスありがとう御座います。 澤口@一升金のまったくお話しの通りです。 コノ問題は解消と言うか、詳細が解りました Alphaアセンブラって”Alpha”ってハード に対応したアセンブラって事ですね。 私は、VC6に推奨されているのが、”Alpha" アセンブラとばっかり勘違いしておりました (だってHELPに載っているんですもん) まあ、そんなこんなで、MASM32でやる事にしました。 特異モノをHELPに入れるな!とM社に言いたいところですね。 色々と資料まとめたじゃないですかぁ・・・ってな具合です >< 澤口@一升金 [2000/12/12 Tue 01:30:31] [211.4.198.26] 澤口@一升金です。 to michanさん: いまいち話がよく見えないのですが、Alpha CPU chip 用のアプリを アセンブラで開発するということなのでしょうか。 asaxp.exe は Windows NT for Alpha で動作する VC++ for Alpha でしか使えないと思いますので、 x86 の開発環境とは全く別物 です。値段も NT と VC++ あわせて50万円以上したような。 asaxp.exe の役割は VC++ for Alpha が作った Alpha 用のアセンブ ラソースコードをアセンブルする以外の使い方はできないので、MAS Mのようにそれ自体では何も開発できないし、マニュアルもないはず です。 Microsoft 自体が Alpha 環境の開発ツール(OS を含めて)から撤退 を表明していますので、どうしても Alpha に対応するなら Linux 環境 に移行された方がよろしいでしょう。 へろへろ [2000/12/11 Mon 09:11:43] [133.72.168.2] 澤口@一升金さん、どうもです。 説明不足でした。 8086上でz80をエミュレートしようとしてます。 先輩にCPUを書くなら、プログラムカウンタは、 自分で作るんだよ。っていわれました。 とうことで自己解決しました。 どうも、ありがとうございます。 michan [2000/12/10 Sun 21:12:52] [210.159.116.35] ええかげんやね〜 検索で流れ流れてやってまいりました michanと申すしがない腐れPGでございます 以後よろしく^^ さて、Win(?)ではやりたくは無かったアセンブラに 取り掛からなければ行けなくなってきましたので 初歩の初歩の質問があるのですが。 VC6のドキュメントに記してあったのですが Alphaアセンブラを一応推奨しているみたいなので そっちを使いたいと思うのですが。Vcの各ディレクトリー を見てみましがそれらしい実行ファイルASAXP.exeが見つからなくて 困っております。コメントをHELPを参照するとCL.EXEが インストールされている環境とか書いてありますが。 CL.EXEの/?で見てもASAXPのオプションらしきモノは見つかりませんし こまっています。ASAXPって本当にVCでサポート (内臓)されいるのでしょうか? 懐かしいMASMの話がメインになっているみたいなので失礼と 場違いな質問だと思いますが、よろしくお願い致します。 澤口@一升金 [2000/12/10 Sun 19:32:05] [211.4.198.17] 澤口@一升金です。 to へろへろさん: >今、MASMでz80を書いています。 これ、意味が分からないのですが。Z80 用のプログラムを x86 に移植 しているのか、X86 上で Z80 のシミュレータを作っているのかどちらな んでしょう。 ニーモニック表はとりあえずここのページにもありますが。 ↓ http://www.e-net.or.jp/user/missing-link/assembler/asmhead.html 飛び先にラベルを付けておけば MASM の方でよきにはからってくれます。 へろへろ [2000/12/10 Sun 12:33:10] [133.72.168.2] 今、MASMでz80を書いています。 z80では、ジャンプ命令の時に引数をとるのですが (JR x ,JR c,x など) 8086では、どうやって表せばよいのでしょうか? プログラムカウンタを作るべきでしょうか? $(アセンブル中の現在地)を使って表すのでしょうか? けんぼぉ [2000/12/07 Thu 09:54:31] [210.163.178.219] ども、けんぼぉです。 ♪syunsyunさん はじめまして。 > DOS用ソフトやWIN用ソフトを逆アセンブルするのに > 便利なソフトはありますか? Linux 版しか使ったことはありませんが、特定のCPU の ニーモニックを色分けで表示します。 http://biew.sourceforge.net/en/biew.html NASM の ndisasm(w).exe とかもあります。 http://www.web-sites.co.uk/nasm/ あと過去ログにも いくつかあったと思います。 澤口@一升金 [2000/12/07 Thu 08:08:11] [211.4.198.13] 澤口@一升金です。 to かわがみ氏さん: ASM→C 変換ツールはあるにはあったけど、安くもない。 ↓ http://www.mpsinc.com/mpsmenu.html 経験からいうと、C ライクに記述されていてもニーモニック の動作が覚えやすくなるということはそうそうないです。 日立の CPU のデータシートなどだとニーモニック動作を C 言語で解説してますけどね。 syunsyun [2000/12/06 Wed 19:38:07] [210.147.135.167] DOS用ソフトやWIN用ソフトを逆アセンブルするのに 便利なソフトはありますか? Diswinはwin用ですし。 winソフトだとやはり逆アセンブルしてもかなり ややこしいそうなので。 お願いします。 Rio [2000/12/06 Wed 08:11:09] [210.130.68.43] AFさん。レスありがとうございます。 >ちなみに #4B01H を実行した後に #4CxxH を実行すると #4B01H を >コールした INT 21 の直後に実行位置が戻ります(書いてある意味 >が分かりにくいなぁと思ったらもう少し #4B01H を使い込んで見ると >良いでしょう)。 確かにデバッガ上で動かしたときにそうなっていました。 その時はなぜそうなるか理解できず、デバッガがおかしいのかとも 思っていましたが、そういうことだったんですね。 とりあえずそれを踏まえてプログラムを組みなおしてみます。 AF [2000/12/05 Tue 00:12:16] [210.233.160.2] http://www.ksky.ne.jp/~afuruta/ Rio さんこんにちは、 > MS-DOSのファンクション4B01h(プログラムをロードして実行しない) #4B01H の一般論で申し訳ないですが、#4B01H で 2 つのプログラム をロードした状態にするのは困難を極めます。 #4B01H を実行する前後でプロセスが切り替わります。#62H を使って PSP セグメント(DOS にとってのプロセス ID)を調べれはその変化が 分かります。CS:IP こそ飛ばされませんが #4B01H の後は、新しい プロセスが実行されているのと極めて近い状態になります。 ちなみに #4B01H を実行した後に #4CxxH を実行すると #4B01H を コールした INT 21 の直後に実行位置が戻ります(書いてある意味 が分かりにくいなぁと思ったらもう少し #4B01H を使い込んで見ると 良いでしょう)。 #4B01H でプログラムをロードした後さらにプログラムを #4B01H で ロードするには #4AH を使用してメモりブロックを縮小する必要が あります。ただし、プロセスが切り替わっているので、メモりブ ロックの所有者が変わっています。 ロードした 2 つのプログラム安全に動作させるにはプロセス切り 替えを行う必要があります。#50H が隠しコールとして存在しますが、 実装は困難を極めます。PSP 以外にもプロセスに属するコンテキスト が幾らかあります。 笹木領地 [2000/12/04 Mon 01:59:31] [210.159.232.66] 澤口@一升金さん、ありがとうございます。 日立のリファレンスにはイミディエイトのアドレッシングモードの書式 が、#xx:8などとなっているだけで、xxにBや「'」が入るとは書いていなかったのが、 混乱の原因でした(なにせ初心者の思い込みですので) >MOV #B'01011011,ROL >というのは16進でいう5Bをセットしていますね >多分この値をさらに AD コンバータICに出力すればモード設定がで>きるのでしょう おっしゃる通りです。コメントステートにもそうやって書いてあるのに… あとは、なぜR0Lにそうセットするとそうなるのかを調べます。 ところで今日は良い本を見つけました。 その名も「H8ビギナーズガイド」といいます。 いままでH8関連のこうした書籍がなかったのでむちゃくちゃうれしいです。(あるにはあったけど絶版でした) 出版社は東京電機大学出版局で、価格は2800円です。発売されたてです。 H8の3048という型のICに特化された本なので、AKI-H8なんかやろうとしている人にはおすすめですね。 ながながと宣伝みたいなこと書いてしまいました(すいません) ともかく、まずはお礼まで。 澤口@一升金 [2000/12/03 Sun 08:47:12] [211.4.198.30] 澤口@一升金です。 to 笹木さん: '#' というのは即値データ、'B' は2進表示であることをあらわします。 R0 レジスタの下位バイトに 2進の01011011、すなわち16進の 5B をセットしていますね。 多分この値をさらに AD コンバータICに出力すればモード設定ができ るのでしょう。 笹木領地 [2000/12/03 Sun 04:46:14] [210.159.232.139] はじめまして。領地と申します。 アセンブラ関係を探してネットをふらふら漂っているうちにここを見つけました。よろしくお願いします。 現在日立のH8というCPUの勉強をしているのですが、 日立のリファレンスなどを参照してもどうしてもわからない一行があります。 トランジスタ技術の2000年6月号に「USB用A-Dコンバータの製作」という特集があるのですが、214ページにあるアセンブラリストの中で MOV #B'01011011,ROL ;割込み可、スキャンモード、134 ;ステート、AN0〜3 のこの一行の意味がぜんぜんわかりません。特に#B'というのはいったいなんでしょう? どなたかわかる方いらっしゃいますでしょうか? いきなり質問で申し訳ないです。勉強し始めたばっかりでほかの方の質問に答えることができません。はやく自分の知識をフィードバックできるようになりたいものです。 T.K [2000/12/02 Sat 15:24:03] [165.76.222.176] こんにちは 「DOS/Vプログラミング技法」のオンデマンド出版の投票数が7に達し、順位もベスト10入りを果たしました。投票してくださった皆様、ありがとうございました。また、過去に記載したアドレスが無効になっていたので、TOPページのアドレスを記載いたします。 今後ともよろしくお願いします。 http://www.d-pub.co.jp/ Rio [2000/12/01 Fri 23:33:16] [210.130.68.28] こんにちは、Rioと言います。 MS-DOSのファンクション4B01h(プログラムをロードして実行しない) を使ったプログラムを作っているのですが、このファンクションで2つ のプログラムを連続して呼び出すとうまく動きません。 どうやら1つめのプログラムをロードしたのと同じアドレスに2つめの プログラムがロードされ、上書きされているようなのですが... どのように対処すればいいでしょうか?ロードした後MOVで再配置する しか方法はないのでしょうか? 教えていただければ幸いです。 AZUCO [2000/11/26 Sun 12:28:46] [211.120.160.77] AZUCO WORLD プロテクトモードって、セグメントが 16bit長のものをスタンダードモード 32bit長のものをエンハンストモード って言ってませんでしたっけ? 16bitモードとかいう言い方は リアルモードと、 スタンダードモードと V86モードをまぜこぜにするので かなり解りにくいですよね〜 ってここに書き込むの久しぶりだなぁ かわがみ氏 [2000/11/24 Fri 17:16:21] [202.221.8.146] はじめまして。 最近、アセンブラの勉強をはじめたのですが、どうも他人の書いたコードがすらすら読めません。 アセンブラをC言語風のスクリプト言語に変換してくれるツールとかはないでしょうか? ご存知の方、いらっしゃいましたら、教えてください。 かわがみ氏 [2000/11/24 Fri 17:15:33] [202.221.8.146] アセンブラコードをCに変換 はじめまして。 最近、アセンブラの勉強をはじめたのですが、どうも他人の書いたコードがすらすら読めません。 アセンブラをC言語風のスクリプト言語に変換してくれるツールとかはないでしょうか? ご存知の方、いらっしゃいましたら、教えてください。 かわがみ氏 [2000/11/24 Fri 17:12:24] [202.221.8.146] アセンブラコードをCに変換 はじめまして。 最近、アセンブラの勉強をはじめたのですが、どうも他人の書いたコードがすらすら読めません。 アセンブラをC言語風のスクリプト言語に変換してくれるツールとかはないでしょうか? ご存知の方、いらっしゃいましたら、教えてください。 かわがみ氏 [2000/11/24 Fri 17:07:20] [202.221.8.146] T.K [2000/11/24 Fri 12:50:00] [165.76.222.106] こんにちは 下記のサイトで、私のリクエストに投票してくださった皆様、ありがとうございました。私もできる限り努力して、アセンブラ関係の書籍のオンデマンドによる復刊を実現させたいと思います。 また、皆様の中で、復刊させたい書籍がありましたら、下記のサイトに登録してはいかがでしょうか。私もできる限り協力させていただきたいと思います。 http://www.d-pub.co.jp/voice/index.html cels [2000/11/21 Tue 05:15:31] [210.149.136.53] celsです。 to kuuさん Windows3.1の話はよく知りません。 286は16bitですがプロテクトモードを持ってましたね。 ただ386以降に比べて制約があるので386以降のプロテクトモードのことを 32bit(プロテクト)モードと言っているのかもしれません。 386以降のプロテクトモードでは16bitオペランドがデフォルトのセグメントと 32bitオペランドがデフォルトのセグメントが選択できます。 これがUSE16とUSE32ですが、ということは プロテクトモードでも16bitと32bitモードがあると言えなくもない? まあ普通は32bitモードといったら386以降のプロテクトモードで、 16bitモードといったらそれ以外ということになるのでしょうか。 Dune [2000/11/21 Tue 01:41:33] [203.182.243.81] はじめて投稿させていただきます。 >kuuさん 16bitと32bitですが 私はアプリケーションが要求するプラットフォームで 考えてます。(単純ですけど(^^;) Cの話で恐縮ですけど、 まったく同じソースコードでも、コンパイラによって、 プラットフォームが変わってきますよね。 例えばVC5.0とかでコンパイルしたDOSアプリは、 DOS環境ではうごかなかったりします。 (windowsの「MS-DOSモードで再起動」でもうごかないんですからこまったもんです(^^;) 「winでしか動かないから、32bit」なんていうつもりはないんですが (正確にはexeフォーマットの違いでしょうし) ただ、VC5でつくったDOSアプリは32bit用に最適化されてると思いますし、 OSが16bitから32bitにうつったから 「32bitアプリケーション」っていうものがでてきたわけですから、 こういうのも一つの目安かな。と思ったわけです (ほんとに単純だ(汗)) なんだか、まとまり無い文ですね すいません(^^;ゞ へろへろ [2000/11/20 Mon 17:54:45] [133.72.168.2] Ichiさん、毎度どうもありがとうございます。 アセンブラをするために買った中古のノート(486)9000円 では、2つまでしか押せませんでしたが違うノートで プログラムを動かしたところ同時押しができました!! 本当にありがとうございました。 T.K [2000/11/20 Mon 11:28:58] [210.161.218.146] はじめまして アセンブラをやろうと思ってから1年くらい経ちますが、いまだに超初心者です。書籍はある程度見ているのですが、DOS/V関係の書籍がなかなか手に入らず、行き詰まっています。そこで私は、DOS/V関係の本がオンデマンドでよみがえればと、下記のサイトへDOS/V関係の書籍数冊をリクエストしました。もしよろしければ、投票していただければ幸いです。 http://www.d-pub.co.jp/voice/index.html また、DOS/V関係の本を売っている場所をご存知の方はお教え願えないでしょうか? まことに勝手な願いではありますが、どうかよろしくお願いします。 Ichi [2000/11/19 Sun 02:30:16] [210.147.8.2] to へろへろさん > 2つまでは、うまくいくのですが3つ目がキーボードを > 押してもフラグが立ちません。 キーボードの問題かもしれません。 (同時押しがうまく出来ないキーボードがあるんです) 3つの同時押しが、どの組み合わせでも出来ないのか、 出来る組み合わせがあるのかを確認してみてください。 へろへろ [2000/11/18 Sat 21:34:06] [133.72.168.2] キーボードの同時押しルーチンで。。。 INT 09をフックして、フラグで判定しているのですが、 2つまでは、うまくいくのですが3つ目がキーボードを 押してもフラグが立ちません。 3つ目をもらうには、ポート60hにコマンドを出力しなければ ならないのでしょうか? kuu [2000/11/17 Fri 01:08:57] [202.219.232.191] cels様 お答えありがとうございました。 お礼が遅くなって失礼致しました。 申し訳ございません。 > なお、MS-DOS上で32bitコードを実行するには > 通常DPMIやDOSエクステンダなどを使います。 「実戦的プロテクトモード研究」なる本を探してきました。 #更に知らない世界が広がってます(^^;; こういうことをしなくても、Windows上で組めば「USE32」 プロテクトモードアプリになるんですよね。 *** なんだか最近16bit、32bitとかいう言い方がよくわからなく なってたりします。LASMのマニュアルとかで、「16bitモード」 「32bitモード」とかいう用語が出てきます。 この「32bitモード」というのはプロテクトモードのことだと 思うのですが、「16bitモード」というのは ・リアルモード ・16bitプロテクトモード(USE16) の2つがありうるのでは?とか思ったりするのですが。 x86系では16bitモード、32bitモードという言い方は 普通になされるのでしょうか? 16bitプロテクトモードというのはWindows3.1の時の ウィンドウアプリケーションがそうだと思うのですが。 (VC1.x?で作成されるウィンドウアプリケーション) --- kuu meisyuu [2000/11/15 Wed 16:24:36] [202.48.8.203] はじめまして、みなさん。 ご存知の方がいらっしゃったら、教えて頂きたいのですが。 IA-32(80486)で、プロテクトモードの割込み発生時のス タックの動きってどうなってるんでしょうか? インテルのマニュアルを読んでも、どうもよくわからないで すよ。 どういうレジスタが具体的にPUSHされて、RETIで割込みから 抜ける時は、スタック内の情報がどのレジスタに戻されて、 元のルーチンに戻るのでしょうか? どなたか、お願い致します。 けんぼぉ [2000/11/13 Mon 11:17:43] [210.163.178.219] ども、けんぼぉです。 ♪ダイケンさん はじめまして。 > 川鉄のKL5C80A16の命令 > LD A,I LD A,R LD I,A LD R,Aの使い方を教えてください。 かなりの遅レスになってしまいました。(2000/10/30) 各レジスタの使い方というか、まず両レジスタの説明をします。 I レジスタは割り込みモードを2にしたときに、割り込み処理 ルーチンにジャンプするための、ジャンプ先のアドレス表 (割り込み処理ルーチンエントリーアドレステーブル)が存在 するアドレスの上位8ビットを表すためのレジスタです。 下位8ビットは割り込みが発生したペリフェラルからベクトル (V レジスタ)という1バイトのデータが送られてきます。 この2バイトを使って表されるアドレスから、そのペリフェラルの 割り込み処理ルーチンへのアドレスを読み込み、ジャンプします。 サンプルソース(かなり省略) (ペリフェラルに対してもベクトルの設定を予めしておかなくては いけません。詳しくは各ペリフェラルの資料を参照の事) ;ペリフェラル1(V=00)、ペリフェラル2(V=02)、ペリフェラル3(V=04)の時 : LD A,070h ;アドレステーブルの上位8ビット(ここでは070xxh) LD I,A IM 2 ;割り込みモード2 EI ;割り込み許可 : ;以下アドレステーブル 7000h DEFW PERIF1 ;ペリフェラル1の割り込み処理ルーチンのアドレス(以下同様に 2,3) 7002h DEFW PERIF2 7004h DEFW PERIF3 ペリフェラル1から割り込みがかかると、PERIF1 番地へジャンプします。 ペリフェラル2からの割り込みは I(070h) と V(02h)で 07002hになり、 PERIF2 番地にジャンプします。 R レジスタはリフレッシュ用のアドレスを指しているレジスタです (下位7ビットを使用)。フェッチ毎にインクリメントされます。 R レジスタ(LD A,R)は擬似乱数を発生させる時に使ったりします。 > ROM(128KB)RAM(128KB)のバンク切り替え方法も教えてください。 これは川崎のサイトに PDF の資料がありますので、そちらを 参照してください。(第1〜6章 P41〜) http://www.kawatetsu-lsi.co.jp/assp/micro/pdfs/index.htm へろへろ [2000/11/12 Sun 23:23:24] [211.13.144.55] Ichiさん、情報どうもありがとうございます。 Ichi [2000/11/10 Fri 23:28:05] [210.147.8.2] to へろへろ氏: それでしたら、Ralf Brown's Interrupt Listが参考になると思います。 Ralf Brown's Home Page: http://www.pobox.com/~ralf/ で、INT 09をフックして、キーが押さ/離される度に フラグを変化させていけばよろしいかと。 cels [2000/11/10 Fri 22:33:17] [203.180.146.49] to サナダムシさん 基本的にはCでも書けます。 Windows上からCD-ROMのセクタを読むには 32bit→16bitサンク経由でMSCDEXを呼びます。 具体的な方法はここ↓ http://www.microsoft.com/JAPAN/support/kb/articles/J024/2/05.htm NT/2000の場合はこの方法は使えなくて、 CreateFile/ReadFileを使います。 また、ASPIを使って読む方法もあります。 これを使うにはASPIがインストールされている必要があります。 詳細はMSDNライブラリのDDKの項目を読んでください。 デジタルコピーの有無を調べるならQサブチャネルを読む必要があると思いますが、 ASPI経由なら読めます。 MSCDEX経由だとわかりません。 へろへろ [2000/11/10 Fri 20:13:50] [133.72.168.2] DOS/Vでキーボードの同時押しのルーチンを作ろうとして 苦戦しています。 DOSでベクタを書き換えたりしているのですが うまく帰ってこないのです。 英語でもいいので資料を探しています。 どうか、教えてください。 サナダムシ [2000/11/09 Thu 13:40:05] [210.197.210.1] 行き成り質問失礼します。実はCD2WAV32の様にCD-DAのデータを直接 ドライブ側から読み出して、それに加工を加えるようなソフトを作ろ うと考えています。具体的にはCOPY検査ビットを自由に書き換えるソ フトを目標にしています。もちろん悪用するとかじゃなく、素で自分 の実験題材です。 どのような手順を踏めばWindows上から直接ドライブを操作させるこ とが可能になるのでしょうか?アセンブラを使ってのDLL開発しか方 法はないのでしょうか?もし、参考文献やHPなどありましたら教えてください。 力卜 [2000/11/06 Mon 22:08:15] [192.51.44.11] なべぞうさん。 私はその本も tasmも持っておらず内容/動作確認できませんので、 適当に思いついたことを挙げます。 1.アセンブリソースが極めて不自然。本当に動作するものなの? 普通は、DOSプログラムには、DOSプログラムを終了させるための ファンクションコール発行を行います(例えば以下のようにして)。 mov ax,4c00h int 21h しかし、これがソースには書かれていません。 また他の方からも指摘がありますが、プログラムの開始アドレス の指定がなされていません。プログラム中にラベルがないのが 気になります。 その本では、このプログラムについてどう説明していますか? # 本文で各命令の動作を説明しているだけだったりしませんか? 実際、このプログラムを動作させてみたとしても、動作が実感 できるようなこと(文字列表示など)は一切しないし、プログラム が終了しないでアセンブリソースで記述した命令以降のメモリ上に あるゴミのコードをそのまま実行して、暴走すると思います。 著者が、実際に動作する体裁っぽくコードを書いたけど、まったく 動作確認していない(実はバグあり)ということも考えられます。 2.そのtlinkは16ビットアプリをリンクできるの? お手持ちのtlinkは16ビットアプリをリンクできるのでしょうか? 16ビット/32ビットアプリの両方ともリンクできるとしたら、16ビット アプリリンク用のコマンドラインオプション指定はないのでしょうか? 製品に添付のマニュアルにはどう書いてありますか? また、tasmも16ビットオブジェクト出力用オプションがあるのかも 知れません。 tlink(とtasm)のオプション指定が解決したら、DOSSEG疑似命令無視の 警告メッセージが表示されなくなるかもしれません。 あと、わかることといえば、ソースは.COM形式の実行ファイルを 作ることが不可能な書き方をしているということでしょうかね。 (これは今回のリンクがうまくいかない件とは無関係ですね) ではでは。 なべぞう [2000/11/03 Fri 05:44:27] [211.127.213.118] あれれ? どうも申し訳ございません。 ここのBordの書き込み方をよく知らなかったもので、文中のスペース が削除される方式とは気がつきませんでした。 ただでさえ読みにくい上に、この有様では(^^; 決して嫌がらせではありませんので、どうかご容赦ください。 なべぞう [2000/11/03 Fri 05:39:14] [211.127.213.118] AFさん、初めまして。お返事どうもありがとうございます。 え〜と、アセンブラなんてやってみたのは生まれて初めての経験です ので、なにもかもわからないことずくめなんです。それで、とりあえず 本に載っているコードをそのまま丸写しにしたんですが、本の通りにし # DOSSEG #ているのにLinkできないんです。 # .STACK 200H # # .DATA #本のコードをそのまま載せるのもど #X DW 0A5C6H #うかとは思いましたが、ごらんのと #Y DB 22H #おりただ命令を一通り使っているだ # .CODE #けの空しい物なので、よろしいかと # MOV AX,@DATA #思い、Upしました。 # MOV DS,AX # # MOV AX,05A5H # ひょっとして僕の環境ではセグメ # SHL AX,1 #ント疑似命令は使えないのでしょう # SHL AX,1 #か? # RCR AX,1 # # MOV AL,0 #ついでに買った「初めて読む8086」 # MOV AH,0 #の方のコードはちゃんと実行できた #; #(DEBUGコマンドを使うやつ)ので # MOV BX,100 #どーにも納得がいかなくて毎日イラ # MOV AX,BX #イラしっぱなしです(笑) # XOR AX,0FFFFH # # INC AX # このソースで何か判ることがおあ # NEG BX #りでしたら教えていただければ幸い # MOV X,BX #です。 # MOV Y,BL # どうか救いの手を!! #; # #L1: # ということで、今はTASMの方は考 # DEC CX #ないようにして上の「8086」の # JGE L1 #コードをDelphiのインラインアセ #; #ンブラに変換して気を紛らわせてい # MOV DX,0FFH #ます。 # PUSH DX # # INC DX # 読みにくい文で失礼しました。 # POP DX # コードを載せたので極力長文にな# INC DL #ない様、スペースを有効活用? # END #させていただきました。 ルーレット [2000/11/02 Thu 15:18:31] [131.113.234.116] NASMを使用している初心者です。質問なのですが、VESAモードにてバンク切り替え込みの一点描画ルーチンを作成し、256色のカラーを切り替えながらタイル塗りをすると、動作が妙に遅くなってしまいます。↓ (routine called from Turbo C) pixel_locate: mov ax,word[bp+8] ;AX=Y mov dx,word[bp+6] ;Offset=(1024*Y)+X mul dx ; add ax,word[bp+4] ; adc dx,0 ;DL=bank, AX=Offset mov bx,ax ;BX=Offset to VidSeg cmp dx,word[currbank] je write_pixel ;If DX=Currbank jump bank_setup: push bx mov bx,0 ;Set bank_mode mov ax,0x4f05 ;Call VESA bank int 0x10 ;change function mov word[currbank],dx pop bx write_pixel: mov ax,word[bp+10] ;Set pixel color mov byte[es:bx],al ;Store byte on screen 一応過去ログで紹介されている(S)VGAのページを漁ってはみたのですが、バンク切り替えの効率的な方法があれば、どなたか教えていただけないでしょうか。 ちなみに、開発環境はCyrix MXPR-200MHz, NVidia TNT2-64(VRAM32MB), PC-DOS7.0/V(USモード), 対象モードはVESA105h(1024*768*256色)です。 Daisuke 改め JUNKUN [2000/11/01 Wed 23:54:41] [202.23.191.20] したの投稿は間違いです。けど、 将来的には32ビットのソフトを作りたいのですが・・・ JUNKUN [2000/11/01 Wed 23:52:12] [202.23.191.20] みなさん、はじめまして。今回、アセンブラをはじめようと、 はじめてのMASMと言う本を買い勉強をはじめたのですが、 一番最初のotenki.asmという例題を入力したところ 以下のようになりまったく進めません。 ためしに、他のソースもやってみましたが、結果は 同じでした。私には訳がわからなかったのでどうか みなさんよろしくお願いします。 C:\Project\boot1>ml otenki.asm Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: otenki.asm Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /z2 "otenki.obj" "otenki.exe" NUL LINK : warning LNK4044: unrecognized option "z2"; ignored otenki.obj : warning LNK4033: converting object format from OMF to COFF otenki.obj : fatal error LNK1190: invalid fixup found, type 0x0001 もっちー [2000/11/01 Wed 17:03:42] [133.70.244.54] あれ、もしかして僕の回答的外れですか?だったら失礼しました。/z2ってなんでしょうってことでしょうか? もっちー [2000/11/01 Wed 16:55:32] [133.70.244.54] Daisukeさんこんにちは 僕もこんなことがありました。リンカはエラーやワーニング(warning)の内容から多分32ビット用のものを使っていると思います。 プログラムがどういうものか具体的にはわかりませんが、プログラムは多分16ビットモードで動くように作ってあるんじゃないでしょうか。たとえば、プログラムの中にint21hとかがはいってたり、 .model が shortだったりです。リンカを16ビットモードのものに変える必要があるのではないでしょうか。ちょっと無責任ですいません。 Daisuke [2000/11/01 Wed 15:01:02] [202.23.191.20] みなさん、はじめまして。Daisukeです。 今回、アセンブラを勉強しようと思い、初めて読むMASMを買って、 そこに書かれている、OTENKI.ASMをアセンブルしようと思ったら、 以下のようになりました。この原因ってなんでしょうか? 素人のわたしにはさっぱりわかりませんでした。 またどのようにしたら、アセンブルできるのでしょうか? C:\Project1>ml otenki.asm Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: otenki.asm Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /z2 "otenki.obj" "otenki.exe" NUL LINK : warning LNK4044: unrecognized option "z2"; ignored otenki.obj : warning LNK4033: converting object format from OMF to COFF otenki.obj : fatal error LNK1190: invalid fixup found, type 0x0001 AF [2000/11/01 Wed 02:22:12] [210.233.160.6] なべぞう さんこんにちは、 AF です。昔使っていた TASM の話がなつかしいので顔だします。 # 本当は今も使っていたりしますが... > #Turbo Link Version 7.1.32.2. Copyright (c) 1987,1996 > #Borland International > #Warning: DOSSEG directive ignored in module C:〜ファイル名 > #Fatal: No program entry point たぶんアセンブラソースの最後に、 END 開始位置のラベル と書けば良いはずです。例えば END ProgramStart というふう になります。ただ、ソース全体を眺めていないので何とも言 えませんがアセンブラで書かれたプログラムを動かそうとする にはもう少し頑張りが必要な状態なのかなぁ、と心配しています。 でも Delphi が使えるとインラインて asm(改行)mov al,20h(改行)end;(改行) と書けたり、 Borland C++ Suite に含まれている BC++ も Turbo Pascal も インラインてアセンブラが使えるので手軽に試すにはインライン アセンブラをお勧めします。 # ちょっとレジスタの使用規約がめんどうなのですが... RTL のソースコードも Borland C++ Suite についているようなので C0x.asm とか色々眺めてみるのもいいかもしれません。 # マクロとか IF...ENDIF がたくさんあってちょっと難解ですが... AF [2000/11/01 Wed 02:22:02] [210.233.160.6] なべぞう さんこんにちは、 AF です。昔使っていた TASM の話がなつかしいので顔だします。 # 本当は今も使っていたりしますが... > #Turbo Link Version 7.1.32.2. Copyright (c) 1987,1996 > #Borland International > #Warning: DOSSEG directive ignored in module C:〜ファイル名 > #Fatal: No program entry point たぶんアセンブラソースの最後に、 END 開始位置のラベル と書けば良いはずです。例えば END ProgramStart というふう になります。ただ、ソース全体を眺めていないので何とも言 えませんがアセンブラで書かれたプログラムを動かそうとする にはもう少し頑張りが必要な状態なのかなぁ、と心配しています。 でも Delphi が使えるとインラインて asm(改行)mov al,20h(改行)end;(改行) と書けたり、 Borland C++ Suite に含まれている BC++ も Turbo Pascal も インラインてアセンブラが使えるので手軽に試すにはインライン アセンブラをお勧めします。 # ちょっとレジスタの使用規約がめんどうなのですが... RTL のソースコードも Borland C++ Suite についているようなので C0x.asm とか色々眺めてみるのもいいかもしれません。 # マクロとか IF...ENDIF がたくさんあってちょっと難解ですが... S [2000/10/30 Mon 21:02:23] [210.250.122.218] けんぼぉさん、どうもありがとうございました。 S [2000/10/30 Mon 21:01:11] [210.250.122.218] 紅 かぐやさん、ありがとうございます。 [2000/10/30 Mon 20:15:12] [133.72.168.2] ビットマップ、わかりました!! 今は、パレットをいじるのに苦戦しています。 ダイケン [2000/10/30 Mon 12:11:14] [211.7.1.2] 川鉄のKL5C80A16の命令 LD A,I LD A,R LD I,A LD R,A の使い方を教えてください。 また、MMU機能を使ったとき、ROM(128KB)RAM(128KB)のバンク切り替え方法も教えてください。 けんぼぉ [2000/10/30 Mon 11:28:03] [210.163.178.219] ども、けんぼぉです。 ♪Sさん はじめまして。 > Z80の割り込みに関して誰か教えてもらえないでしょうか。 こちらを参照してみてください。 http://203.140.25.48/x/apony/elec/elec10/elec10.html http://delegate.uec.ac.jp:8081/club/koken/~ubora/kouza.html http://www.st.rim.or.jp/~nkomatsu/ICcollection.html#ZilogTarget z80 の本は図書館にあるかもしれません。図書館の端末で 「アセンブラ」や「マシン語」で調べてみてください。 http://www.cqpub.co.jp/hanbai/books/32511.htm 他にもロボット検索を使って「z80 割り込み」で検索すると、 色々と出てきます。私は Google を使ってみました。 http://www.google.com/intl/ja/ あと、今後質問をする方は、何を使っているかっていうマシンや OS (CPU) 等の情報を必要範囲内で書いてもらえると、他の方々も もっと込み入ったところまで答えやすくなると思います。 必要範囲内ってところが難しいと思いますが。 S [2000/10/30 Mon 01:12:25] [210.250.120.174] はじめまして。大変失礼だと思うんですが、Z80の割り込みに関して誰か教えてもらえないでしょうか。まだ初心者でぜんぜんわかりません。あとどういう本を読めば、勉強になるか教えていただけないでしょうか?ぜひともよろしくお願いいたします。 紅 かぐや [2000/10/29 Sun 06:18:11] [203.140.13.18] Selene へろへろさんへ bmpの内部ですが、↓のアドレスで英語のやつを拾うとかあります。 http://www.wotsit.org/ とか、あります。 検索で、ビットマップとか入れたら結構引っかかったような気もします。 結構前にしたことなので、よく覚えてませんが(^^;; MSDNの方で、BITMAPFILEHEADERとBITMAPINFOHEADERとRGBQUADなどの 構造体なんかも見ると良いと思います。 A.T [2000/10/29 Sun 04:42:04] [210.251.59.162] h8300-hms-gcc抜きで、h8300-hms-asと、h8300-hms-ldでプログラ ムを組むときのやり方がイマイチよくわからないのですが、・・・ このh8300-hms-asというのはリンカスクリプトではなく、コードソ ースに直接アドレスを記入して指定するというようなことはできないよ うになっているのでしょうか? また、h8300-hms-gccでコードを書いたときもそうですが、ソースコ ード自体とは別の「膨大」なコードが附加されるのを避ける方法とかに はどのようなものがあるのでしょうか?(秋月のH8のCコンパイラとの 比でいくと、[100]対[1000]くらいになったりします)。 4KbyteのRAMにプログラムを転送して実行させるプログラムを書いた のですが、上記のような理由で、Linuxの方でgccを使う環境ではむず かしいといったような事態になっています。 できれば、Linuxの方でも使いたいと思いますので、よろしくご教示 をお願いいたします。 へろへろ [2000/10/28 Sat 19:37:20] [133.72.168.2] bmpをアセンブラで読み出してVRAMに書きたいのですが BMPのファイルの仕様がわかりません。 (バイナリファイルで開いてもよくわかりません) BMPは、どうなってるのかおしえてください。 なべぞう [2000/10/28 Sat 00:27:35] [208.200.172.240] みなさま初めまして、ナベゾウと申します。 どうぞよろしくお願いします。 早速ですが、三ヶ月ほど前、Borland C++ Suiteというのを購入いた しました。僕はDelphiを勉強中で、TurboPascalがおまけで付いてくる のに気が引かれて思わず買ってしまったのですが、一昨日、古本屋で 「TurboAssembler入門」という本を購入したせいでアセンブラにも興 味を持ち、その本の通りにソースを書いてアセンブルして、いざLiNKと いうときになって、こんなメッセージがでるんです。 #Turbo Link Version 7.1.32.2. Copyright (c) 1987,1996 #Borland International #Warning: DOSSEG directive ignored in module C:〜ファイル名 #Fatal: No program entry point どうやったらLinkできるか教えてほしいのです。 ひょっとしたらすごい初歩的な質問かもしれませんが、Pascalの知識 も満足にない僕に愛の手?をお願いいたします。 ちなみにOSはWindows2000ですが、ひょっとしてこれのせいでしょう か? 紅 かぐや [2000/10/27 Fri 02:55:33] [203.140.13.225] Selene グリポンさんけんぼぉさんレスありがとうございます。 >グリポンさん 今まで、exeが一番妥当だろうと思っていたので、 16bitのobj形式をexe形式に変換する項目を読んで、 リンクさせるものが必要だと勘違いしていたみたいですね(^^; ありがとうございました。 >けんぼぉさん はじめまして。 早速お気に入りに入れました。 ありがとうございました。 また、お世話になるかもしれませんが、皆様よろしくお願いします。 グリポン [2000/10/27 Fri 01:10:37] [210.235.164.62] JP-DOS >紅かぐやサン すみません。説明の仕方が悪かったですね。 オイラのサイトにNASMの翻訳途中のやつありますが… obj指定のときは-fオプションが必要です。 ただ標準ではcom指定なのですっぽかしてただけです。 #今のところobjにするほど大きなプログラム作らないので(汗 で、objファイルをexeファイルにするには… http://guriponn.tripod.co.jp/others/japanise/CHAPTER7.TXT でも見てください(あくまでも未公開ですが) 参考になったでしょうか? けんぼぉ [2000/10/26 Thu 10:23:38] [210.163.178.219] ども、けんぼぉです。 ♪紅かぐやさん はじめまして。 ↓にNASMの説明がありますよ。(第1、2回を参照) http://www.geocities.co.jp/SiliconValley/9979/asmhead.html あと、英語のサイトはこちらを使ってみて下さい。 http://www.excite.co.jp/world/ ♪にゅ〜び〜さん はじめまして。 最初にお断りしておきますが、ここはアセンブラに関する 掲示板なので、手短にいきます。 UNIX を使えるなら procmail で C言語を使わずに簡単に 出来ます。C言語で作るのなら、↓の掲示板をあたってみて ください。 http://www.taillight.com/program/ 紅かぐや [2000/10/25 Wed 14:23:57] [210.237.143.182] Selene グリポンさんレスありがとうございます。 いらないんですか? NASMマニュアル機械語翻訳のほうに、使ったほうがいいとか言う怪しい文面を見たような気がしたんですが・・・・ 気のせいだったんでしょう(^^; 今、 nasm16.exe ソース名 -f obj -o 出力ファイル名 としているのですが・・・・・ obj形式を選択するフラグはいらないんでしょうか? たびたびお聞きして申し訳ありません(滝汗) グリポン [2000/10/25 Wed 11:58:51] [210.235.164.62] FreeDOS (JP) ちょっと気になったのでレスします。 >紅 かぐやサン なにかリンクさせる必要があるのでしょうか…? とりあえず、コンパイルするときに nasm -o出力ファイル名 ソースファイル名 とかやっとけばいいと思いますけど。 出力ファイルは.comフォーマットが使えます。 なんかまだ分かりにくいですね。説明求む。 あと日本語マニュアルはここからリンクありますよ。 へろへろ [2000/10/23 Mon 19:52:41] [133.72.168.2] 今、VRAMに直接書き込んでアイコンみたいのを動かして 遊ぼうとしています。 しかし、いろんな色を同時に書き込むことができません。 (VGAの16色、DOS/V、DOSでMASMを使ってる) ソフトバンクの本のテクニカルリファレンスマニュアルと プログラミングリファレンスを参考に書き込みモード3を 使ってやってます。 どうやって同時に色を出すのか教えてください。 また、ネット上に資料があれば教えてください。 紅 かぐや [2000/10/23 Mon 06:00:05] [203.140.13.34] 初めまして 初めまして、皆様。 紅かぐやと申します。 最近になってアセンブリ言語を始めてみようと思ったのですが・・・ NASM落として、使ってみたのですが・・・・ どうもいまいちわからないことがあるのです。 MS-DOSで使用するため、16ビット版のNASM落としてコンパイル したまでは良かったんですが・・・・ MS-DOSで使用するためには、何かリンクさせないと行けないような 事があるのですが・・・・ それは一体何なのでしょうか? NASMで検索すると英文ばかりで・・・・ちょっとわからなかったもので・・ どうかよろしくお願いします。 長文で申し訳ありません にゅ〜び〜 [2000/10/21 Sat 21:02:17] [202.247.163.116] はじめまして。 実は今わからない事があるのです。 UNIXのメールサーバに送られて来たメールを 受信して、メールの中身を解析してデータベースに 登録するという事をC言語でやりたいのですが、 よくわかりません。 UNIXのメールサーバに送られて来たメールを 受信するプログラムってどうやって作成するのでしょうか? #メールデーモンを制御するのかなぁ? また、「ここを勉強すればいいよ」でも結構です。 よろしくお願いします。 うっちー [2000/10/20 Fri 13:17:35] [210.226.78.66] どうもです。 MPC860のサンプルプログラムを見つけました。 http://www.mot.com/SPS/RISC/cgi-bin/ncsp/ncsp.cgi メモリ管理の所を基本から勉強しなおした後、じっくりマニュアルを読み直したら理解できました(ほんの一部ですけど) お騒がせしました(__) dtx [2000/10/18 Wed 15:02:19] [211.9.252.5] To 土野明日香さん > INT 21h FNC.440Dhのサブファンクション67hってなんでしょうか? > どうもMS-DOS7.0(MS-Windows95)から採用されたようなんですが。 FAT32用の拡張されたファンクションです。 VC6に付属しているMSDNライブラリで検索すると、詳しい使い方などが出てきました。 開発ツールなどを持っているのでしたならば、フルインストールして確認してみてくだ さい。キーワードFAT32で、FAT32関連のファンクションは固まって検索されるはずです。 #「Windowsに隠されたDOSの秘密」といった本に、FAT32ファンクションが解説されて いるという話も聞きましたが、私は確認していません。 もっちー [2000/10/18 Wed 12:36:06] [133.70.143.44] はじめまして、もっちーと申します。 僕は今CeleronでWindowsアプリを アセンブラで作ってます。昔は486のPC98機で やってました。 そこで質問なんですが,Pentiumでも、やっぱり FPUと普通の命令は並列に動作してるんですか? うっちー [2000/10/17 Tue 17:33:35] [210.226.78.66] 今、MPC850の初期化のところで苦しんでおります。(特にキャッシュのところ) 石のマニュアルを読んでいるのですが、自分の経験不足と知識不足のためよくわかりません・・・。web上でサンプルプログラム(キャッシュの初期化)を探しているのですが見つかりません。 知っている人がいたら、教えてください。 よろしくおねがいしますm(__)m けんぼぉ [2000/10/16 Mon 10:25:55] [210.163.178.219] ども、けんぼぉです。 ♪澤口@一升金さん はじめまして。 > Power PC 研究家になれますね。 そうですね、あれだけの本を読破したら、かなりの 専門家になっちゃうと思います。(^^) 私も Power PC は今後の研究対象にしたいと思って 情報だけは集めています。PPC 自体は持っていません。 > 八重洲ブックセンターの検索でひっかかって来ましたから > 取り寄せは可能でしょう。 私(達)がアセンブラをはじめた頃より、入手困難になっ てきています。15年程前は、普通の本屋でアセンブラの本 が10冊は簡単に手に入っていたのが嘘のようです。 アセンブラの関連本は、まず図書館で探すのが良いと 思います。近くの図書館にある端末で探したところ、 MSX や PC98 のアセンブラ関連本が結構ありました。http://www.inh.co.jp/~yuichiro/opac.html こんな所もありました。メアド等の登録が必要ですが、 欲しい本を登録しておくと、オークションより安全に 安く手に入るかもしれません。 http://www.bizseek.gr.jp/book/ > Power PC も発表当時は同クロックでペンティアムの2倍 > から3倍の演算性能といわれてかなり期待されてたんです > けど そうだったんですか。発表当時(93年)から2,3年前まで パソコンを絶っていたので、全然知りませんでした。 期待されてた分、あれだけの数の Power PC 関連本が 出まわったわけですね。 > 引っ張られてしまいますから大して性能差がでてこなかった。 > やっぱりバランスと安定感が大きなファクターですね。 そうですね。無駄な足枷はユーザに跳ね返ってくるだけです。 少しは CPU が遅い方が、昔の MSX みたいに可愛げがあって いいと思うんですけど。 cels [2000/10/15 Sun 14:09:59] [210.149.132.15] celsです。 to kuuさん: 普通はVC1.51がプロテクトモード用のコードを生成することは ないと思います。 .386pを指定するとプロテクトモード専用のコードになるわけではなく、 特権命令がアセンブルエラーにならない、というだけです。 ソース中で特権命令を使わなければ.386と変わりません。 Hello, worldをコンパイルしても特権命令は使われません。 使われてたら、EMM386等を組み込んだ状態(仮想8086モード)で実行できません。 32bitコードを生成するVCでHello, worldをコンパイルすると 32ビットセグメント(USE32)になりますが、 やはり特権命令は使われないはずです。 使おうとするとOSにトラップされてしまうからです。 なお、MS-DOS上で32bitコードを実行するには 通常DPMIやDOSエクステンダなどを使います。 kuu [2000/10/14 Sat 13:00:24] [202.219.232.160] 澤口様 お答えありがとうございました。 >.386p という疑似命令は、アセンブル時にプロテクトモード用の >ニーモニックを見つけてもエラーとしない、というだけの意味合 >いで、プログラマが自分で CPU をプロテクトモードに遷移させる >コードを記述しなければ、 CPU はプロテクトモードにはなりませ >ん。 ということはアセンブラがプロテクトモード用に見える ソースをリアルモード用(DOS用)に(わざと)アセンブル してるということでしょうか、VC1.51では。 試しに前出のHello Worldのアセンブラソースをプロテクト モードOKのアセンブラ(ml.exe?)にかけたらプロテクトモ ード(USE16)用のコードが出来たりするでしょうか? またWin32上ではCで書いたHello Worldでもプロテクトモード (USE32)アプリになるということでよろしいでしょうか、 #という判断もアセンブラソースリストを出力させてみたら #USE32とセグメントの設定がされていた、ということによる #のでまた違ってるかもしれませんが。 もっといろいろ試して遊んでみます。 #ml.exeの環境を作らなくてはいけませんが。 >C コンパイラでは、データ転送やレジスタ待避などに一部の32bit >命令を発生させて実行の効率化をはかるみたいです。 確かに一部DWORD指定(オペランド・サイズ・プリフィックス付) が入ったりしていますね。 どうもありがとうございました。 澤口@一升金 [2000/10/13 Fri 18:41:16] [211.4.198.33] 澤口@一升金です。 to けんぼぉさん: すごい! Power PC 研究家になれますね。 Power PC インターフェースブックと Power PC 概論は 八重洲ブックセンターの検索でひっかかって来ましたから 取り寄せは可能でしょう。 ↓ http://www.yaesu-book.co.jp/ Power PC も発表当時は同クロックでペンティアムの2倍 から3倍の演算性能といわれてかなり期待されてたんです けど、結局メモリやストレージ、グラフィックやLANの 性能で引っ張られてしまいますから大して性能差がでてこ なかった。 やっぱりバランスと安定感が大きなファクターですね。 けんぼぉ [2000/10/13 Fri 10:11:02] [210.163.178.219] ども、けんぼぉです。 PowerPC関係の本についての追加です。 ほとんどの本が現在入手困難です。 PowerPCマイクロプロセッサC.H.R.P. 著者 Apple Computer ISBN 4-89369-482-0 出版年月 96-12 価格 3884円 出版社 インターナショナルトムソンパブリッシングジャパン PowerPCインタフェースブック 著者 ロン・ラーメル/ダン・ラーメル 著 ISBN 4-931356-22-2 出版社 プレンティスホール出版 出版年月 96-05 価格 5437円 Power PC概論 著者 Dipto Chakravarty/Casey Cannon 著 ISBN 4-7561-0509-2 出版社 アスキー 出版年月 95-07 価格 4369円 http://www.ascii.co.jp/books/detail/4-7561/4-7561-0509-2.html PowerPCレボリューション 著者 ジェフ ダンテマン/〔ほか〕著 ISBN 4-89433-004-0 出版社 富士ソフトウエア 出版年月 95-02 価格 3786円 PowerPCアーキテクチャ 定価 7,034 ISBN 4900718211 PowerPC解説 POWERからPowerPCへ シュロモ・ウァイス 定価 6,014 ISBN 4900718203 PowerPC入門 ジェームス・E・スミス, シュロモ・ウェイス(著) 監:日本アイ・ビー・エム(株) ISBN:4-900718-20-3 サイズ:A5判 ページ数:480 長くなってしまいました。すみません。m(_ _)m うっちー [2000/10/12 Thu 12:58:51] [210.226.78.66] to 澤口@一升金さん&けんぼぉさん 教えてくれてありがとう! 早速調べてみます。またわからないことがあったら教えてください。 けんぼぉ [2000/10/12 Thu 10:06:55] [210.163.178.219] ども、けんぼぉです。 ♪うっちーさん はじめまして。 >PowerPC系のアセンブラを始めたいと思っているのですが、 >良い入門書またはWebページを知っている方は教えてください。 Inside PowerPC SOFTBANK Jerry L.Young 著 ISBN 4-89052-606-4 \3200 PowerPC(60x系) のニーモニックなどが載っています。 ちょっと入手困難です。私は図書館で見ました。 コンピュータ悪のマニュアル 3 こちらは書店でよく見かけると思います。 Mac(68000系)でのアセンブラについて、書かれています。 澤口@一升金 [2000/10/12 Thu 03:14:41] [211.4.198.31] 澤口@一升金です。 to うっちーさん: ここで PowerPC の仕様を把握し ↓ http://www.chips.ibm.com/products/powerpc/ PowerMAC でトレーニングする ↓ http://developer.apple.com/tools/mpw-tools/ というストーリーではどうでしょう。 商用ではここが安いです。残念ながら、 PowerPC ボードの販売は終了したみたいですが。 ↓ http://www.yellowsoft.com/contents/comp.htm うっちー [2000/10/11 Wed 17:03:56] [210.226.78.66] はじめましてうっちーと申します。 PowerPC系のアセンブラを始めたいと思っているのですが、良い入門書またはWebページを知っている方は教えてください。 よろしくお願いします。 澤口@一升金 [2000/10/11 Wed 11:27:57] [211.4.198.14] 澤口@一升金です。 to daimaou さん: どうやってうまくいかなかったのでしょう? コントロールパネルから[アプリケーションの追加と削除] で[起動ディスク]というタブがあるはずですが。 他に、DOS プロンプトから format A: /s として自分で デバイスドライバを後からコピーする方法もあります。 (でも、こちらは面倒くさい) 澤口@一升金 [2000/10/11 Wed 11:23:07] [211.4.198.14] 澤口@一升金です。 to kuu さん: MS-DOS はセグメントデスクリプタその他いっさいのプロテクト レジスタやニーモニックを管理しません。デバイスドライバや ユーザーアプリケーションに任されています。 .386p という疑似命令は、アセンブル時にプロテクトモード用の ニーモニックを見つけてもエラーとしない、というだけの意味合 いで、プログラマが自分で CPU をプロテクトモードに遷移させる コードを記述しなければ、 CPU はプロテクトモードにはなりませ ん。 C コンパイラでは、データ転送やレジスタ待避などに一部の32bit 命令を発生させて実行の効率化をはかるみたいです。 澤口@一升金 [2000/10/11 Wed 11:10:08] [211.4.198.14] 澤口@一升金です。 to よしなかさん: Linux とか NetBSD,FreeBSD の PowerPC 版が参考になるかも 知れません。 澤口@一升金 [2000/10/11 Wed 11:06:24] [211.4.198.14] 澤口@一升金です。 to 土野明日香さん: int 21H の 440D ですが、Ralf Brown's Interrupt List に記載があります。 ↓ http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/files.html それによると functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5+ the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h で、 67h (DOS 4.0+) get access flag (see #01566) だそうです。 daimaou [2000/10/09 Mon 21:24:27] [143.90.188.183] どうも、はじめまして。ここの掲示板の内容を読んでいると自分が初心者のように思ってきたので、質問の内容が恥ずかしいかもしれませんがどうも、自分でやると、うまくいかないので、誰かに教えて欲しいのですが,PC98用のwindows98Second Edition用の起動ディスクの 作り方を教えて欲しいのですが・・・・・・・・・・・ よろしくおねがいします。誰か助けてください。 土野明日香 [2000/10/09 Mon 21:00:46] [210.131.97.34] どもどもっ★土野明日香です。 わからなくなったときばかり出てきて済みませんm(__)m。 INT 21h FNC.440Dhのサブファンクション67hってなんでしょうか? どうもMS-DOS7.0(MS-Windows95)から採用されたようなんですが。 何をしているのかというと、例のPC-9821用127GBIDE-BIOSはほぼ完成したのですが、 どうもMS-Windows98SEのFDISK.EXEが32GBまでしか対応していないようなのです。 そこでFDISK.EXEを解析し始めたら、上記のサブファンクションが出てきたというわ けで。 やっぱりこれって、PC-9821オリジナルファンクションなんでしょうかねぇ。 kuu [2000/10/07 Sat 23:22:47] [210.131.83.200] 最近x86系アセンブラを勉強し始めた者です。 MS-DOS関連についての質問です。 素朴な疑問で恐縮なのですが 16bit版VC++ver1.51で何かDOSアプリ(Hello Worldとか) を/G3(386用)オプションをつけてコンパイルすると、これは ・リアルモード用コード ・プロテクトモード用コード どちらになるのでしょうか? アセンブラソースを出力させてみると > .386p >_TEXT SEGMENT WORD USE16 PUBLIC 'CODE' ・・・ となっており、何だかUSE16のプロテクトモード用コード に見えるのですが。 かといってそう考えるとMS-DOSはプロテクトモードのコード を走らせることが出来る(セグメントディスクプリタの 管理が出来る)と思えてしまうのですが、これで解釈が あっているでしょうか? MS-DOS時代を知らず何か根本的なところから勘違いしてる のだと思いますが、間違っている点を指摘して頂ければ 幸いです。 よろしくお願いします。 Daisuke [2000/10/07 Sat 10:46:36] [210.255.3.224] http://progar.com/index.shtml の Compiler から Assembler に行くと MASM 6.0 フルセットがダウンロードできる サイトに行けるみたいです。やばいサイトなのか? MASM 6.0 ってフリーじゃなかったですよね? Daisuke [2000/10/06 Fri 12:42:33] [210.255.3.216] Daisukeです。お久しぶりです。 NASM のメイン開発のホームページがSourceForgeに 在るみたいです。開発に協力したい方は覗いてみては? http://nasm.sourceforge.net/main.php3 けんぼぉ [2000/10/06 Fri 10:26:28] [210.163.178.219] ども、けんぼぉです。 ♪YKさん はじめまして。 > アセンブラ自体の入門書で良質なものはないでしょうか? 2000/09/21 の私の書き込みの下半分に書いてあります。 (「少し立ち読みした・・」からの部分です。) P.S. 管理人さんへ そろそろ掲示板が重くなってきたので、 過去ログへ移してほしいのですが・・。 お忙しいと思いますが、よろしくお願いします。 よしなか [2000/10/05 Thu 11:40:47] [134.180.230.40] はじめまして、アセンブラの情報を求めてここにたどり着きました。 PowerPC用の独自OSを開発しなければならなくなりました。 BOOT関係などPowerPC関係に強いHPなどありましたら教えてください。 よろしくお願いします。 YK [2000/10/04 Wed 17:59:19] [211.16.160.91] 初めまして、 これからアセンブラを勉強しようと思っているのですが、 アセンブラ自体の入門書で良質なものはないでしょうか? よろしくおねがいします。 澤口@一升金 [2000/09/30 Sat 11:57:33] [211.4.198.32] 澤口@一升金です。 to HIRO さん: お持ちの Watcom C compiler のバージョンがわかりませんが、 v11.0 の場合は MS-C 同様に "_asm" キーワードです。 それ以前のバージョンですと、下記のように pragma 指令を使い ます。 ↓ http://www.acm.jhu.edu/~kooderi/code/c/compilers.html Watcom C はマニュアルが別売りで結構な値段ですので、こういう ところで苦労したりしますね。(しかも IDE の HELP もあっさり している) 関係ないですけど、 Watcom compiler はオープンソース化される そうです。大変、喜ばしい。 ↓ http://www.openwatcom.org/ HIRO [2000/09/26 Tue 02:11:02] [210.224.99.130] 初めまして、 今,WatocomCにて開発しているのですが asm擬似命令は使えないのでしょうか? 例えば、 asm(" 〜 "); ヘルプでは使えないようなことがかかれているのですが・・・・ もし、使いたい場合は、どうすればよろしいのでしょうか? どなかご教授下さい 澤口@一升金 [2000/09/23 Sat 21:16:28] [211.4.198.34] 澤口@一升金です。 to コンバットSUEZENさん: rom_data というのが独立セグメントだとすると、セグメント のベースが確定していないのではないですか? LABEL1 と LABEL2 は同一セグメントなのでしょうか。 エラーの出る最小限のソースを提示していただければ何か分か るかも知れません。 カワイ [2000/09/23 Sat 16:17:26] [210.166.117.138] 澤口さん、レスありがとうございました。 教えて頂いたホームページを早速調べてみたいと思います。 ちなみに、マウスのカーソルが出なくなってしまうのは、 DOSのビデオモードを101h(640×480の256色モード)にした場合です。 理由としては、マウスドライバがその解像度に対応していない ということのようです。というのも、MS-DOSの中にあるmouse.txt というファイルには、先のモードに対応しているとは書いて ありませんでした。 コンバットSUEZEN [2000/09/22 Fri 15:58:37] [211.18.247.179] >mov ax,(offset LABEL2)-(offset LABEL1) Resありがとうございます。ちょっとやってみたのですが、 コレでもうまくいきませんでした。 多分私がEXTERNを使用しているためおかしくなっていると思われます。 別のソースファイルで定義してある。 rom_data segment public screen_1: 0x00,0x00,0x00,… rom_data ends みたいなラベルをEXTERN宣言しているのですが、 extern screen_1:word こういう宣言ではいけないでしょうか? 基本的な質問かもしれませんがなにとぞよろしく。 相模隆明 [2000/09/21 Thu 14:36:30] [150.15.208.103] >mov ax,(LABEL2-LABEL1) もしかすると mov ax,(offset LABEL2)-(offset LABEL1) でなんとかなるのでは? 確認していないのでもしかすると間違ってるかも。 けんぼぉ [2000/09/21 Thu 10:34:50] [210.163.178.219] はじめまして。けんぼぉ といいます。 Linux でNASMをやっています。 じゃいさん♪ はじめまして。 > AT互換機でアセンブラを始めたいのですが、 > 良い入門書やWebページがありましたら英語でも良いので教えてください。 [NASM]フリーのアセンブラです。 私は「Where is it?」→「Hong-Kong」 からRPMパッケージを落としました。 http://www.web-sites.co.uk/nasm/ NASMのマニュアルです。(途中まで) http://guriponn.tripod.co.jp/others/japanise/nasmdoc0.html 同じくNASMのマニュアルです。(機械翻訳) http://www.bekkoame.ne.jp/~bero/docj/nasm/nasmdoc0.htm Assembly Programming Linux http://www.nk.rim.or.jp/~jun/lxasm/asm00.html プログラミングの入り口 http://www.geocities.co.jp/SiliconValley/9979/index.html アセンブラ入門 http://www.d1.dion.ne.jp/~ecb/assembler/ 少し立ち読みしただけで、あまり内容がわかりませんでしたが、基礎的な部分が 詳しく載っているみたいです。(本屋でチェックして購入を検討してください。) http://www.ohmsha.co.jp/data/books/contents/4-274-13134-3.htm 他にも過去ログやKiss-Me-quickさんのサイトにお勧めの入門書が 記載されています。 Kiss-Me-Quick http://www.annie.ne.jp/~starbow/top.html コンバットSUEZEN [2000/09/21 Thu 09:59:27] [211.18.247.179] LASMを使用しているのですが、なんか変なのです。 セグメントが64K以内なのにオーバーしているだとか、 mov ax,(LABEL2-LABEL1) みたいなデータサイズの取得ができないのです。 ほかにこんな症状に悩まされたことのある人はいませんでしょうか? じゃい [2000/09/20 Wed 20:18:13] [195.74.130.246] 書き忘れましたが、LinuxとFreeBSDを使用しております。 じゃい [2000/09/20 Wed 20:14:40] [195.74.130.246] はじめまして。 AT互換機でアセンブラを始めたいのですが、 良い入門書やWebページがありましたら英語でも良いので教えてください。 澤口@一升金 [2000/09/19 Tue 20:01:51] [211.4.198.30] 澤口@一升金です。 to カワイさん: とりあえず、VGA 参考ページ。 ↓ http://www.brackeen.com/home/vga/ http://www.cubic.org/source/archive/hardware/video/ http://text.csn.ul.ie/~darkstar/GFX/index.html http://chesworth.com/pv/graphics/denthor/index.html なぜマウスカーソルが出ないか、ですが実はよくわかりません。 DOS 用のマウスドライバは入っていて、他のモードでは正常表 示されているということでしょうか? カワイ [2000/09/12 Tue 22:59:31] [210.166.117.143] はじめまして。カワイと申します。 突然、大変場違いな質問で恐縮なのですが、最近はDOSに 関する書物も少なく、この問題に関して途方にくれています。 質問: ビデオモードの設定を640×480の256色モードで使用して いますが、このモードでマウスのカーソルを表示できません。 DOSのビデオモードのBIOSモードを640×480の256色モードにすれば (int 10h でah=00hで設定するもの) いい話だとおもうのですが、私の知る範囲の参考書では、 640×480の256色モードについては、記述していません。 もし上記の設定ができるようでしたら、教えて頂けたら幸いです。 大変長々とすいませんでした。よろしくお願いします。 翠鳥智衣(houbou) [2000/09/10 Sun 05:19:17] [210.197.122.9] Clinic of Nurse Cap. WISE MAID Project.(工事中) 既に化石なhoubouです。 ちょっとステキなページがあったのでご紹介 VESAもわずかだけどある。やっぱりVESAは海外だなぁ。 http://www.t3.rim.or.jp/~hiaoki/ 世界最悪水準なので(?)私のページは行かない方が・・・・。 更新停止中です。 Rio [2000/09/03 Sun 23:19:54] [210.130.71.169] Ichiさん、教えていただいてありがとうございます。 なるほど、COM形式はCP/M時代の名残のような物だから、 メモリを占有してしまうわけですね。 早速試してみたら、うまくいったようです。 ありがとうございました。 Ichi [2000/09/03 Sun 02:09:46] [211.13.2.251] http://www7.freeweb.ne.jp/computer/ichi98/ to Rio氏: COM形式ですよね? COM形式では、起動時に 全てのメモリがそのプロセスに割り当てられるので、 必要に応じて、DOSに返してやる必要があります。 プログラムの先頭で以下の様にします。(決り文句のようなもの) mov ah, 4ah ; 割り当てられたメモリブロックの変更 mov bx, 100 ; 必要なパラグラフ数 ; esは対象のメモリブロック。COMの場合、起動時に ; 自分自身になっているはず int 21h Rio [2000/09/02 Sat 23:51:45] [210.130.71.3] だいぶ前に一度書き込みしましたが、一応始めまして。 func 4b01hを使う練習として、以下のようなプログラムを 作ったのですが、うまく動作しません。 assume cs:code,ds:code,es:code code segment org 100h start: mov segme,ds mov ax,4b01h mov dx,offset asciz mov bx,offset pblock int 21h jc error error: mov ax,4c00h int 21h asciz db 'a:\dos\mem.exe',00h pblock dw 0000h segme dw ? of dw offset arg dd 2 dup (?) dw 3 dup (?) arg db 02h,'/p','0dh' code ends end start デバッガで調べるとALに08hが返ってきているのですが、 コンベンショナルは600KB近くあるので、メモリは 足りていると思うのですが... ひょっとしてバカな質問ですか?すいません。 Silphire [2000/09/01 Fri 12:49:45] [210.253.182.2] 相模隆明さんへ >ELF形式の実行ファイルを逆アセンブルするツールの >所在をご存知の方がありましたらお教え願いたいのです。 やはりgdbでしょう。UNIX上で動作するものです。 標準的なツールですので、man gdbでmanを見られると思います。 DOSで動作するものというものは恐らく無いと思います。 まあ、外国にはあるかもしれませんが。 推測ですが、djgppのWindows版とかなら使えるかもしれません。 それと、今思い付きましたが、nasmの逆アセンブラが nasmのパッケージに付属していましたので、それも使えるかもしれません。 推測ばかりですみません。 相模隆明 [2000/09/01 Fri 08:38:42] [150.15.208.102] ELF形式の実行ファイルを逆アセンブルするツールの 所在をご存知の方がありましたらお教え願いたいのです。 DOSで動作するものがあればありがたいのですが、 ソースがあれば自分でコンパイルします。 どうかよろしくお願いします。 SegaWa [2000/08/29 Tue 20:24:54] [210.172.70.130] gccからインラインアセンブラを使いたいのです。 Cの変数をわたす、オペランドの数の上限が10となっているらしく、 アセンブラ化したい箇所全部が、ひとつのasm("")におさまりません。 これを二つ以上に分けて書くと、コンパイラによって、 間に余計な命令を入れられたりしてしまい、困っています。 なにか、よい方法はないですか? KAZ [2000/08/21 Mon 11:59:07] [150.43.155.7] >澤口@一升金さん 遅くなって申し訳ないんですが、 お返事どうもありがとうございます。 さっそくその資料を調べてみます。 mtm [2000/08/21 Mon 06:12:33] [210.172.198.106] と思ったんですが,やはりmakeファイルから 作らないと無理かな... 試してないのに書き込みして申し訳ない. mtm [2000/08/21 Mon 06:08:42] [210.172.198.106] VC6でもカスタムビルドを使えば, COMファイルをmasmを使って作れるはずです. URL参照. http://puyon.pns.to/asm/index.html ぽくしぃ [2000/08/20 Sun 08:34:00] [210.250.249.247] 澤口@一升金さん、お返事ありがとうございました。 MAKOCAN [2000/08/19 Sat 21:41:21] [64.236.98.170] スタートドリームズ ありがとうございます 探してみます 助かりました クボッチ [2000/08/19 Sat 21:35:54] [203.139.28.193] 澤口@一升金さんありがとうございました 澤口@一升金 [2000/08/19 Sat 19:40:16] [211.4.198.30] 澤口@一升金です。 to MAKOCANさん: Microsoft のリンカは、このページの 5/10 付けの書き込みに書いて あります。lnk563.exe で検索して下さい。 あるいは、このサイトからも 16bit Linker がダウンロードできます。 ↓ http://www.users.uswest.net/~sdiggins/basm.html アセンブラよりもリンカはコンパチビリティが高いので、必ずしもマイクロ ソフト社製にこだわる必要はありません。 MAKOCAN [2000/08/19 Sat 17:58:46] [64.236.114.150] スタートドリームズ 16bitアプリです 本当に申し訳ないんですがすみませんが 16bitリンカはどこにあるかわかりますか? ほげほげ [2000/08/19 Sat 17:17:07] [165.76.207.136] 澤口@一升金さん、ありがとうございます。 参考にさせていただきます。 澤口@一升金 [2000/08/19 Sat 15:07:31] [211.4.198.31] 澤口@一升金です。 to ぼくしぃさん: VC++6.0 では COM 形式の実行ファイルは作成できません。 (というより、 DOS 用実行ファイルはそもそも作れない) VC++ で DOS 用コンパイラを作成すれば可能かもしれませんが・・・ COM はもっぱら DOS での実行ファイルですから、 DOS 用コンパイラ かアセンブラでないと生成できません。 澤口@一升金 [2000/08/19 Sat 15:02:48] [211.4.198.31] 澤口@一升金です。 to MAKOCANさん: link.exe でリンクしないと実行ファイルにはなりません。 というか、どんなプログラムを作られたのですか? DOS 用 16bit アプリなら16bit リンカが必要ですが。 澤口@一升金 [2000/08/19 Sat 11:48:58] [211.4.198.32] 澤口@一升金です。 >to ほうぼうさん: ほげほげさんでした。失礼しました。 澤口@一升金 [2000/08/19 Sat 11:44:37] [211.4.198.30] 澤口@一升金です。 to ほうぼうさん: motion blur で検索をかければそれらしいサイトはひっかかってくるのですが、 ソース付き解説となるとちょっと見あたりませんね。 image processing はアルゴリズムが先で、アセンブラ云々は次の話です。 まずは、アニメーション技法とかアルファブレンディングなどの基礎技法を マスターしましょう。 ↓ http://www.efg2.com/lab/library/Graphics.htm#Algorithms サイトや参考書では、3D グラフィックスを基礎として、ゲーム系、メガデモ系、 アニメ系を探すのがいいでしょう。 Windows ベースなら DirectX、 UNIX ベースなら OpenGL もマスターする必要 があります。 なにもかも自分で作成するのは大変ですから、コンテンツ作成そのものが目的 でしたら、Pov-ray とか Corel Draw とか、Photoshop などの解説サイトにも motion blur その他の画像生成テクニックはあるでしょう。 ぽくしぃ [2000/08/19 Sat 08:19:05] [210.250.245.160] はじめまして 質問なのですがVC++6.0で、COMファイルの作り方を教えてください(あればの話ですが) MAKOCAN [2000/08/18 Fri 15:27:18] [64.236.109.251] スタートドリームズ 初めましてMAKOCANといいます すみませんが、質問よろしいでしょうか Windows DDKの中のML.exeを使って .objファイルはできたのですが どうやって.exeファイルを作るのでしょうか? どなたかご存知ないでしょうか? ほげほげ [2000/08/17 Thu 05:47:45] [165.76.206.133] はじめまして、ほげほげです。 早速の質問で恐縮ですが、VC++のインラインアセンブラ(特に、アセンブラにこだわってはいないのですが…)で、モーションブラー効果などの画像加工をやってみたいのですが、(探し方が甘いのか)参考となる書籍や、ホームページが見当たりません。 どなたか、詳しい方がおられたら、お勧めの書籍などを教えて下さい。 澤口@一升金 [2000/08/16 Wed 19:27:03] [211.4.198.30] 澤口@一升金です。 to クボッチさん: 一番簡単な Z80 の割り込みサンプルってこんな感じですけど、 割り込みの何がどうわからないのですか。 ↓ http://www.interline.or.jp/~tomcat/z80_10.htm クボッチ(まだ初心者) [2000/08/15 Tue 18:10:58] [63.12.69.244] はじめまして Z80で割り込みがぜんぜんわかりません ホームページを検索しまくったりもしたのですが・・・ 誰か教えてください。 ひでのり [2000/08/13 Sun 08:55:55] [210.250.244.59] はじめまして、ひでのりです。 アセンブラは初心者で、今は本を買いあさってます。 この掲示板で紹介されていた 「はじめて読む〜」が書籍検索でまったくヒットしないので 疑問に思っていたところ、「初めて読む〜」と、 漢字に変換していたことに気づき、ひらがなで検索したら見事にヒット! 「はじめて読む8086」、「〜MASM]、「〜486」と、 三冊まとめて注文しちゃいました。(サ、サイフが軽い!?) とりとめのない話ですいません。 同じことで悩んでる方の助けになればと思いまして(僕だけ?) TACK [2000/08/11 Fri 19:19:12] [210.170.102.37] to 澤口@一升金 様 ありがとう御座います Windowレベルでのアセンブラ、デバッガの環境を使ったことがないので 知りませんでした。 TACK [2000/08/11 Fri 19:19:05] [210.170.102.37] to 澤口@一升金 様 ありがとう御座います Windowレベルでのアセンブラ、デバッガの環境を使ったことがないので 知りませんでした。 澤口@一升金 [2000/08/11 Fri 07:46:56] [211.4.198.32] 澤口@一升金です。 to TACKさん: XA80 は、システムロード社の Z-Vision(Z80シミュレータ)におまけで ついてくるアブソリュートアセンブラです。 to KAZさん: ステッピングモータの Z80 による制御は、総合電子出版社の本に詳し いです。 ↓ http://www.7-g.co.jp/sougou/annai.htm ソフト的にはカウンタによる任意周期の割り込みの仕方とパラレルポート への出力の仕方をマスターすれば良いのですが。 (専用のコントローラLSIとかコントロールボードは使わない場合) POTOS [2000/08/10 Thu 13:45:47] [211.6.157.179] volvox sonicさん、ありがとうございました。返信送れて申し訳ないです。 ココアラ [2000/08/09 Wed 16:32:30] [210.154.69.211] カトさん、ものすごく詳しい説明ありがとうございます。 これだけ説明していただければほかに調べることはありません。 いろいろなページを探してみたつもりなのですが、98のタイマに 関するページがほとんどで、AT互換機の情報がぜんぜん見つかり ませんでした。 ありがとうございます。 TACK [2000/08/09 Wed 13:27:46] [210.170.102.37] はじめまして、初めて投稿するTACKと申します。 KAZ さんへ ステッピングモーターとプログラムだけですか? それでは動かせません。 少なくとも ・ステッピングモータードライバ ・電源(ドライバによりますが6Vのステッピングモーターなら 多分DC12V) ・パルス発生器(プログラムでシミュレート可能) がなければ(ハード的に)動きません。 XA80 for WINDOWSがどんなソフトなのでしょうか? (Z80のシミュレーターですか?) PCからどうやってハード線をだしますか? (ボードを実装する?) パルスモーターの制御とは何をしたいのですか? そのあたりが不明ではあなたが思っている回答がえられないと思いますよ。 以上 力卜 [2000/08/09 Wed 13:11:15] [192.51.44.19] ココアラさん、こんにちは。力卜と申します。 引用に際して改行位置を変更しました。 >RTC(int 1ch)とまったく同じ周期で割り込みがかかってくるのです。 過去にも書きました([2000/05/12 Fri 12:20:50])が、 int 1chは、int 08h(インターバルタイマ割り込み)ハンドラが 発行するソフトウェア割り込みです。なので、当然同期します。 >インターバルを設定するにはどうすれば良いのでしょうか。 >ポインタで結構ですので、よろしくお願いします。 設定処理なら、Cソースになりますが、XM7(FM-7エミュレーター) V1.0L10のソースの \IBMPC\ibm_tim.c が簡潔でわかりやすいです。 "FM-7エミュレータ XM7" URL http://www.ipc-tokai.or.jp/~ytanaka/fm7/xm7.shtml から、ソースのアーカイブ xm71010s.lzh を取り出してください。 (って勝手に紹介してしまってよいのかなぁ?) PITへのカウンタ設定値は、t[s] * 1,193,180[Hz]で求めます。 t=0.002[s](2[ms])なら、2386.36で、切り捨てor四捨五入して 2386(0x0952) となります。あまり小さい値だと、Windowsの DOS窓などで正しく動作しないようなので気を付けて下さい。 もとに戻すときは、0x0000 (65536)を設定してあげます。 これで、従来の約55[ms]周期(約18.2[Hz])になります。 なお、ソース中のタイマ割り込み処理の timer_entry()は、 オリジナルの int 08hハンドラを呼び出していないので注意 してください。(ゲームみたいに種々のリソースを占有する ソフトならこれでよいでしょうが) ワード(16ビット幅の)カウンタを用意して、割り込み処理の最後に カウンタに、「PITへのカウンタ設定値」を足します。キャリーが 起きたら、「従来の int 08hベクタ」にブランチして、従来の int 08hベクタの処理や、int 1chの処理を行わせてください。 キャリーが発生しなかったときは、ソースにあるとおり、 EOIを発行して iretすればよいでしょう。 ココアラ [2000/08/09 Wed 00:13:19] [210.228.248.160] ナショナルセミコンダクタにメールで相談したらわざわざNS16550の 日本語版データシートを一日で送り届けてくれました。しかもタダ。 あまりに親切なんでびっくりしちゃいました。 ただ、澤口@一升金さんに教えていただいたところのソースなどを 参考にほとんどできちゃってたのであんまり意味はありませんでしたが・・・ しかし、またつまってしまいました。AT互換機のタイマ割り込みです。 石はどうやら98系とほぼ同じもの(上位互換?)を用いているよう なのですが、RTCとの区別がわかりません。調べたところタイマは IRQ0らしいのですが、RTC(int 1ch)とまったく同じ周期で割り込み がかかってくるのです。インターバルを設定するにはどうすれば 良いのでしょうか。ポインタで結構ですので、よろしくお願いします。 KAZ [2000/08/08 Tue 14:08:31] [150.43.30.99] アセンブラ初体験のものです。 アセンブラに限らず、プログラミング関係の知識は 全くないのですが・・・。 卒業研究で、ステッピングモータを、 Z80で制御するっていうのをやっているんですが、 とにかく何から始めていいのかわかりません。 今、手元にあるものは、 DC6VのステッピングモータとXA80 for Windowsという プログラムだけです。 その他研究室内にいろいろな機材はあるんですが、 何が何だかわからないもので・・・。 実際、ここに書き込むような内容じゃなく、 先生に相談することというのはわかっているのですが、 ただ、今、担当の先生と非常にケンカ・・・というか、 折り合いが悪い状態なので、くやしくて聞くに聞けないのです。 文法については自分でどうにか頑張って勉強するつもりです。 とにかく、「ハードウェアをプログラムで制御する」 ということが全然わかりません。 私信でもかまいませんので、よろしくお願いします。 sonic [2000/08/05 Sat 07:30:24] [210.197.78.133] to POTOSさん #pragma warning( disable : 4035 ) function ... #pragma warning( default : 4035 ) でうまくいくと思います。 ちなみに4035というのは警告番号。 アウトプットウィンドウに表示されるC4035と言う数字です。 sonic [2000/08/05 Sat 07:18:41] [210.197.78.110] 現在W2kを使っていて先ほどWindows2000DDKをDLして、 この掲示板に情報のあったパッチを当ててMLのバージョンを 上げようとしたのですが、エラーが出てしまいます。 w2k対応のパッチでなくてはならないのでしょうか? ぴょん太 [2000/08/04 Fri 23:28:15] [210.139.252.165] どうもぴょん太です。 ついこないだアレなサイトを見ていると MS-DOS 6.0 SourceCodeってのがありますた。 だれかコレについてご存知の方いらっしゃいますか? 実はもうフリーになって配られている、とか 配られていないが密かに開発者の誰かが流出させた、とか 経緯が気になりますね。 しかしそのうちWinも…(?) POTOS [2000/08/03 Thu 16:59:22] [211.6.157.179] はじめまして、POTOSといいます。 最近VCのインラインアセンブラで質問させていただきます。 通常関数の戻り値はeaxレジスタに格納するのが掟だそうですが、 実際に関数の戻り値を記述しないとコンパイル時に警告が出ます。 動作的には問題ないのですが、やはり警告は気分が悪いので戻り値 を返したいと考えています。警告レベルを下げる以外の解決方法が あれば教えてください。一応以下のようなコードで今のところ誤魔化 しています。よろしくお願いします。 int add(int x, int y) { int result; _asm { mov eax, dword ptr [x] add eax, dword ptr [y] mov dword ptr [result], eax } return result; //結果を返す } とも [2000/08/01 Tue 16:00:52] [210.238.31.236] to 澤口@一升金さん どうもありがとうございます。 何となく、pushaと同じかなとは思っていたのですけど。 これでようやく分かりました。 Silphire [2000/08/01 Tue 14:13:36] [210.253.182.2] ども、Silphireです。 少し前になりますが、 >Windows98SEのDOS窓、MS-DOSモードともに7.10でした。 ああ、NTはそうなんですか。初めて知りました。 どうも、勉強になりました。ありがとうございます。 澤口@一升金 [2000/08/01 Tue 00:47:28] [210.190.4.131] 澤口@一升金です。 to ともさん: インテルニーモニックで言うところの pusha,popa すなわち 全レジスタのスタック待避、復帰です。 その資料は NEC 表記で書かれていたのでしょう。 ちなみに、 V series のドキュメントはここにあります。 ↓ http://www.ic.nec.co.jp/micro/ods/jpn/upgkit/16V/doclist.html Daisuke [2000/07/31 Mon 18:45:27] [210.255.7.1] to こたつみかんさん Win98 DDKをダウンロードしたならMASMは ML.EXE という ファイル名ではいっているはずです。 あと ML.ERR も必要です。 こたつみかん [2000/07/31 Mon 17:19:27] [133.205.99.179] はじめましてこんにちわ。 アセンブリをはじめようと何かと下調べしています。 やっぱりMASMかなと考え、また無料で落とせると聞きDDKを落としてインストールしてみたところ、MASM.EXEというのがあると予想していましたが見当たりませんでした。 いったい私は正しいものをダウンロードできたのでしょうか。 このようなくだらない質問をして立腹されたのならば申し訳ありません。 とも [2000/07/31 Mon 07:59:26] [210.238.31.236] V30系の表記で push R, pop R とかあるようですが、これは一体何をしてるのでしょう? 突然の質問ですいません。 昔のアセンブラの本を見てたら出てきたので・・・。 澤口@一升金 [2000/07/30 Sun 23:42:59] [210.190.4.131] 澤口@一升金です。 to Kazuさん: 紹介したページに 32bit 逆アセンブラもありますから、解析は できるでしょう。ただ、16bit アプリと違って、32bit アプリ は Win API の固まりです。逆アセンブルでは実行時アドレスが 数値としてわかるだけですから、どこでどの API を呼び出して いるかは、そうすらすらとは分かりません。 念のため付け加えて置きますと、商用ソフトではライセンス条項 にたいがいリバースエンジニアリングの禁止を謳っているはずで す。 つまり、原則的に解析結果を Web で発表したり、他人に教えた りすることはできません。ご注意下さい。 Kazu [2000/07/29 Sat 22:54:45] [210.255.146.90] 澤口@一升金さん ありがとうございます。 わかるよーな、わからんよーな・・とりあえず勉強してみます。 ただ、最近のアプリは32BITがほとんどですよね?? 澤口@一升金 [2000/07/28 Fri 02:14:51] [210.190.4.131] 澤口@一升金です。 to kazu さん: 普通は disassembler というツールを使います。 ↓ http://archive.csee.uq.edu.au/~csmweb/decompilation/disasm.html ただ、実際には動きを実際にトレースしないとほんとの コードの動きは把握しきれないことが多いです。 特に Windows アプリの場合は EXE ファイル単独で動作 していることは稀で、 DLL がどーたらとか OLE がこー たらと言う話になるので、 debugger とか ICE とかいう ツールが必要になるのですが、実用になるものは、趣味で 購入できる値段ではありませんね。 強いてフリーのやつ、といえばやはり Turbo Debugger かな。 ↓ http://www.borland.com/bcppbuilder/turbodebugger/ とりあえず、16bit コード用のフリーの disassembler とか debugger をそろえてトレーニングすることをお勧め します。 ニーモニックを覚えるだけじゃ駄目で、OS のシステムコー ルや BIOS ファンクション、インタラプトリストにも一通り 目を通しておく必要があります。 cocoala [2000/07/27 Thu 23:59:34] [210.228.248.106] 澤口@一升金さん、ありがとうございました。 解読してみます。 ひろ [2000/07/27 Thu 23:06:24] [210.155.193.139] アドバイスをくださった皆さんどうもありがとうございます。 to Silphireさん >DOSのバージョンを調べてみてはいかがでしょうか。 INT 21h(AH=30h)のことですよね? Windows98SEのDOS窓、MS-DOSモードともに7.10でした。 Windows2000は5.00のようです。NT4.0は今手元に無くてわからないです。 OSのバージョンチェック + INT 2FhのWindows95/98判定でやってやれ ないことはなさそうですが、いろいろなOSのバージョンを調べる必要 があるので、少し大変そうですね。 toカトさん >NTや2000にしか存在しない環境変数があれば、NT or 2000上で >動作させたとしてエラーを出します。 環境変数ですか、まったく思いつきませんでした。検討してみます。 >別の方法として、Win16/32アプリを作成できるのなら、GUIアプリで >警告ダイアログを開くだけのものを作り、目的のDOSアプリを >STUB.EXEとしてlinkする方法も使えるかも知れません。 なるほどSTUBを使う方法ですか、これも検討してみます。 kazu [2000/07/27 Thu 22:43:57] [210.255.146.90] おそらくこのページに書きこするような内容では無いと思うのですが・・・ 初心者すぎる、質問でごめんなさい。 マシン語?っていうんですか、ダンパーでEXEファイルとかダンプすると、表示される16進数の魔法の記号たちは・・・あれを読みたいんです。VBやC++なら、超入門編ぐらいならよめるんですが、、16進数の記号君は何を書いてるのかさっぱりわかりません・・・噂ではアセンブリ言語にやくして どーのこーの・・・アセンブリ言語の本は買って読み漁りました、JMPで指定のアドレスに飛ぶとかとばんとか・・・それはわかったが、じゃあ16進数をどーやってアセンブルすればいいの?? ハンドアセンブルちゅうやつをやろうと思ったが対応表?ちゅうんすか?あれがない・・・ ちなみに、OSはWIN2000で、CPUがPV この二つが解ってればあとは、それ用の対応表?ってやつがあると時間かかってもなんとかなるんですよね??どなたか、そんな事が解るHP教えて下さいーーーお願いします。 力卜 [2000/07/27 Thu 19:34:18] [192.51.44.19] ひろさん。 全然エレガントじゃないですけど、次の方法はどうでしょうか? - まず、WindowsNT or 2000上で動作しているかの判定します。 NTや2000にしか存在しない環境変数があれば、NT or 2000上で 動作させたとしてエラーを出します。(例: SYSTEMROOT, PATHEXT) - 次に、Windows95 or 98 (or 3.1?)上のプロテクトモード上で 動作しているか否かの判定に、これまでの INT 2Fh または、 環境変数 windir(小文字)が存在するかを使います。 別の方法として、Win16/32アプリを作成できるのなら、GUIアプリで 警告ダイアログを開くだけのものを作り、目的のDOSアプリを STUB.EXEとしてlinkする方法も使えるかも知れません。 (この方法だとWin3.1ではDOSプロンプトから実行できちゃうのかな?) …最初は、環境変数 windir(小文字)が存在すれば、すべての場合で WindowsのDOS窓だと判断できると思ったのですが、NT or 2000 上だと、DOSアプリからはwindir環境変数を見ることができない みたいでした(残念)。 オマケですが、DOSの Versionを int 21h で調べる方法だと、 Win95/98をCommand Prompt Onlyで(純粋なDOSとして)起動しても、 Version が 7.x として返ってきてしまいました。 澤口@一升金 [2000/07/27 Thu 17:09:54] [210.190.4.131] 澤口@一升金です。 to Silphireさん: WinNT の DOS バージョンは 5.5 くらいじゃなかったかな。 あと、DR-DOS とか PC-DOS なら 7.0 はあり得ますね。 (これはほとんど言いがかりか) こさか [2000/07/27 Thu 17:09:08] [203.179.164.62] こさかでーす こさか [2000/07/27 Thu 17:08:58] [203.179.164.62] こさかでーす こさか [2000/07/27 Thu 17:08:42] [203.179.164.62] こさかでーす こさか [2000/07/27 Thu 17:08:10] [203.179.164.62] こさかでーす こさか [2000/07/27 Thu 17:07:09] [203.179.164.62] こさでーす Silphire [2000/07/27 Thu 13:24:28] [210.253.182.2] to ひろさん: DOSのバージョンを調べてみてはいかがでしょうか。 DOSのバージョンが7.0以上ならばWindowsなはずです。 ただ、Windows 3.1以前の場合はこれは使えませんので、 その時はINT 2Fhを使って下さい。 私は今学校にいて、ファンクション番号が分かりませんので、(^^;) そのあたりはInterrupt Listで調べて下さい。 申し訳ありません。 ただ、INT 21hである事には違いありません。 ひろ [2000/07/26 Wed 22:28:25] [210.155.193.252] 皆さん今日は DOS用のプログラムを書いているのですが、このプログラムを WindowsのDOS窓から実行されたくないので、WindowsのDOS窓 から実行された場合はエラーメッセージを表示して終了する ような処理にしようと考えています。 そこで質問なのですが、プログラムが実行された環境が純粋な DOS(WindowsのMS-DOSモード含む)なのか、それともDOS窓で実行 されているのかプログラム内で確かめる方法は無いでしょうか? Windows95/98だけならINT 2Fh(AX = 160Ah)で判別可能なのです が、WindowsNT/2000だとこの方法で判別できないようですので。 判別方法をご存知の方がいましたら是非ともおしえてください 澤口@一升金 [2000/07/26 Wed 22:25:05] [210.190.4.131] 澤口@一升金です。 to りくりさん: 680X0 の詳細資料はここにあります。 ↓ http://ebus.mot-sps.com/ProdCat/sg/0,1251,M934310184622,00.html 澤口@一升金 [2000/07/26 Wed 22:00:57] [210.190.4.131] 澤口@一升金です。 to makoto さん: そのものズバリの団体がありました。 ↓ http://www.linuxassembly.org/ 澤口@一升金 [2000/07/26 Wed 21:32:51] [210.190.4.131] 澤口@一升金です。 to ココアラさん: ここじゃだめですか? ↓ http://www.simtel.net/simtel.net/msdos/io_utils.html ココアラ [2000/07/26 Wed 18:54:02] [210.154.69.211] 今AT互換機でRS232C通信のコードを書いているのですが、 送信してもラインモニタに表示されず、初期化すらうまくいきません。 どこかに参考になるサンプルソースはないでしょうか。 C、C++、アセンブラのいずれでも大丈夫です。 宜しくお願いします。 ほくと [2000/07/24 Mon 23:37:47] [210.229.21.145] りくりさん >だれか〜僕にHD68000の参考になる本を教えて下さい。 >どうしても68000が使いたいの〜 >68020の本もあったら教えて下さいお待ちしてます。 以前、本屋でMC68030、MC68040、MC68060のユーザーズマニュアル を見たことがあります。その本の発売元はCQ出版となっていたので 問い合わせてみてはいかがでしょうか。 恐らく、68000のユーザーズマニュアルも取り扱ってると思います。 Daisuke [2000/07/24 Mon 19:30:58] [210.255.9.82] to makotoさん >アセンブラのプログラムはどうやって実行すればよいのでしょうか? アセンブラのプログラムは基本的に Linux であれば GAS か NASM でプログラムを組み、オブジェクトファイルとしてC言語等に リンクするのが一般的です。 私の場合はアセンブラはDOSでしか使いませんので 詳しくは言えません。(というかあまりよくわからない) 個人的にはアセンブラ環境ではDOSが一番楽だと思います。 ただ最近はDOSが売ってないのでFreeDOSやDR-DOS等で NASM・Arrow ASMを使って勉強するといいと思いますよ。 アセンブラの資料はMASM等の本でいいと思います。 フリーソフトのソースを読むのもとても勉強になりますよ。 makoto [2000/07/24 Mon 16:28:33] [210.161.231.242] はじめまして、makotoと申します。これから コンピュータの構造を勉強しようと思い、アセンブラ言語 を勉強しようとおもっているのですが、アセンブラのプログラムは どうやって実行すればよいのでしょうか?今自宅のPCはDOS/V機 でLinuxが入っています。後、皆さんはどうやってアセンブラの知識 を得ることができたのでしょうか?本屋などで見てみるとZ80やMASM などのかなり昔の文献しかなく新しく出版されたものが見当たりません。 Silphire [2000/07/24 Mon 13:31:48] [210.253.182.2] 自己レスです。 >質問なのですが、NASMでは、 >分割アセンブルをしてCOMファイルを作ることはできないのでしょうか? >どうもマニュアルを読むだけだと、そのようなことはできないようにおもえます。 >どなたかご教授下さい。 見事にマニュアルにありました。 Chapter 7にありました。 お騒がせしてすみません。 >1セクタの容量をどうやって知るのかわからなかったのですが、 1セクタの容量を知るには、IPL(BPBだったか?)に書いてあります。 (http://www.vector.co.jp/soft/data/hardware/se016321.html) のIPLの欄を参考にしてください。 PC-98シリーズ用の資料ですが、IPL部分は98もATも同じだったと思いますので、 一応参考になるとは思います。 私自身もこれでATのIPL部を解析しました。 しかし、ATのセクタ中のバイト数は、 10年近く前のディスクをサポートするつもりでないなら、 カトさんのおっしゃるとおりに、 1セクタ=512バイトと仮定してよいと思います。 澤口@一升金 [2000/07/22 Sat 12:10:31] [210.190.4.131] 澤口@一升金です。 to cojicoji さん: PC/AT と PC98 の違いですが、 ・割り込みコントローラ 8259A の接続と割り込み種別 ・グラフィックスコントローラと VRAM アドレス ・漢字の表示方法 ・リアルタイムクロック ・DMA の使い方 ・カウンタの使い方 ・シリアルポート ・パラレルポート ・マウス制御 ・キーボード制御 ・ディスク制御 など、直接 I/O に関する部分はほとんど異なるので、PC/AT マシン のプログラムにしか興味がないとなると、PC98 の参考書はあまり役 には立たないでしょう。要するに PC/AT 用のソースでそのまま PC98 に使える、あるいはその逆のケースは I/O が絡む限りはほとんど無い わけです。 割り込みコントローラ、カウンタタイマ、DMA コントローラ、 FDC は LSI が同じですから、LSI そのものの初期化や制御一般を幅広く押さえる 役には立つかもしれません。 規約のあるものについてはそのまま使えますが。 たとえば ・EMS,XMS,VCPI,DPMI ・ASPI ・DOS 標準ファンクション など。 ただ、これは別に PC98 が古いわけではないです。DOS レベルでは PC/AT の方が設計は古いです。単に「ハードが違う」という話ですね。 アセンブラプログラマのスキルというのは、ハードスペックを理解して 最大性能を引き出すことにつきるわけで、古いも新しいもないです。 でなければ、いまだに Z80 ボードとか 8051 ボードなどといった、 30 年も前に設計された CPU が使われていることが説明つきませんね。 日立の H8 コアも 20年くらい立ってますし、 SH も 10年以上になります ね。 FD からのブートシーケンスは 8bit 時代の技術をそのまま引きずって いますから、アーキテクチャとしては 40年前の仕様です。 Win98 でならアセンブラプログラムはできるけど、 PC98 ではどこから 手を着けていいかわからない、というのはフランス料理はできるけど ご飯の炊き方はわからない、というのと同じで、アセンブラプログラマ としてはあまり格好いいものではありません。 いずれにせよ、PC/AT はいくら世界的なシェアがあるといっても、ロー カルな技術の一つに過ぎないわけですから、いろいろなハードアーキテ クチャに挑戦するに越したことはないと思います。 もちろん、PC98 でなくても、 Palm とか Zaurus でもいいわけですが、 ツールや本体の値段、アーキテクチャの違いを考えると、 PC98 が 別アーキテクチャのトレーニングにはもっとも敷居が低いでしょう。( 日本では、という条件付きで) cojicoji [2000/07/21 Fri 04:12:28] [202.211.170.121] cojicojiです。 >カトさん >もしint 13hを解析するのなら、DMAや、FDC(intel 8727 or >NEC μPD765A/745/7265)の知識が必要になりそうです。 >昔、PC-8801シリーズやPC-9801シリーズを使っていたヘビーな >人に聞くといろいろ教えてもらえるかも知れません。 偶然1週間前に図書館で "DMAとCプログラミング 工学図書" という本を借りてきてました。 内容はカトさんの話にあるμPD765Aや8237Aの操作法などが 詳しく書いてあるようです。 書いてあるようですっていうのは まだあまり読んでないからなんですが、 というのも、この本にはPC-9800という 私が本を見るとき避けている言葉がのっているからです。 わたしのようなパソコン暦の浅い(win98からの)人から見ると なんとなく、PC-9800は古いパソコンで、そのテクニックは そのまま今のパソコンではつかえないのではないか? という偏見があります。 そこで皆さんに聞きたいのですが、 フロッピーがBドライブにあるとか Cバスってのがあるなどとは聞いた事があるのですが、 この部分は同じだとか違うだとか、 PC-9800の本を読むときに気をつけたほうがよい点には どのような事があるのでしょうか? cojicoji [2000/07/21 Fri 03:18:40] [202.211.170.62] cojicojiです。 >アンネさん bochsのエラーがよくわからなくて困っています。 私の場合、はじめてbochs.exeを起動したとき 動かなくて、.outファイルの情報をみると hrddrv.imgがopenできないということだったので makeimge.exeでイメージファイルを作りました。 そして、あらためてbochs.exeを実行すると 瞬間(0.5sぐらい)、画面はでてくるのですがやはり起動せず。 (この時点でmakeimageでfloppy.imgも作っています。) .outファイルをみてみると 9443 *** io read 3c5 case 1: sequencer clocking mode 9974 vga: io write: 3cf: reg 05: value = 10h 26439 *** io read 3c5 case 1: sequencer clocking mode 134384 floppy_command: attempt to read/write sector 1, sectors/track=0 bochs: panic, prefetch: EIP > CS.limit 138660 Last time is 964114681 とのことでした。 ん、ということは、つまり起動プログラムがないってこと? >イメージファイルをfloppy.imgにリネームして の意味をもう一回かんがえて 自作bootimageをfloppy.imgにリネームし bochsファルダに持ってきたら動きました。 当たり前のことをやってないだけでした。 というわけでこの文書いてるうちにできちゃいました。 これ、かなり面白いかつ便利なプログラムですね。 いままでの再起動連発が馬鹿らしくなりました。 翠鳥智衣(houbou) [2000/07/21 Fri 02:38:15] [210.197.123.123] Clinic of Nurse Cap.(なぞなるクリニック) 何故houbouが・・・。(とさておき) > りくりんさん > だれか〜僕にHD68000の参考になる本を教えて下さい。 本ではないですが、ftp://x2ftp.oulu.fi/のAmigaディレクトリ あたりに資料があったと思います。(あとベクターか日立かな) それとどこかに68000のシミュレーターがあったはずです。 simtelnetでしたかな。 りくりん [2000/07/21 Fri 01:54:17] [198.81.5.130] う〜ん はじめまして〜 だれか〜僕にHD68000の参考になる本を教えて下さい。 技術評論社には一冊あってけど、A5サイズの簡単な本が欲しい。 どうしても68000が使いたいの〜 (・_・)......ン?それと、もうひとつ! 68020の本もあったら教えて下さいお待ちしてます。 あ〜だれか返事くれるのかな〜・・・・・ アンネ [2000/07/21 Fri 00:36:19] [210.234.14.194] > cojicoji さん > bochsダウンロードしました。ちょっと動かし方がわからなくて > まだ、快適な環境を得られていません。 > virtual discはつくってみたのですが > どう実行したらよいかわかっていない状態です。 イメージファイルをfloppy.imgにリネームして bochsのディレクトリに入れてbochs.exeを実行するのが いちばん簡単です。 別のディレクトリで実行する場合はbochsrcをコピーして 中身をちょっといじります。 (biosファイルのパスを絶対パスにとか) Silphire [2000/07/20 Thu 15:22:42] [210.253.182.2] どうも始めましてSilphireと申します。 質問なのですが、NASMでは、 分割アセンブルをしてCOMファイルを作ることはできないのでしょうか? どうもマニュアルを読むだけだと、そのようなことはできないようにおもえます。 どなたかご教授下さい。 力卜 [2000/07/20 Thu 13:55:10] [192.51.44.15] cojicojiさん。力卜です。 >また、どうも書き込みがうまくいかないと思っていたら >セクタは0ではなく1からだとやっと知りました。 MS-DOSでの論理セクタ番号は、基数が0ですから間違いやすい のかも知れません。FDの物理セクタ番号は、普通は1からです。 MS-DOSの論理セクタと物理セクタの対応は、1.44 2HDでは、 論理セクタ 0 ==> 物理track:0, side:0, sector: 1 : 論理セクタ17 ==> 物理track:0, side:0, sector:18 論理セクタ18 ==> 物理track:0, side:1, sector: 1 : 論理セクタ35 ==> 物理track:0, side:1, sector:18 論理セクタ36 ==> 物理track:1, side:0, sector: 1 : 論理セクタ2879 ==> 物理track:79, side:1, sector:18 のようになっています。まとめると、 論理セクタ番号=(track*2+side)*最大セクタ番号+sector - 1 です。(ただしdouble sidedの場合。1S, 1DDとかはまた別) >1セクタの容量をどうやって知るのかわからなかったのですが、 PC/AT互換機だと、ほとんどの場合、1セクタ=512バイトと決め つけてよいと思います。 実際にやるのなら、「512で試し読み⇒失敗なら、1024バイトで 試し読み⇒失敗なら、…」のようにリトライをすれば実現できそう な気がします。1セクタの容量の問題以外にも、2DDなのか2HDなのか の判定も同様にすればできそうな気がします。 (いずれも私は試したことないですが) >これはもうint13hを逆アセンブルして >動作を知るしかないと思うのですが、 >セクタ単位ではなくもっと細かく読み書きができるわけですね。 int 13hとその内部が扱うのも、やはりセクタデータのみと考えて いいと思います(FORMATのときはちょっと特殊なことしますが)。 もしint 13hを解析するのなら、DMAや、FDC(intel 8727 or NEC μPD765A/745/7265)の知識が必要になりそうです。 昔、PC-8801シリーズやPC-9801シリーズを使っていたヘビーな 人に聞くといろいろ教えてもらえるかも知れません。 (私はFDCとしてはFUJITSUのMB8877系、かつDMAでないプログラム 転送による方式しか知りません。FM-7ユーザーなので(^_^;)) >ギャップはセクタを区切るだけのものと理解していました。 念のため。2D/2DDの例にあげたもので「ギャップ」と書いたもの 以外はギャップではありません。ギャップは多少ずれて上書きされて も大丈夫な領域です。ギャップ以外は、不意に上書きされたり、 読めなくなったりすると、FDに正常にアクセスできなくなる可能性 があります。 cojicoji [2000/07/20 Thu 00:49:05] [202.211.170.82] cojicojiです。 カトさん詳細な説明ありがとうございます。 フロッピーって両面にかけるんですね。知らなかったです。 また、どうも書き込みがうまくいかないと思っていたら セクタは0ではなく1からだとやっと知りました。 1セクタの容量をどうやって知るのかわからなかったのですが、 やっぱりそういった情報が含まれており、 BIOSを介してアクセスすると隠蔽されている部分が あるということですね。 これはもうint13hを逆アセンブルして 動作を知るしかないと思うのですが、 セクタ単位ではなくもっと細かく読み書きができるわけですね。 ギャップ部にいろんな情報がある事を知り勉強になりました。 情報処理試験を受けたとき ギャップはセクタを区切るだけのものと理解していました。 アンネさん 書き込み遅くなりました。 bochsダウンロードしました。ちょっと動かし方がわからなくて まだ、快適な環境を得られていません。 virtual discはつくってみたのですが どう実行したらよいかわかっていない状態です。 今、テスト中でパソコンをあまり触らないので、 おわってからじっくり試したいと思います。 というわけで、いまだにフロッピーからコードを読み込み そこへジャンプするというレベルまでしか達成できていません。 MINIX本を読んでi-nodeとかの意味を知る事ができたので 中途半端なunix-FSとかができればいいなぁなんて思ってますが、 果たして僕にできるのかなぁ… 力卜 [2000/07/18 Tue 12:35:25] [192.51.44.19] cojicojiさん。 フロッピーのトラック上にあるデータは、 (セクタ長+セクタ間ギャップ長)*セクタ数 で求められる長さよりも、もうちょっと複雑になっています。 3.5" or 5" の 2D / 2DDの例ですが、次のように Data(セクタデータ)とGap3(セクタ間のギャップ)のまわりには もっといろいろな情報がくっついています。 -------------------------------- preamble=Gap1 (4Eh*32), { Sync (00h*12), IDAM (A1h, A1h, A1h, FEh), IDaddress (Cyl, Hed, Rec, leN), CRC (high-byte, low-byte), Gap2 (4Eh*22), Sync (00h*12), DAM (A1h, A1h, A1h, F8h(DDM)/FBh(DM)), Data (??h*セクタ長), CRC (high-byte, low-byte), Gap3 (4Eh*n3) } * セクタの数, postamble=Gap4 (4Eh*n4) -------------------------------- …しかし、cojicojiさんがやろうとしている通常のセクタ単位の 読み書きでは、セクタデータ以外の存在はほとんど気にする必要は ありません。 必要なのは、フロッピーの種類ごとのシリンダ(トラック)数、 ヘッド(サイド)数、レコード(セクタ)数、レコード(セクタ)長と、 扱えるシリンダ(トラック)番号、 ヘッド(サイド)番号、レコード(セクタ)番号の範囲です。 3"FD 2HD 1.44MBでは、トラック数が80 (0〜79)、サイド数が2 (0〜1)、セクタ数が18 (1〜18)、セクタ長は512となっています。 (()内は扱える範囲) これらをすべてデータあるいはプログラムとして使うと、 80 * 2 * 18 * 512 = 1,474,560バイト扱えることがわかると 思います。 "A Description of the DOS File System" (http://www.alumni.caltech.edu/~pje/dosfiles.html) の 7. Reserved Sectors の終わりの方に、米国での一般的な フロッピーの種類とトラック数、セクタ数、セクタ長などの一覧表 が載っています。 # 先頭の方には、ブートセクタのBPB (明にBPBとは書いてないけど) # の表も載っています。 "Linux-Kernel Archive: FAT filesystem" の 1996/10/03 #0129 (http://www.uwsg.indiana.edu/hypermail/linux/kernel/9610.3/0129.html) には、前述のURLの BPBの説明にない比較的新しい領域(Signature, IDなど)についても載っています。 日本語の資料としては、 "長いファイル名の基礎講座" (http://www.vector.co.jp/soft/data/prog/se044198.html) "DISKに関する資料" (http://www.vector.co.jp/soft/data/hardware/se016321.html) なども参考になると思います。 (後者は PC-98固有罫線を使ってあるのかな?) 個人的には、MS-DOSなどに頼らない簡単なDOSみたいものを作る ときにも、FATによるファイルが扱えるようになっていると 便利かなと思います。 そのような場合も上のページが参考になると思います。 KAS [2000/07/17 Mon 22:48:24] [195.67.79.70] Daisukeさん、ありがとうございます。 アセンブルできました。 ただし、実行ファイル(.EXE)を逆アセしたら開始コードが 200hから始まっていました。 なんででしょう? これからSAMPLEファイルを見つけて、いろいろと 勉強してみます。 Daisuke [2000/07/17 Mon 00:41:51] [210.255.5.39] to KASさん NASMでCOMファイル(FLAT BINARY)ができるのは デフォルトですのでオプションの指定が必要です。 下記のようにすればOMFフォーマットのOBJファイルが作成 されます。(-f オプション) c:\nasm>nasm -fOBJ filename.asm EXEファイルはリンカが無いと作成できませんので別途必要です。 link.exe / tlink.exe / alink.exe / lld.exe など EXEファイルはOBJファイルから作成します。 c:\bin>alink -oEXE filename.obj NASMのサンプルファイルはNASMのソースアーカイブや ALINK・NASM−IDEのアーカイブ内に付属してますので 参考にしてみてください。 ALINK・NASM−IDE等はNASMのホームページの リンクより入手可能です。 NASMホームページ: http://www.cryogen.com/Nasm KAS [2000/07/16 Sun 18:10:59] [195.67.79.70] 最近NASM(DOS版)をダウンロードしてアセンブルしてるのですけど、 実行ファイルがCOMファイルとしてできてしまいます。 NASMで、EXEファイルを作成するにはどうするのでしょうか? それと、NASMで書かれた小さいSAMPLEプログラム(DOS版)を探し ています。 どうかよろしくお願いします。 cojicoji [2000/07/15 Sat 15:27:01] [202.211.170.67] 下の訂正です。ごめんなさい。 ×1440000/998≒148 ○1440000/9702≒148 cojicoji [2000/07/15 Sat 15:24:09] [202.211.170.67] フロッピーの構造についての自己レスです。 割り込みベクタ1Eh(0000:0078h)に フロッピーのパラメータテーブルのアドレス があることがわかりました。 そのアドレスからオフセット04h,05hに トラック当たりのセクタ数、セクタ間のギャップ長が 格納されているそうです。 ちなみに調べてみると、 2HD1.44の今使っているフロッピーは トラック当たりのセクタ数:12h(18) セクタ間のギャップ長:1Bh(27)(単位はバイト?) でした。 これらから、 1トラックの容量:(512+27)*18=9702バイト トラックの数:1440000/998≒148 をもとめました。 結果、シリンダ番号は8bitで指定でき だいたい148までと解釈しました。 あってますよね? アンネ [2000/07/15 Sat 05:12:31] [210.234.14.139] > cojicoji さん > ラベルに対してoffsetをつけていたのが > 間違いであったとわかりました。 NASMではoffsetはつけないですが、MASMでは必要です。 間違いではありません。 #あそこのページのコードはNASM用でしたね。。。(--;; あとリブートを繰り返すのは大変なのでPCのエミュレータを 使ってみてはどうですか。 http://www.bochs.com/ Windows用のバイナリはこちら。 ftp://ftp.v.nu/Bochs/ cojicoji [2000/07/15 Sat 03:38:10] [202.211.170.100] アンネさんから教えていただいたページを見て ラベルに対してoffsetをつけていたのが 間違いであったとわかりました。 あぁ、jmpのときはoffsetをつけていなかったのに、 なぜmovの時だけoffsetをつけていたのだろうか? 答えは、そういうもんだと思っていたからです。 ゴ〜ン… cojicoji [2000/07/15 Sat 03:07:44] [202.211.170.100] 連続かきこみの、cojicojiです。 今回は フロッピーディスクの構造について質問です。 int 13hを呼ぶとき、 10bit(0-1023)のシリンダ番号と 6bit(0-63)のセクタ番号と 4bit(0-15)のヘッド番号を渡しますが、 この内フロッピーに関しては、 ヘッド番号は0のみだと思います。 そうすると1セクタに512バイトだから 1024*64*512=33554432≒33Mバイトになります。 これは1.44Mバイトに反するので シリンダ番号に制限があるのかな?と思い、 1.44*1000000/(64*512)=43.9453125 と計算し43シリンダという結果がでました。 しかし、 http://www.linux.or.jp/JF/JFdocs/hdd-intro.html ここをみるとシリンダあたりのセクタの数にばらつきがある ハードディスクもあるとのことです。 フロッピーディスクでは 64セクタ固定と考えていいのでしょうか? また、フロッピーではセクタ番号は 6bitも使わずシリンダ番号は43よりも多いのでしょうか? よくわからないです。どなたか教えてください。 あと、上のページで >「すべてのセクターに通し番号を付け、 >その番号によってセクター位置を指定する」方法は > "LBA" と呼ばれており、 >すべての SCSI ディスクコントローラ、 >および 504MB 以上の大容量ディスクに対応した >IDE コントローラの多くはこの方法によって >ディスクにアクセスすることができます。 とあり int 13h,ah=42h(extended read) int 13h,ah=43h(extended write) が紹介されていたので http://www.ctyme.com/intr/rb-0696.htm をみてみました。 AH = 42h DL = drive number DS:SI -> disk address packet とあったのですが、セクタ番号を指定する部分がありません。 ためしに使ってみたらCflagは0でエラーにはならないでしたが どこから読んできたのか分かりません。 このあたりも教えてください。 だらだらとごめんなさい。よろしくお願いします。 cojicoji [2000/07/15 Sat 03:02:24] [202.211.170.100] >アンネさん >おっしゃってることがイマイチよく理解できませんが、(汗 アセンブラ始めたばかりなので 変なことやっているかもしれません。 ;test.asm ASSUME CS:CODE,DS:CODE CODE SEGMENT ORG 100h いろいろ… mov ax,offset HELLOMSG call print_str ;axの指すメモリの文を出力 いろいろ… HELLOMSG: DB 'Hello',00h というプログラムを書いたとき、 ml test.asm exe2bin test test.com debug test.com -w 100 0 0 1 再起動 こうするとうまくプリントされなかったので、 プログラムのORG 100hをORG 7c00hに変えたとたん うまくプリントされるようになりました。 バイナリをみると offset HELLOMSGの解釈が 両プログラムで変わっていました。 このとき、ORG 7c00hに変えると exe2bin test test.com でファイルを変換できなくなりました。 そこでtest.exeをバイナリエディタで開き、 どのあたりにプログラムが書かれているか探してみると、 ORG 7c00hに対して7e00hから始まっている事がわかりました。 そこで7e00hまでファイルをカットしたわけです。 (前の書き込みでは7c00と書いてました。まちがいですね) うまい方法があるとは思いますが、 今は独学で試行錯誤がんばっていますので 思わず変な事をやっていると思います。 ちなみにプログラムの始まりのアドレスを探すときも mov ax,ip ができなかったので、 call AAA AAA: pop ax とかやってました。 >フロッピーからブートさせる手順は↑のページが参考になるとおもいます。 あぁ、やりたい事がかいてありそうだぁ〜。英語がんばろう。 またまた、情報ありがとうございます。 それでは。 アンネ [2000/07/15 Sat 01:03:49] [210.234.14.139] http://www.phys.uu.nl/~mjanssen/ > cojicoji さん おっしゃってることがイマイチよく理解できませんが、(汗 フロッピーからブートさせる手順は↑のページが参考になるとおもいます。 私はNASM使ってるんでMASMのことはわかりませんが、 .COMファイルは(たしか)素のバイナリなので、.COMにすればrawrite.exeで そのまま書き込めるはずです。 cojicoji [2000/07/14 Fri 23:02:01] [202.211.170.91] cojicojiです。 >アンネさん どこにいったか分からなくなったlinuxのCD見つけたので rawrite.exeつかってみました。 ファイルをまるごと入れてくれるようなので、 ファイルの先頭部分を切るツールを作り、 それと組み合わせて使っています。 今までは、毎回フォーマット処理してたので、 (debug.exeはフォーマットしたdiscじゃないと受け付けてくれない) 時間短縮でストレスが減り、助かります。 情報ありがとうございます。 ファイルの先頭部分を切っている話ですが、 biosがメモリの7c00hに読み込んでくれる事をようやく知り、 うまくいかないで困っていた メモリ上に配置した文字列を表示するルーチンが ORG 7c00hを始めに書く事により ようやくうまく動きました。 そこでアセンブル後のexeファイルの先頭7c00hまで 切る事になったためです。 このあたりMASMのオプションで指示できると思いますが… そこで、MASMで知っているといい感じのオプションって いくつかあると思うのですが、何かあります? 歩野零一 [2000/07/13 Thu 00:48:22] [210.230.134.190] いつもお世話になっています。 不明なオペコードについて、お聞きしたいと思います。 インテルのデベロッパー用HPでFast_IDT_ap528.htmのがありますが、 この処理のうちで次のような命令が出てきます。 movdf dword ptr [esi+8*12], mm1 このmovdfをPII、PIIIのインストラクションで探してみましたが、 載っていないようです。 マクロのような気もしますが、ご存知の方はいらっしゃいますか? 閑話休題: MMXでDCTを書いたら、スパース行列分解アルゴリズムを使うより 力技で計算したほうが早い気がしますが、気のせいでしょうか。 64、32ビットローテート命令があれば、バタフライ演算もステップ 数を食わないのに…。 ずとし [2000/07/12 Wed 00:00:42] [210.255.32.221] おはこんばんちは。また質問にきました。 えーと、MASMと、VCを使って、C++のクラスメンバ関数を、 MASM側で作成するには、どうするといいのでしょうか。 やってみようと思ってるのは、 クラス定義からメンバ関数を消した構造体をMASMで定義して、 それを使って、thisポインタを第一引数に持つ関数を定義してリンク、 ってやつです。 これだと、クラスのメンバ関数としてリンクさせる方法と、 クラスのメンバ変数だけ取り去って、同様に扱える構造体としていいのか、 が不明です。 やっぱり不可能だ、とか、もっといい方法がある、とか、 レス期待してます。 それではまた。 アンネ [2000/07/11 Tue 23:43:54] [210.234.14.158] > cojicoji さん > 私が今やっている方法は、アセンブラで生成したtest.com > をdebug test.comで読み込み-w 100 0 0 1と打ち込み > test.comのアドレス100から1セクタ分、フロッピー(0) > の0セクタに > 書き込むといった方法です。 rawrite.exe 使うってのはどうです? LinuxのインスールCDに入ってるやつです。 rawrite -f test.com -d a ってかんじで。 ぴょン太 [2000/07/11 Tue 23:37:57] [210.139.252.164] http://obey-me.virtualave.net/ どうもぴょン太です。 こないだ質問してからずっとMSDOS用のTSRを組んでいるのですが、 常駐させて終了するah=31h/int 21hを実行する際に dxにパラグラフ単位で常駐するサイズを指定しなければなりませんね? そこで今は、CODEとDATAを全部常駐させてしまう方法を取ってますが、 他に、めんどうだけど常駐時に使う部分は全部CODEの先頭部分に詰めてしまって、 常駐時に使う部分だけをパラグラフ単位に直して指定する方法、しか知りません。 他にももっと有効(実用的)な手段がおありでしたら教えてください。 アポトーシス [2000/07/11 Tue 16:10:17] [210.139.214.150] to 澤口@一升金さん 素数のことありがとうございました。 やはり、ふるいにかけるのが一番なんですね。 エラストテネスの方法で頑張ってみることにします。 cojicoji [2000/07/11 Tue 02:36:30] [202.211.170.119] >MS-DOS のディスクのブートセクタには BPB(BIOS Parameter >Block)を書き込んでおく必要があります。 レスありがとうございます。BPBという言葉ははじめて知りました。ちょっと勉強してみます。 この掲示板を見初めて知らない言葉をよく見かけるのでためになります。 やっと画面の出力ができるようになりました。 まだ数値を文字に変換するルーチンを書いてないですが 去年勉強したCASLの本から引用しようと思っています。 私が今やっている方法は、アセンブラで生成したtest.com をdebug test.comで読み込み-w 100 0 0 1と打ち込み test.comのアドレス100から1セクタ分、フロッピー(0) の0セクタに 書き込むといった方法です。 間違ってハードディスク(1)に書き込みそうで心配です。 OSが防いでくれるならいいのですが… そしてパソコン再起動→フロッピー起動の手順です。 もっと楽なやり方ってないのかなぁ。 ちょっと面倒ですがCのprintfとかに頼らないとこが いい感じです。(BIOSにたよりっぱなしですが…) それでは。 AF [2000/07/11 Tue 00:50:54] [210.233.160.2] cojicoji さんこんにちは、 >フォーマットするとセクタ0の初めあたりにMS-DOS5の文字が見えますが、 >もしかして何かの実行プログラムが書き込まれているのでしょうか? >ディスクのフォーマットっていったいどういうことなのでしょうか? Microsoft のサイトに行って BPB とか boot Sector と言う キーワードで検索するとヒントが得られるかもしれません。 MS-DOS のディスクのブートセクタには BPB(BIOS Parameter Block) を書き込んでおく必要があります。これが無いと未フォーマット ディスクとして扱われるか、めちゃくちゃなデータが記録された ディスクとして扱われます。 > あと、私が書いたプログラムが実際に動いていたとして、 > どういった方法でデバッグすべきでしょうか? > 画面への文字出力とかはまだ難しそうだし… ブートセクタのデバックはちとむずいです。でも、画面に 1 文字でも出力できればレジスタの値を表示された文字 から推測することもできます。考え様です。ほら、'A' は 41H でしょ! ではでは、 cojicoji [2000/07/10 Mon 12:38:44] [202.211.170.103] こんにちは windowsのdebugをつかえば フロッピーへのセクタ単位の書き込みができたので、 セクタ0にフロッピーをアクセスするint 13hを数回実行する プログラムを書き込みました。 起動するとint13hを書いた分だけアクセスランプがつくので 面白くなってきたのですが、 デバッグのためにフロッピーに書き込んだデータを windowsのdebugで読もうとしても フロッピーをフォーマットし直さないと 読めなくなります。 フォーマットするとセクタ0の初めあたりにMS-DOS5の文字が見えますが、 もしかして何かの実行プログラムが書き込まれているのでしょうか? ディスクのフォーマットっていったいどういうことなのでしょうか? あと、私が書いたプログラムが実際に動いていたとして、 どういった方法でデバッグすべきでしょうか? 画面への文字出力とかはまだ難しそうだし… 質問しかしていないので、参考にしている本を書きます。 工学図書 DOS/V・BIOSとC言語 平成7年初版で平成9年で4版なので結構売れている本かもしれません。 澤口@一升金 [2000/07/10 Mon 11:32:48] [210.190.4.131] 澤口@一升金です。 to アポトーシスさん: 「素数を算出する」というのがいまいちわかりません。 1000桁とか一万桁とか任意の桁数の素数をつくる、という意味でしたら、 確かそんな都合のいいアルゴリズムはなかったと思います。 32bit 以下の素数をすべて求める、とかいう意味でしたら、 除数を 2 から始めて順序に割ってみるだけ、いわゆるエラストテネスの ふるい法でいいんじゃないかと思うのですが、アセンブラでの整数除算 に何か問題でもあるのでしょうか? アポトーシス [2000/07/10 Mon 04:42:38] [210.139.214.175] はじめまして。 今、VC6.0のインラインアセンブラのみで素数を算出する プログラムをコードしたいのですが、どう組上げたらよいのか よくわかりません。 アセンブラは、はじめたばかりでどう質問したらよいかわからなく 内容が曖昧で申し訳ありませんが何方かお願いします。 小林 [2000/07/10 Mon 01:21:11] [210.173.77.108] >本来のアセンブラと異なり、実値がどのように利用されるか >__emit__ では判断できませんから、仕方がない部分でしょう。 __emit__でもコンパイラが判断してオフセットを1バイトか4バイトに するものかと思っていたんですけど、それはなさそうなんですね。 では、"オフセットが4バイト"の命令を使っておきます。 ありがとうございました。 >Borland C++ suite がインプライズ社から販売されましたね。 僕のところでいろいろとヘッダファイルを配布しているんですが、 これまではユーザーがC++ BuilderのLearningエディションを使ってたり C++ Compilerを使っていると、TASMを買わないとアセンブラが使えない という状況だったんで__emit__を使っていたんですけど、 安いモノでもTASMが付いてくるとなると、だんだん意義が薄れてきそうです。 もちろん喜ぶべきことですけどね。 澤口@一升金 [2000/07/10 Mon 00:15:47] [210.190.4.131] 澤口@一升金です。 to ルナさん: とりあえず、チュートリアル集を紹介しておきます。 ↓ http://www.geocities.com:0080/SiliconValley/Park/9784/tut.html PC9801 と異なり、PC/AT クローンの場合は、 Graphics Mode という 概念があって、これを決めないと、ピクセルとアドレスの対応が決まりま せん。 もちろん、アドレスもビット並びも全く違います。 過去アーカイブにもいろいろなグラフィックス関連サイトが紹介されていま す。 cojicoji [2000/07/09 Sun 18:25:19] [202.211.170.121] よくわからないですが MASMでアセンブルしてintが実行できました。 (まだフロッピーの読み書きとかはできてませんが) ご迷惑おかけしました。 cojicoji [2000/07/09 Sun 16:04:21] [202.211.170.121] はじめまして、難しい内容でしたが興味からログを一気読みしました。 そこで質問です。とんだ勘違いをしてると思いますがお願いします。 フロッピーから起動し簡単な処理を行うといった事をしたいです。 私の考えでは コンパイラのインラインでアセンブラを書き、 リスティング機能でえられたコードを フロッピーの初めのセクター?に書き込み、 それで起動する、 という手段を想像しています。 そこで過去ログの方法の >>フロッピーの先頭にコードを書きこめるのか分かりません。 >DOSでのBIOSの話ですが、アブソリュートライトを使います。 >AT互換機でBIOSでディスクの書き込みは、 >int 13h >ah=03h >al=書き込みセクタ数 >bx=書き込みデータのオフセット >ch=書き込み先頭位置のシリンダ位置 >cl=セクタ位置 >dh=ヘッド位置 >dl=ドライブ番号(ビット7が0の時はフロッピー:1はハードディスク) >es=書き込みデータのセグメント >返り値 >ah=ステータス(0=エラー無し) >al=書き込んだセクタ数 >fl=エラーのときはキャリーが1 を用いたプログラムをまず作り、 自由なセクタに書き込む環境を作りたいです。 ところがwin2000の環境ではプロテクトモード?なのでint 13hを使えないようです。 (コンパイルはできても実行できません) 初めて読む486にリアルモードに移るソースがのってますが 実行してもいいのでしょうか?(パソコンはこわれないかな) DOSの環境を持っていない場合どうしたらよいでしょうか? 環境はwin2000+vc6です。 澤口@一升金 [2000/07/09 Sun 12:55:25] [210.190.4.131] 澤口@一升金です。 Borland C++ suite がインプライズ社から販売されましたね。 ↓ http://www.inprise.co.jp/bcsuite/index.html 日本語版のコンパイラ、アセンブラ、デバッガ一式で \15,000 ですから、使いでがあるんじゃないかと思います。 PC98 用の Turbo C や Turbo Pascal もパックに含まれてい ますしね。 きたざわ [2000/07/09 Sun 04:02:27] [210.155.203.193] http://www.egroups.co.jp/group/bccompiler >小林さんへ __emit__ は、アセンブラじゃないです。 アセンブラ以前の「バイナリコードの埋め込み」です。 ですから、常に 32bit で評価されるようですね。 本来のアセンブラと異なり、実値がどのように利用されるか __emit__ では判断できませんから、仕方がない部分でしょう。 __emit__ で組み合わせる命令の方を 32bit 長を使うよう 指示すれば良いですよね? ルナ [2000/07/09 Sun 00:26:11] [210.172.135.38] ども。NASMを使ってアセンブラを触ってます。 アセンブラの本って、大抵昔のものになって しまい。PC98環境での説明で、ほとんどがされています。 そもそも、私がアセンブラをやろうと思ったのは、 C/C++で、当たり前のようにやっているディスプレイへの 表示とかは、内部的にはどんなことをやっているのだろうか? って、興味が出たからです。 それで、ディスプレイへの表示は、特定位置のメモリにデータを 書き込むとそれが、ディスプレイに反映されることまでは わかりました。 そこで、ビットマップファイルを読みこんで、一つ一つ点を 打っていって絵を表示するというものを作成してみようと思いました。 ですが、私の使っているマシンはAT互換機のため、 本で書いているアドレスへデータを書き込んでもだめのようなんです。 そこで、こういった場合、どうやって、どこに書き出せばいいのか、 とかを調べるのでしょうか? ハード依存の処理の場合は、その都度環境を調べることになるのでしょうが、その調査というのは、どのように行うのでしょうか? hikki [2000/07/06 Thu 13:38:18] [202.244.183.70] 問題のアドバイスをしていただきありがとうございました、今その課題の手引きを教授が配って解説をしています、どうやらこの問題が出来ない人たちはすくなくないようで(我々を含む)悪戦苦闘しています、まだ時間があるので頑張ってみようと思います。 本当にありがとうございました。 小林 [2000/07/03 Mon 00:06:45] [210.173.77.168] http://www.ky.xaxon.ne.jp/~hitoshi/programming/BCCMMX/BCCandMMX.htm 初めまして。小林と申します。 最近、Borland C++ Compiler5.5で__emit__を使って機械語を埋め込んでいるのですが、 分からないことがありまして、悩んでいます。 変数のアドレスを埋め込む際、 int a; __emit__(&a); のようにしてアドレスを埋め込むのですが、BCB5(トライアル版)のヘルプによると、 ”自動変数または引数変数のアドレスを使うと,BP からの変数のオフセットが -128 から 127 までの範囲内であれば 1 バイトを占め,範囲外であれば 1 ワードを占める” とあるのですが、必ず4バイトのオフセットになっているようなのです。 具体的には、0xF8になるべきところでも、0xFFFFFFF8となっているのです。 常に4バイトになるようならそれはそれでいいのですが、たまに1バイトになるような こともあるのでしょうか? インプライズ/ボーランドに聞けば?とも思われるでしょうが、Borland C++ Compiler5.5は テクニカルサポートをしない、という話なので・・。 よろしくお願いします。 #変数の宣言にstaticを付けて静的変数にすれば、オフセットではない普通の(?)アドレスに #なるようなので、とりあえずそれでやっているのですが。 ずとし [2000/07/02 Sun 15:38:51] [210.249.19.202] ひさしぶりに現れます。 以前相談ネタにしたGBデバッガーは、 ひとまず使えるものができました。 公開はできませんが。 例のジャンプテーブルですが、 VC上では普通のジャンプテーブルは書かせてもらえませんでした。 なので関数ポインタコールテーブルか、 switchでコンパイラにテーブル作ってもらわないかんようです。 VCの最適化には勝てんということで、 結局全部Cに書き換え中だったりします。 __fastcall っていうのが結構効くみたいなので。 Tomohiko Igasakiさんへ。 情報も提供せずにいらん突込みをいれますが、 パチンコROMの解析って、やっていいんですか。 なんだかデンジャラスな気がするですが。 正規の開発か移植でないなら、やめることをお勧めします、一応。 液晶用ROMならあんまし問題ないでしょうけど。 AF [2000/06/30 Fri 02:25:19] [210.233.160.2] > お忙しくなければ、この問題の解説と解き方を教えてもらいたいと思います。 宿題かな (ま、きついことは言わないけど...) ただし、答えは直に教えない :-) 課題1 は数列の計算と言うよりかは、表示が大変でしょう、 n=16 に限っているので、数列の計算は楽そうです。a16 に必要 なビット数を見積もってみてね... n=100 当たりまでとなるとし んどいですよ... 出力は strtol 等の関数ソースを参考にアセンブラで 作ってみては...(でも BCD を指定しているところがミソだな) 課題2 は小数をもつ数の計算 計算式が示されているし、このままアセンブラに落とせば良さそう。 小数を扱う場合、桁の維持等には注意が必要かな... 使用している機械が x86 (x87 コプロセッサ命令)だと、 レジスタスタック機構について慣れが必要です。 最近のプロセッサは (RISC と言われている奴を含めて)三角関数 命令が備わっていたりします。 # えっ、三角関数がないプロセッサを使ったマシンで 3D オブジェ # クトがガンガン動いている(回っている)って、それはどうしている # か考えてみてください (三角関数、平方根の計算はどの様にしたら、 # 高速なのか、あるいは高精度なのか理解できるようになります。 # 三角関数の計算はテイラー展開だけではない...) 「その機能を確認せよ」... ある意味では C のプログラムとリンク して表示などは楽できる手段を認めているかも... 課題3 はテキスト処理とソートですね、 地道にテキストパーサーと、ソートする処理を書くかな。yacc, lex のお世話にならなくてもアセンプラで直に書けます。パーサーは無限 ループに落ちないように気をつけましょう。処理に必要な作業域の 確保(見積もりにも)要注意、ソートは、手っ取り早く実現できそう なアルゴリズムを選べばいいかな? # 8人だからそれほど処理時間のオーダーは気にしなく # てもいいか... でも点数が処理時間の短い順だったら... # くれぐれも yacc, lex で作ったソースをコンパイラで # でアセンプラに落として提出しようとは思わないように、 # 多分膨大な出力なので「人か書いた風」に直すのも一苦労 えっ? awk や sort コマンドを起動して処理するプログラムを 書くって...それもまた楽しいでしょう。点がもらえるかな... ではでは... 歩野零一 [2000/06/29 Thu 23:55:24] [210.238.175.69] 急ぎならCで組んで、cc -S する手がありますね。 ただし出力されたソースのラベルに手を加えるのを忘れずに。 でないとバレバレです。 #アセンブラがCASLだったらコツコツやるしかないですね。 Cも判らない、言われたら一手間ですけど。 初心者 [2000/06/29 Thu 16:15:23] [202.244.183.23] hikkiさんが書いた問題で私は@番は大体わかっています。 A、B番がまだやり始めて余り時がたっていないので、解らないことがあります。 よろしければ、教えてください。 お願いします。 hikki [2000/06/29 Thu 15:33:14] [202.244.183.23] どうも、はじめまして。 分からない問題が出て困っています。 まだ、アセンブリ言語を習い始めたのでわかりません。 よろしければ、教えていただけないでしょうか? 課題1 フィボナッチ数列 an+1=an-1+an、 a0=0、 a1=1、n=1,2,3・・・ の各項を計算するプログラムをアセンブリ言語を用いて作成し、その機能を確認する。 ただし、n=16まで計算するものとする。 (1)2進数の表を作成する。 (2)2進数化10進数(BCD)による表を作成する。 課題2 与えられたx、ただし 0≦x≦π/4 について SIN(x) の近似値を計算するプログラムを作成し、その機能を確認せよ。ただし、計算は第2項まで行うものとして、係数は下記の値を用いる。また、以下の点に注意すること。 SIN(x) ≒ C0x+C1x^3 ただし、 C0=0.99959257 C1=−0.1615350 なお、このときの最大相対誤差は 4.084×10^−4 であり、 Taylor展開の途中打ち切りに比べて約1行改善されている。 課題3 8人の学生と試験の成績がアスキーコードで下記の順序でメモリに格納されている。 Bill:69,Bob:65,Frank:54,Keith:72,Paul:84,Rick:57,Terry:65 試験の成績順(得点の高い順)にソートし、名前と得点を要素とする表を作成しなさい。 なお、データは下記のデータ分で与え、表のデータはすべてアスキーコードとします。 exam db 'Bill:69,Bob:65〜Rick:57,Terry:65' といった問題です。 お忙しくなければ、この問題の解説と解き方を教えてもらいたいと思います。 どうか、よろしくお願いします Tomohiko Igasaki [2000/06/29 Thu 14:20:39] [133.95.106.130] パチンコのROM の解析および作成のために、 8ビット68系(具体的には6802と6811)の アセンブラと逆アセンブラを探しています。 Linux 上で作業したいので、できるだけ フリーのものでソースも公開されている ものがいいです。お持ちの方、ご存知の 方などはいらっしゃいませんでしょうか。 Ichi [2000/06/28 Wed 06:57:54] [210.237.205.239] > csとdsの指すメモリが同じなので 実験で確認しただけなので、間違ってるかもしれません。 # 公式な資料が見つからない... ゆきのはら [2000/06/27 Tue 21:50:35] [202.219.178.154] Yahoo!オークションにMASM Ver6が出品されていました。 http://auctions.yahoo.co.jp/jp/auction/14412311 です。 cels [2000/06/27 Tue 01:55:35] [203.180.144.13] to Ichiさん > >x86にコンフォーミングセグメントというのがあります。 > それでいいのですか。わかりました。 あ、Linkのオプションがほんとにそれなのかどうかはわかりません(^^; たぶん同じものを指していると思いますが。 > csとdsの指すメモリが同じなので、dsを通して書きこんでやります。 なるほど。よくわかりました。 dsのほうのセグメントディスクリプタなら アクセス可能というわけですね。 びたみん [2000/06/27 Tue 00:52:33] [210.130.67.147] 澤口@一升金さん こんばんわ。 ありがとうございます。早速見てみます。 助かりました。 syphaslet [2000/06/27 Tue 00:31:36] [133.15.41.75] Daisukeさん 早速のレスありがとうございます。 早速落としてきて参考にさせていただいています。 他にも自分なりにいろいろ調べてみたんですが、 DOS/V互換のアーキテクチャにはテクストVRAM領域という PC98x1では当たり前の概念は、標準ではなかったみたいですね。 知らずに分けのわからない書き込みをしてしまいまして恥ずかしいです(^^; 澤口@一升金 [2000/06/26 Mon 12:06:52] [210.190.4.131] 澤口@一升金です。 to びたみんさん: ここにあります。 ↓ http://www.psyber.com/~tcj/hexspec.txt びたみん [2000/06/26 Mon 00:44:29] [210.130.66.60] インテルHEX形式の詳細なフォーマットが 書かれているホームページ又は資料等を御存知の方は、 いらっしゃいませんでしょうか?? あまりに一般的過ぎるのかどこ探しても見つかりません。 よろしくお願いします。 Daisuke [2000/06/25 Sun 18:34:37] [210.255.5.97] to syphasletさん DOS/V環境での資料は simtel.net にある Interrupt List が参考になると思います。 http://www.simtel.net/ syphaslet [2000/06/25 Sun 05:45:22] [133.15.41.75] はじめまして、みなさん。 PC98でアセンブラでプログラムを書いたことがあるからと、 今度はDOS/Vアーキテクチャ向けのアセンブラプログラムを 書くことになって困っているうちにたどり着きました。 質問なのですがDOS/Vアーキテクチャに関して知る上で参考に なるようなウェブサイトはないでしょうか? 特にメモリマップがわからないのでテクストVRAMの位置すら わからなくて参っています。 Ichi [2000/06/24 Sat 05:38:32] [210.237.205.243] NASM to Lisp氏: >MASMとNASMってアセンブラのシンタックス上の違いっておるんでしょうか? 結構あります。たとえば、NASMではすべてのラベルはアドレスを持ち、 アドレスしか持たない。つまり、MASMでは mov foo, eax と出来ますが、 NASMでは、 mov [foo], eax としなければなりません。 また、型も持たないので、NASMでは、foostrucという構造体と、その インスタンスfooistrucがあったとして、[foostruc.member]なんてことが 出来ず、[fooistruc+foostruc.member]と書かなければなりません。 詳しくはマニュアルの2.2を見てください。 Lisp [2000/06/23 Fri 23:08:24] [210.160.41.210] MASMとNASMってアセンブラのシンタックス上の違いっておるんでしょうか?詳しいかたご回答願います。 Ichi [2000/06/23 Fri 07:08:56] [210.237.207.200] to cels氏: >Discardableでなくてもスワップはされると思います。 (略) >.exeからロードされる、といったものだったと記憶しています。 むぅ、relocatableと勘違いしていたようです。 http://micro.uoregon.edu/win31/segload.html に (Win3.1ですが) >Microsoft Windows loads programs into memory in segments (64K blocks >of memory) marked fixed, movable, or discardable. Windows can unload >discardable segments when it needs more memory for other applications. という記述がありました。 >x86にコンフォーミングセグメントというのがあります。 それでいいのですか。わかりました。 cf.) http://www.intel.co.jp/jp/developer/vtune/v4/cbts/refman.htm の システム・プログラミング・ガイド >ところで、x86には読み書き実行すべて可能な >セグメントというのは存在しないようです。 >どうやって実現してるんでしょう? Windowsは、コード領域に、ページレベルで書きこみ保護をしています。 /SECTION:.text,ERWD で、このページレベルの書きこみ保護を無効にして、 csとdsの指すメモリが同じなので、dsを通して書きこんでやります。 (実験済み) つまり、セグメントとしては、読み出し可のコードセグメント、 ということになります。 cels [2000/06/23 Fri 03:33:39] [203.180.144.116] to Ichiさん Discardableでなくてもスワップはされると思います。 メモリが不足したとき、Discardableなセグメントは スワップされずに破棄され、また必要になったときには .exeからロードされる、といったものだったと記憶しています。 記憶が曖昧なので違ってるかも。 x86にコンフォーミングセグメントというのがあります。 これは高い特権レベルのセグメントに対して使われます。 通常低い特権レベルから高い特権レベルのルーチンを呼ぶには コールゲートを通さないといけませんが、そのルーチン内で 特権が必要な処理を行っていなければわざわざ特権レベルを 変更する必要がありません。 そういうルーチンをコンフォーミングセグメントにすると そうでないときより効率がよくなります。 IOPLは、I/O特権レベルのことでしょうか? こちらはちょっと意味がわかりません。 ところで、x86には読み書き実行すべて可能な セグメントというのは存在しないようです。 どうやって実現してるんでしょう? kakushi [2000/06/22 Thu 21:18:34] [210.224.140.11] to celsさん どうもありがとうございます。 大変助かりました。 >Interrupt Listっていうドキュメントがあります。 >過去ログによると、ここのinter60a.zip〜から落とせるようです。 >ftp://ftp.riken.go.jp/pub/simtelnet/msdos/info/ 全部ダウンロードしました。良い情報をありがとうございます。 >最初int 51hを調べたんですがどうも違うっぽいです(^^; >pascalって16進数使えないんでしょうか。 私は、pascalは読んだことがないので、最初はcelsさんと 同じように調べました。 では。 Ichi [2000/06/22 Thu 05:31:05] [210.237.206.42] to しろさん: >> /SECTION:.text,ERWD >末尾の D(discardable:破棄可能)はつけるべきではないと思います。 Dは、(実際の)メモリから破棄可能、つまりスワップしてもよい、 という意味だと理解していたのですが、どうなのでしょうか。 > 皆さん ほかにC(Conforming),I(IOPL)等もあるのですが、よく(特にIが)わかりません。 ご存知の方がいらっしゃいましたら、お教えください。 (検索してもなかなか出てこない...) しろ [2000/06/22 Thu 04:53:54] [210.253.203.178] to Ichi さん > /SECTION:.text,ERWD 末尾の D(discardable:破棄可能)はつけるべきではないと思います。 このフラグが Win95 でどのように扱われているか正確に把握しているわけ ではなく、discardableという単語のイメージからなんとなくなのですが。 Mc.N [2000/06/22 Thu 03:28:47] [210.225.220.210] 3mode ですか。懐かしいですね。 昔、書いた資料ですが参考になれば。 http://homepage1.nifty.com/mcn/dev/3mode.htm ぴょン太 [2000/06/21 Wed 13:41:42] [210.159.27.92] MS-DOSまたは汎用 > ハードウェア > ディスクドライブ用 私も昔にPC98x1で1.44MB formatが読めなくて困った時がありました。 3mode非対応のFDドライブで1.44MB formatを読み書きをするには 物理的な改造(オシレータの交換など)がなければ無理っぽいです。。。 うち [2000/06/21 Wed 12:02:05] [210.162.161.178] 澤口@一升金さん、ありがとうございます。 3モードのドライバーが無くて自分で作ろうと思ってます。 澤口@一升金 [2000/06/21 Wed 01:22:55] [210.190.4.131] 澤口@一升金です。 to うちさん: 1.2MB って NEC PC98 の 1.25MB フォーマットのことですか? あれはチップと 3mode ドライブの組み合わせによるので汎用的 な切り替え方法はないような気がするのですが。(資料が少なく て実はよくわからない) というか、今のマシンでは(もし 3Mode Drive が組み込んであ れば)1.44MB と 1.25MB は自動認識してしまうのではないです か? うち [2000/06/19 Mon 09:10:12] [210.162.161.178] はじめまして、 今度、DOS/Vで、フロッピーディスクを直接制御して、ディスク内容の読み書きをしなければ行けなくなったのですが、1.44MBと1.2MBの切り替えがわかりません。 どなたか、お願いします。 澤口@一升金 [2000/06/19 Mon 08:32:48] [210.190.4.131] 澤口@一升金です。 to cels さん: >最初int 51hを調べたんですがどうも違うっぽいです(^^; >pascalって16進数使えないんでしょうか。 元投稿はたぶん Turbo Pascal ですね。なら、16進表記が できます。この場合、イミディエイト値の頭に '$' をつけます。 51h -> $51 です。 Ichi [2000/06/19 Mon 06:21:03] [210.237.205.238] to しろさん はじめまして。 >下の方で Win98 でのコード領域への書き込みのテストをされていますが、 >デバッガ上で動作を確認されていませんか? いいえ、VC++のインラインアセンブラを使って組み、結果をputsを 使用して出力して確認しました。 ...と思ったら、CSとDSの指すメモリの一致を調べていただけで CSには書きこんでいないことが発覚しました。 修正したら、ちゃんと(?)ページ違反が起きました。 >デバッガ上ではデバッガによるブレークポイントの設定やパッチ当て等 (略) >るはず) 理解しました。 >コード領域への書き込みですが、Win95 ならリンク時にコード領域 (略) >は手元にないので未確認) /SECTION:.text,ERWD で合ってるでしょうか。 通行人 [2000/06/18 Sun 19:57:04] [210.160.41.210] Daisukeさんありがとう。 NASMは現行で対応しているのは分かりました。 MASMって現在の最新のバージョンでも無理なのかな?>>Daisukeさん、その他詳しい人。 Daisuke [2000/06/18 Sun 18:18:40] [210.255.7.95] to 通行人さん >P3でSSE命令を使いたいんですけれど対応している >アセンブラってどんなものがあるんでしょうか? NASM 0.98 以降なら PentiumIII の SSE が使えます。 SSE は午後のこーだのソースが参考になります。 NASM はここにあります。 http://protools.exit.de/ しろ [2000/06/18 Sun 18:01:38] [210.253.200.163] to Ichi さん はじめまして。 下の方で Win98 でのコード領域への書き込みのテストをされていますが、 デバッガ上で動作を確認されていませんか? デバッガ上ではデバッガによるブレークポイントの設定やパッチ当て等 の便宜上、コード領域への書き込みが許可されている可能性があります。 (またこの場合、他プロセスとのページイメージの共有は禁止されてい るはず) コード領域への書き込みですが、Win95 ならリンク時にコード領域 (.text セクション)から read only の属性を除去するだけで可能にな ります。当然この場合、該当領域は他プロセスと共有されません。(NT は手元にないので未確認) 自己書き換えに関しては、ずっと以前、「メモリ保護のあるOSで自己書 き換えをしたい場合は、関数全体をごっそりスタックにコピーして書き 換え、実行するとよい。そういった用途のためにそれらのOSではスタッ ク領域は実行可能とマークされている。」といったことをどこかで読ん だことがあります。 通行人 [2000/06/18 Sun 16:53:58] [210.197.78.140] P3でSSE命令を使いたいんですけれど対応している アセンブラってどんなものがあるんでしょうか? cels [2000/06/18 Sun 16:19:22] [210.149.131.143] > kakushi さん Interrupt Listっていうドキュメントがあります。 過去ログによると、ここのinter60a.zip〜から落とせるようです。 ftp://ftp.riken.go.jp/pub/simtelnet/msdos/info/ それによると、 AX=13h/int 10hはビデオモードの変更 AX=0Bh/int 33hはマウスカウンタの読み込み のようです。 最初int 51hを調べたんですがどうも違うっぽいです(^^; pascalって16進数使えないんでしょうか。 kakushi [2000/06/18 Sun 13:57:03] [210.224.140.11] こんんちは。相当昔に書き込みをしたことのあるkakushiです。 今回もまた質問をしに参りました。 私は今、メガデモを作っている最中で、いろいろな所から(主に海外)ソースをダウンロードしては解読という作業をやっています。 その中で、pascal中でインラインアセンブラを使用しているソースがあるのですが、そのインラインアセンブラで何をやっているのかさっぱり分からないので誰かに助けてもらおうと思い、書き込みをしています。 以下にそのアセンブラの部分をそのまま転載します。 ライセンスは完全にフリーなので問題はないと思います。 @ asm mov ax,19; int 16; end; A asm mov ax,11; int 51; shr cx,1; add c,cx; add r,dx; end; 上記2つです。一番分からないのはINT 16 と INT 51です。 できる限り調べてみたのですが、これが何を意味するのか分かりませんでした。 どなたか教えてくだされば幸いです。 よろしくお願いいたします。 ルナ [2000/06/18 Sun 08:05:20] [210.172.135.226] あぅ〜。 バカですね、私って。ヾ(´▽`;)ゝエヘヘ 「H」が、抜けてるだけなんて・・・。 戻っていたんでふね・・・。 ありがとうございました。 bochs [2000/06/17 Sat 23:31:27] [210.234.15.48] > ルナさん メインルーチンの int 21 を int 21h にすれば動きますよ(苦笑) ルナ [2000/06/17 Sat 20:57:40] [210.172.135.202] はじめまして。 NASMを使ってアセンブラを勉強しています。 ディスプレイに文字列を表示するところまでは、 自力でできたのですが。 サブルーチン的なものは、どのようにやればいいのか わかりません。 もしかしたら、ヘルプに書いてあって見逃しているかも 知れないのですが、いかんせん英語が・・・・。 下のは、メインルーチンからサブルーチンをCALLして、 「うひょーー」「俺様素敵」と表示して、 メインルーチンに戻ってくるように書いたつもりなんですが。 じぇーんじぇーん戻ってきてくれない・・・。 どうやったら、メインルーチンに戻れるんでしょうか。 アセンブラは、CASL以外やったことなくて・・・。 (しかも、数年前) --------------------------------------------- org 100h section .text Start: call SubProc mov ah,09h mov dx,Message3 int 21 ret SubProc: mov ah,09h mov dx,Message1 int 21h mov dx,Message2 int 21h ret section .data Message1 db 'うひょー!',0DH,0AH,'$' Message2 db '俺様素敵',0DH,0AH,'$' Message3 db 'メインルーチンに戻ってきたよ$' 澤口@一升金 [2000/06/16 Fri 23:04:33] [210.190.4.131] 澤口@一升金です。 to AYA さん: TASM なら、 TASM /? でコマンドラインスイッチオプションが表示 されます。 ただ、これだけでは解読がつらいので、ちょっと説明。 /j*** グローバルなディレクティブを指示します。 ・SMART スマートリンク(使用されていない PROC はリンクしない)の指定 ・JUMPS ジャンプを最適化(ショートジャンプで到達不能なときロングジャンプ に置き換える) ・LOCALS ローカルシンボル(PROC 内だけで有効なシンボル)を許可する /u*** アセンブラバージョンを変更します ・M520 って MASM 5.2 の事? /m*** 前方参照が解決されない場合何度パスするかの指示です。 ・8 TASMは本来 1 パスコンパイラなのですが、8 パスまで実行。 /t アセンブル成功時にはメッセージを表示しない、という指定。 /l リスティングファイルを生成する指示 以上でわかる通り、コマンドスイッチは本質的に関係なさそうですね。 とはいえ、いくらなんでもソースが説明と不整合すぎます。雑誌編集の 手違いで全然別のソースを掲載してしまったのではないでしょうか。 AYA [2000/06/15 Thu 14:34:30] [203.141.89.166] >質問の2.と4.は MASM 6.00(LASM)以上で使用可能な >構造文です。 >TASM では通らないはずです。 なんと!! どうもありがとうございます。> Daisuke-san 雑誌ではTurbo Assemler2.01 使用としっかり書かれていたので 疑いもしませんでした。教えて頂かないとずっと悩み続けるところ でした・ 早速MASM6.0を人から借りてアセンブルしてみましたが これまたエラーが続出しています。 TASM では雑誌の通り、 /jSMART /jJUMPS /uM520 /jLOCALS /m8 /t /l といった オプションを付けていたのですが、MASMを使う場合はこれに 相当するオプションが必要になるのでしょうか?? これまた初心者質問で申し訳ありません。どなたか何でも いいので教えて頂けるとうれしいです。 tiger [2000/06/15 Thu 09:24:01] [210.232.207.194] ありがとうございました。 ファイルフォーマットの資料がありました。 澤口@一升金 [2000/06/15 Thu 03:05:07] [210.190.4.131] 澤口@一升金です。 to Ichi さん: >ふと思ったこと。同じアプリを複数起動すると、コード部分が >共有される、という話を聞いたことがあります。 原典はこれなのかなぁ? ↓ http://support.microsoft.com/support/kb/articles/Q103/6/44.asp の真ん中あたりに (Another interesting side note: Remember that even if there are multiple instances of an application, if they are able to load at their default virtual address spaces, the virtual address pages of the different applications' executable code will map to the same physical memory pages.) と書いてあります。つまり、 Win32 では address space としては 別々にとられるけど、実行コードの物理メモリの配置は同じだ、と。 だとすれば2重起動のチェックがいりますね。 Daisuke [2000/06/14 Wed 19:50:38] [210.255.7.36] to AYA さん 質問の2.と4.は MASM 6.00(LASM)以上で使用可能な 構造文です。 TASM では通らないはずです。 AYA [2000/06/14 Wed 19:37:28] [203.141.89.168] 始めまして。 アセンブラ全然わからないのですが、今ちょっと困っているので 是非質問させてください。 雑誌でPCIインタフェースを持つメモリカードのドライバが 付録についていました。雑誌ではTASM2.01 を使用したと書かれていました。 手元に(人に借りただけですが) TASM4.0J Release2 があるので それでアセンブルしてみたところ、山のようにエラーがでてしまって マニュアルもないのでどうすることもできずに困っています。 雑誌の通りに TASM /jSMART /jJUMPS /uM520 /jLOCALS /m8 /t /l XXXXXX.asm と実行しました。 エラーは次のようなところででています。 1: MOV AX,writeData や MOV ECX,longWords です このような writeData などはどこかで 定義されるのでしょうか? また、そのように定義してあるものはどこかでInclude?のような ことをしないのでしょうか? 2: .REPEAT .UNTIL BX >(2000H+4*17-1) の記述で llegal instruction といって怒られてしまいます。 この記述の仕方は間違っているのでしょうか? 3: 関数の頭で Uses ax のような記述があります。 例えば maskNMI_ PORC C NEAR PUBLIC Uses ax ここでは Extra characters on line といったように 怒られてしまいます。 4: . (dot)で始まる命令は皆 エラーがでてしまいます。 例えば .IF CARRY? .ELSE など・・ 雑誌では2.01 を使用したと書かれていますが、4.0 では バージョンが違いすぎてだめなのでしょうか? それとも 私の使い方(認識の仕方)が間違っているのかもしれません。 今は周りに聞く人が誰もいなく困っています。何でもいいので どなたかアドバイスを頂けるとうれしいです。 よろしくお願いします。 澤口@一升金 [2000/06/14 Wed 18:39:04] [210.190.4.131] 澤口@一升金です。 to tiger さん: 質問の意味がよくわからないのですが、多分「ファイルフォーマット のドキュメントを探しています」の意味ですか? 6/13 に Daisuke さんが紹介された ↓ http://protools.exit.de/ にドキュメントのリンクもいろいろあります。 あとはこことか。 ↓ http://magic.hurrah.com/~sabre/os/S6BinaryExecutables/ tiger [2000/06/14 Wed 17:58:46] [210.232.207.194] WINDOWSのEXEファイル(NEフォーマット & PEフォーマット)を探しています。どなたかご存知のかたいらっしゃいませんか? まさお [2000/06/14 Wed 08:51:56] [129.60.33.110] 澤口@一升金さん、どうもありがとうございます。 参考にさせていただきます。 Ichi [2000/06/14 Wed 05:37:33] [210.237.205.233] >self modifying code (Windowsでの話) ふと思ったこと。同じアプリを複数起動すると、コード部分が 共有される、という話を聞いたことがあります。 これが本当なら、自己改変コードを実行する前に二重起動の チェックをしないといけないのですが、どうなのでしょうか。 snts [2000/06/14 Wed 02:51:16] [63.12.73.148] どうもありがとうございます、澤口@一升金さん。 おかげさまでmingw32とnasmを組み合わせてWinAPIを呼び出せるようになりました。 感謝感謝。 p.s. ご希望があればそのソースを掲載したいと思います。 Daisuke [2000/06/13 Tue 21:43:53] [210.255.1.178] おひさしぶりです。 今日はとてもいい感じのサイトを見つけました。 コンパイラ・アセンブラ等がかなりありますよ。 http://protools.exit.de/ よしお [2000/06/13 Tue 17:02:42] [210.253.67.135] 澤口@一升金さんの紹介した、ホームページみて 謎は解けました、 "C"が無かったようです。 お騒がせして。すいません 澤口@一升金 [2000/06/13 Tue 13:47:59] [210.190.4.131] 澤口@一升金です。 to よしおさん: 呼び出せないとは? エラーでも表示されるのでしょうか。 澤口@一升金 [2000/06/13 Tue 12:07:00] [210.190.4.131] 澤口@一升金です。 to snts さん: ここのサンプルソース(invoke を使用した場合と使用しない場合) を読むと明らかですが、適切な順序とサイズでスタックに引数を セットしてくれるのですね。 ↓ ftp://ftp.microsoft.com/developr/masm/kb/q73/4/07.txt 例の場合で言えば、まずイミディエイト値の 0 が push されて、 次に offset title というアドレス値が push されて・・・・ 最後に call MesageBoxA が生成される、と。 澤口@一升金 [2000/06/13 Tue 09:18:06] [210.190.4.131] 澤口@一升金です。 to まさおさん: 最小限のサンプルってこんな感じです。 ↓ http://www.cs.ius.indiana.edu/LZ/RWISMAN/WEB_DOCS/C335/HTML/Chapter7.htm 澤口@一升金 [2000/06/13 Tue 09:06:05] [210.190.4.131] 澤口@一升金です。 Dirac さん、Ichi さん、ご指摘ありがとうございました。 わたしのリサーチ不足でした。 言われてみて、改めて「self modifying code」でネット 検索したら、いやー出てくる出てくる。 Ichi [2000/06/13 Tue 06:53:47] [210.237.206.26] http://www7.freeweb.ne.jp/computer/ichi98/ >Windows では実行中のコードは OS の保護下にあり、 >書き換えや新たな生成はできません。 ページ単位では保護されていなかったような気がします。 また、Win98での実験では、CSの指すメモリとDSの指すメモリは 完全に重なっていました。(つまり、DSを通していじればよい) --実験-- ; data seg.に書きこんだ値がcode segに ; 反映されていれば一致していると判断 dummy dd 0 mov eax, 01234567h ; 第一の値 mov ds:[offset dummy], eax cmp cs:[offset dummy], eax jne different mov eax, 89abcdefh ; 第二の値 mov ds:[offset dummy], eax cmp cs:[offset dummy], eax jne different same: ; 一致 different: ; 違う pppk [2000/06/13 Tue 06:38:11] [210.224.104.142] 澤口@一升金さん、Diracさん、レスありがとうございます。 外出していたので、返事が遅くなってしまいました。m(_ _)m to 澤口@一升金さん: その手があったんですね。 ただこの方法だとどこに配置されるかOSまかせなので、、、。 前回の私の書き込みが悪かったのですが、 例えば、ループの先頭ラベル位置を16バイト単位に揃えるとか という作業をコンパイラではしてくれなさそうなので (してくれてる?)コード実行時に揃えてしまおうと思ったわけです。 to Diracさん: 教えていただいたHPをざっと見てきました。 ここ、良いですね~。 有益な情報も多いですが、ためにならない(?)話が グッドです(^^;。 で、VirtualProtectですが、ページ属性を実際に変更して いるだけなのか、実行属性のページに一時コピーを取ってるのか、 ...うーん。 これ以上悩んでも仕方がないので、速度向上がみられるかどうか、 実際に色々と試してみようと思います。 お二方、丁寧なレス有難うございました。 snts [2000/06/13 Tue 03:17:03] [63.12.73.94] だいぶ前に書き込んだ覚えがありますが、一応はじめまして。 masmのinvokeって実際にはどういったことを行っているのでしょうか? 「invoke MeassageBoxA 0, offset msg, offset title,0」 を例に教えていただけると幸いです。 よしお [2000/06/12 Mon 23:13:50] [210.253.67.115] はじめまして、 DDKについている、 MLで、サブルーチンを作りました。 それでOBJをVC++でりんくして サブルーチンを呼び出しても、呼び出せません、 わかるかたいたら、おしえてください。 まさお [2000/06/12 Mon 17:43:41] [129.60.33.110] 澤口@一升金さん、どうもありがとうございます。 正しくできているかどうか不安ですが、 リンクしてEXEの生成はできています。 アセンブラ化した関数内で引数を参照しているところがダメなようです。 (debugモードで見てみました) どこかに簡単なCのソースとそれに対応したNASMのソースってありませんか? もしご存知でしたら、みなさま情報をよろしくお願いします。 とりあえず1つ動いてしまえば、あとは切った貼ったでなんとか作っていこうなんて 考えています。(^^;; では、引き続きよろしくお願いします。 Dirac [2000/06/12 Mon 12:49:11] [160.15.30.2] はじめましてDiracといいます。以後お見知りおきを…。 To pppkさん > Cでダイナミックにマシン語コードのサブルーチンを > 作成展開し、呼び出すということは可能なのでしょうか? つまり、あるメモリ領域にマシン語コードのサブルーチンを展開して、 そのメモリ領域の先頭アドレスに対してCALL命令を呼んでやろう、ということですか? であれば、結論からいえば答えは「Yes」です。ただ普通にやってもできないようです。 澤口@一升金さんの言われる通り、基本的にコードはすべてOSの保護下にあります。 僕は以下のサイトで情報を得ました。紹介しておきますね。 やねうらおさんのホームページ「BM98'S ROOMつう」 http://www.sun-inet.or.jp/~yaneurao/ ここのホームページの「Road To Super-Programmer」の過去ログ、第97回のところに pppkさんの探しておられる情報があると思います(見当違いだったらすいません)。 ちなみにそのページのアドレスは、 http://www.sun-inet.or.jp/~yaneurao/rsp/rsp90to97.html です。ちなみにこの方法はWindows2000では使えないらしいです。VirtualAlloc()を使うと Windows2000でもうまくいくようです(未確認ですが)。あ、APIの説明についてはヘルプ ファイルを当たってみてください。 澤口@一升金 [2000/06/12 Mon 10:21:22] [210.190.4.131] 澤口@一升金です。 to まさおさん: >置換させようとしているのですが、この段階でつまづいています。 どういう操作をしてどうつまづいているのでしょうか。 ・Nasm で OBJ ファイルの生成の仕方がわからない ・OBJ を VC++ のプロジェクトに含める方法がわからない ・VC++ からのサブルーチン呼び出しがわからない ・サブルーチンへの引数渡しと返値の設定がわからない どれでしょう? まさお [2000/06/12 Mon 09:50:46] [129.60.33.110] 澤口@一升金さん、どうもありがとうございます。 書き忘れてましたが、AMDのSDKはDLしてあります。 英語なので、ところどころしか見ていませんが、、、。 対象のプログラムは信号処理関係です。処理に時間がかかっているところは コーディングした者から教えてもらうことになっています。 その部分を重点的に高速化すること、そしてAthlon固有の機能を使うことも 目的の1つになっています。そこでNASMを使うのがいのでは?となりました。 まずは、いろいろサンプルを探してきて参考にして小さな関数をアセンブラで書いて 置換させようとしているのですが、この段階でつまづいています。 みなさま、引き続きアドバイス等、よろしくお願いします。 澤口@一升金 [2000/06/12 Mon 09:25:15] [210.190.4.131] 澤口@一升金です。 to pppk さん: Windows では実行中のコードは OS の保護下にあり、 書き換えや新たな生成はできません。 DOS ならできますが、VC++ 5.0 ではDOS アプリは作 成できません。 強いてやるなら該当サブルーチンを別ファイルの DLL とか EXE,COM ファイルの形式にしておき、それをデー タファイルとしてバイナリ編集を C プログラムからかけて やり、編集、ファイルセーブ後に実行させてやることでし ょうか。(でも、呼び出しオーバーヘッドは大きそうだ) pppk [2000/06/11 Sun 16:41:28] [210.224.104.136] 始めて投稿します。 只今インラインアセンブラでコードの最適化を 図っているところですが、コードアラインに困っています。 Cでダイナミックにマシン語コードのサブルーチンを 作成展開し、呼び出すということは可能なのでしょうか? コンパイラは、MS VC++5Pro です。 なにぶん、初心者なものでおかしな質問かもしれませんが 代替案などでもあればぜひご教授ください。 宜しくお願い致します。 澤口@一升金 [2000/06/10 Sat 01:36:55] [210.190.4.131] 澤口@一升金です。 to まさおさん: 肝心なツールを忘れてました。SDK とかライブラリはやはり 準備しておくに越したことはないでしょう。 ↓ http://www.amd.com/swdev/swdev.html もっとも、 Athlon 固有の機能を使うのでなければ VC++ の インラインアセンブラだけで、こんなツールやら NASM やらは 必要ありません。 ところで、C関数のどこでどれだけ遅くなっているのかはピン ポイントで特定できているのでしょうか。(そもそも、何をす る関数なのでしょうか) 浮動小数点演算とかデータ転送という話でしたら、VC++ の最 的化機能は非常に高度ですので、単にアセンブラで置換しただ けでは速くはならないことが圧倒的に多いです。 まさお [2000/06/09 Fri 17:01:03] [129.60.33.110] 澤口@一升金さん、どうもありがとうございます。 現在、C言語で書かれていてVC++6.0のプロジェクトになっている プログラムがあるのですが、処理に時間がかかっているので一部の関数を アセンブラにしようと思っています。(速くなるかな?) その際、使っているPCのCPUがAthlonなので、、、ということなんです。 自分なりに調べてみたのですが、理解力に乏しいもので ここで何かヒントでもいただけたらと思いました。 みなさま、引き続きよろしくお願いします。 澤口@一升金 [2000/06/09 Fri 16:16:55] [210.190.4.131] 澤口@一升金です。 to まさおさん: 何を、どう高速化したいのかいまいちわかりませんが、とりあえず ドキュメンテーションに目を通して、サンプルプログラムを走らせて みるところから始めましょう。 ↓ http://www.amd.com/products/cpg/athlon/techdocs/index.html http://www.amd.com/products/cpg/bin/ Athlon でアセンブラによる高速化をはかる、ということはドライバ から画像・音声ファイルの圧縮・解凍モジュールを丸ごと自作す ることになります。当然それらの基礎アルゴリズムもマスターしな ければ。 カレーライス [2000/06/09 Fri 10:34:38] [163.209.131.113] Ichiさんへ・・ どうもありがとうございました。 今後もよろしくおねがいします。 でわ・・ まさお [2000/06/08 Thu 17:22:49] [129.60.33.110] C関数のアセンブラ化 初心者なのでうまく説明できるか不安ですが、質問があります。 C言語の関数の一部をAthlon向けのアセンブラにして高速化をしたいのですが よくわかりません。 とりあえずは必要なツール、できれば手順を教えていただければ幸いです。 ではよろしくお願いします。 現在あるもの CPU: Athlon OS: Win98 コンパイラ: VC++ 6.0 アセンブラ: NASM 0.98 Ichi [2000/06/08 Thu 06:23:42] [210.237.206.27] >>次に読み込むべき命令が蓄えられているだけではないのですか?? >それは読みこみキャッシュです。 すみません、パイプラインでした。 読みこみキャッシュとはちょっと違います。 Ichi [2000/06/08 Thu 05:50:15] [210.237.206.27] http://www7.freeweb.ne.jp/computer/ichi98/ to カレーライス氏: >>キャッシュメモリの影響を考えると、同一アドレスに >>対する連続したアクセスが 1 つのアクセスにまとめら >>れてしまう心配があります。あるいは memory write >>が OUT 命令の直後ではなく、かなり後に遅延される >>可能性があります。 >キャッシュメモリはCPUの命令に対してどのような >影響をもっているのでしょうか?? >次に読み込むべき命令が蓄えられているだけではないのですか?? それは読みこみキャッシュです。書きこみもキャッシュされます。 (そう設定すれば)キャッシュされて、メインメモリ(動作が遅い)への 書きこみが遅延されて、一気に多めのデータを書きこむようになります。 http://www.intel.co.jp/jp/developer/vtune/v4/cbts/refman.htm のインテル・アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル あたりを読めばわかると思います。 カレーライス [2000/06/07 Wed 12:38:19] [163.209.131.125] AFさんへ >キャッシュメモリの影響を考えると、同一アドレスに >対する連続したアクセスが 1 つのアクセスにまとめら >れてしまう心配があります。あるいは memory write >が OUT 命令の直後ではなく、かなり後に遅延される >可能性があります。 キャッシュメモリはCPUの命令に対してどのような 影響をもっているのでしょうか?? 次に読み込むべき命令が蓄えられているだけではないのですか?? >ただ、この時期も高速化と DOS メモリの拡張に心血 >を注いでした人はいまして、問題が無さそうに見えれ >ば V-RAM エリアをキャッシュ可能領域にしたり、UMB >領域として RAM をマップしてしまう事もありました。 キャッシュ可能領域にするとは・・一体?? キャッシュや、ページングなどに関することは 486のCPUについてかかれている本を読めばわかるでしょうか?? たびたび質問させてもらっていろいろわかって楽しいです。 また質問させてもらいましたが^^;) どうもすみません・・ 澤口@一升金 [2000/06/06 Tue 22:11:05] [210.190.4.131] 澤口@一升金です。 to JUCER さん: PCI といえば、ここが本家サイトです。ドキュメントが入手できます。 PCIDIAG Program ってのがお探しのものではないかと思うのですが。 ↓ http://www.pcisig.com/tech/docs.html PCI バスの詳説は、CQ出版社から出ている次の本が参考にな ると思います。 ・トラ技 Special No.65 PCIバスの基礎と応用 ・OpenDesign No.7 PCIバスの詳説と応用へのステップ AF [2000/06/05 Mon 00:35:04] [210.233.160.2] あっ一寸失礼、付け足します。 > UMB > 領域として RAM をマップしてしまう事もありました。 こっちの方は i386 からあるページング機能です。キャッシュ 関係無しです。 AF [2000/06/05 Mon 00:11:50] [210.233.160.2] > しかし・・このi486以降のCPUから命令どおりに > メモリにアクセスされる保証はなくなったというのは > どういうことなんでしょうか?? キャッシュメモリの影響を考えると、同一アドレスに 対する連続したアクセスが 1 つのアクセスにまとめら れてしまう心配があります。あるいは memory write が OUT 命令の直後ではなく、かなり後に遅延される 可能性があります。 誤解のないように言うと 本来 V-RAM エリアはキャッシュエリアから外されて いるので問題は起きないはずです。 ただ、この時期も高速化と DOS メモリの拡張に心血 を注いでした人はいまして、問題が無さそうに見えれ ば V-RAM エリアをキャッシュ可能領域にしたり、UMB 領域として RAM をマップしてしまう事もありました。 カレーライス [2000/06/04 Sun 11:27:18] [163.209.2.1] AFさんへ・・ 詳しいプロシージャまで書いていただいてありがとう。 PC−9801NX/CなのでCGウインドウは大丈夫です。 I/Oアクセスで済ますのと殆ど実質的なクロック数の差が ないとは知りませんでした。意外ですね。 CGウインドウを使うのがベストかと思っていましたので。 しかし・・このi486以降のCPUから命令どおりに メモリにアクセスされる保証はなくなったというのは どういうことなんでしょうか?? かなり気になったので教えてください。 rib8m [2000/06/04 Sun 02:45:24] [210.227.197.238] はじめまして。最近アセンブリはじめました、rib8mです。 早速質問なのですが・・ 今、VCでつかえるDLLをアセンブラで作りたいのですが、なぜかうまくいきません。 LoadLibraryがたまにNULLを返してきます。 ↓どこがいけないのでしょうか? ;nasmw -f obj dll.asm ;alink -oPE dlltest.obj WIN32.LIB -subsys gui -dll global asmfunc export asmfunc extern MessageBoxA bits 32 ..start: ;エントリポイント? mov eax, 1 ;戻り値? ret 4 * 3 asmfunc: push dword 0 push dword messeiji push dword messeiji push dword 0 call MessageBoxA ret messeiji: db 'めっせーじ', 0 どなたかDLLの作り方をご存知でしたら、教えていただけないでしょうか? 澤口@一升金 [2000/06/04 Sun 00:19:52] [211.0.69.33] 澤口@一升金です。 to TAZZ さん: SPARC はレジスタバンク構成をとっていますから、役割はプログ ラマの責任で決まるものではないでしょうか。 わたしは SPARC はいじったことがないので、データシートを読ん だ方が詳細がわかるでしょう。元質問はどの SPARC Processor の ことかわかりませんが。 ↓ http://www.sun.com/microelectronics/microSPARC/ JUCER [2000/06/03 Sat 23:21:56] [63.12.180.27] はじめまして PCIバスに接続されている情報(VendorID,DeviceID等)を取得したいのですが,ほとんど情報を持っていません。 PCIデバイスの情報を取得するにはint 1Aで出来ると聞いたのですが これ以上の情報を持っていないのでどんな値を設定してあげればればよいのか 分かりません。 又,int 1Aを使う以外に直接ポートにアクセスしても出来ると思うのですが この情報もありましたらお願いします。 (最終的にはポートにアクセスする方法で実現させたいと考えています。) 参考になるようなHPやサンプルコードありましたら教えて下さい。 直接はアセンブラには関係無いのですが適切な場所が見つかりませんでした。 少し場違いな質問かも知れませんが宜しくお願いします。 Daisuke [2000/06/03 Sat 04:14:00] [210.238.175.163] AFさん情報ありがとうございます。 皆さんの話題はPC-98の話題が結構多いようですが VSYNC & TIMER あたりは MASTER.LIB のソースを読んで勉強した 覚えがあります。かなり参考になるかも?(NECRTとかも) Vector のDOSエリアにいまでもあったような・・・ AF [2000/06/03 Sat 01:52:28] [210.233.160.2] カレーライスさんへ > VSYNCにかんしては・・ > モードフリップフロップ1でコードアクセスモードに > 変更してから実行することで解決していると思います。 失礼しました。CG Window を通したフォント設定は後ろに つけたリストの様になります。VSYNC 待ちは省略します。 でも次の様な理由であまり、CG Window 経由のフォント 設定はしません。 ・CG Window が無い機種がある. 注: リファレンスモデルとも言える(た) PC-9801VM で使えない. ・全て I/O アクセスで済ますのと殆ど実質的なクロック数の差が無い. ・i486 以降の CPU から命令通りにメモリにアクセスされる保証は 無くなった. Daisuke さんへ > DOS のアセンブラにオブジェクト指向プログラムができるソフトが TASM Ver.3 以降で対応機能あります。 (私は使ったことが無い) ;漢字フォントを設定する ;IN ;dx 漢字コード ;ds:bx フォントパターン ptr ;RETURN ;ds:bx 読み進んだフォントパターン ptr PROC setkfont push di push es cld mov ax,VRAMSEG ;VRAMSEG = 0A000H mov es,ax mov al,CRTMFF_KNJ+1 ;CRTMFF_KNJ = 00AH out CRTMFF,al ;CRTMFF = 068H mov ax,dx out CGKNJLO,al ;CGKNJLO = 0A1H mov al,ah mov ah,CGHISUB ;CGHISUB = 020H sub al,ah out CGKNJHI,al ;CGKNJHI = 0A3H mov cx,CGKNJSIZE ;CGKNJSIZE = 010H mov di,CGWINDOW+1 even @@l1: mov al,CGKNJLR ;CGKNJLR = 020H out CGKNJLC,al mov ah,[bx] mov [es:di],ah xor al,al out CGKNJLC,al mov ah,[bx+1] mov [es:di],ah add bx,2 add di,2 loop @@l1 xor cx,cx ;システム共通域 CG-ROM アクセスモードを mov es,cx ;調べてアクセスモードを元に戻す ;SWCRTFLG = 053CH, SWCRTFLG_D1C0 = 008H test [byte es:SWCRTFLG],SWCRTFLG_D1C0 jnz @@j1 mov al,CRTMFF_KNJ out CRTMFF,al @@j1: pop es pop di ret ENDP カレーライス [2000/06/02 Fri 13:43:23] [163.209.131.122] すみません・・ したの書き込みですが・・ ビットマップモードに変更してからのまちがいです。 処理をした後に、コードアクセスモードに変更しなおす というのをかきまちがえてしまいました・・^^;) カレーライス [2000/06/02 Fri 13:41:22] [163.209.131.122] AFさんへ・・ VSYNCにかんしては・・ モードフリップフロップ1でコードアクセスモードに 変更してから実行することで解決していると思います。 処理をしてから、再びビットマップモードに変更しなおし ています。 A9Hに文字パターンを書き込むやり方以外に、 CGウインドウを用いるやり方を知りたいため、 書き込みさせていただきました。 CGウインドウにデータを書き込むにあたって、 CGウインドウにデータを書き込む前にA1H、A3Hに文字コードを 書き込むのか・・それとも、その逆なのか・・?? ひょっとして・・やり方そのものがちがうのか?? この辺で迷っています。 ご存知でしたらやり方を教えてください。 お願いします。 TAZZ [2000/06/02 Fri 13:26:31] [202.230.45.2] たびたび済みません。 SPARCの32個のレジスタの役割を知りたいのですが、 誰かご教授して頂けないでしょうか。 レジスタ名対応表 %0 ... %g0 %1 ... %g1 %2 ... %g2 %3 ... %g3 %4 ... %g4 %5 ... %g5 %6 ... %g6 %7 ... %g7 %8 ... %o0 %9 ... %o1 %10 ... %o2 %11 ... %o3 %12 ... %o4 %13 ... %o5 %14 ... %sp (または%o6) %15 ... %o7 %16 ... %l0 %17 ... %l1 %18 ... %l2 %19 ... %l3 %20 ... %l4 %21 ... %l5 %22 ... %l6 %23 ... %l7 %24 ... %i0 %25 ... %i1 %26 ... %i2 %27 ... %i3 %28 ... %i4 %29 ... %i5 %30 ... %fp (または%i6) %31 ... %i7 %g0、%sp 、%fp なら分かるのですが、%g1、%o0、%i0などについては 分かりません。レジスタの役割を把握したいので、宜しくお願いします。 Daisuke [2000/06/02 Fri 06:15:13] [210.238.175.130] また書き込みします。 DOS のアセンブラにオブジェクト指向プログラムができるソフトが あるらしいのですが、どなたか知っている人いませんか? 話はそれますが Win98 DDK の MASM 6.11d は WDOSX があれば PC-DOS 等で動かせます。変換時にエラーが出る個所をバイナリ ディタなどで書き換えればOK AF [2000/06/02 Fri 00:30:36] [210.233.160.2] はじめまして、 しばらく前から覗いていたのですが、ちょっと指がうずくの 書き込みます。 カレーライスさんへ > 第2バイト、第1バイトー20Hを書き込むとCGウインドウに > 文字パターンが読み込まれるようですが、書き込みの仕方が > わかりません・・ PC-98x1 のユーザー定義文字の設定は ・VSYNC 待ち HSYNC 待ちでもいいのですがちょっとテクニック必要 ・Port 68H(CRT Mode FF) ・WorkArea[0h:53ch] が関連しています。これらはちゃんと処理していますか ? # 昔は VSYNC 割り込みをトラップしてユーザー定義文字を # アニメーションする常駐ソフト EARTH とかあったのですけど # Vector で見かけないなぁ、私の手元にも試しで作った # フォントをアニメーションするプログラムがあったりします。 Daisuke [2000/06/01 Thu 22:15:03] [210.238.175.183] はじめまして。 Win98 DDK の MASM 6.11d が PC-DOS 環境で動きました。 PharLap のエクステンダが無くても動きます。 動かし方は、また後日書き込みします。(知りたい人がいれば) MM-santa [2000/05/31 Wed 22:42:56] [203.180.144.117] >コブラ諜報省さんへ 飛び先のラベルエラーというよりも その前の行の16進数値は、 頭に0(ゼロ)をつけないと ラベル(?)として認識されるのでは。 「cmp bh, 0ffh」 と書けば、正しくコンパイルされると おもいますが。 (間違ってたら、すみません) カレーライス [2000/05/31 Wed 12:58:50] [163.209.131.108] PC−9801に関しての質問なんですが、 KCGにユーザー定義文字を書き込みたいんですが、 CGウインドウをを使うやり方がわからないので書かせて もらってます。I/OアドレスA1H、A3Hに文字コードの 第2バイト、第1バイトー20Hを書き込むとCGウインドウに 文字パターンが読み込まれるようですが、書き込みの仕方が わかりません・・ CGウインドウはアドレスA4000Hからで、ユーザー定義文字の 場合は奇数のアドレスのみなのもわかっているんですが・・ 本にCGウインドウに書き込むやり方が のっていなかったもので・・ どうかご存知の方教えてください。 コブラ [2000/05/29 Mon 18:58:52] [210.151.246.77] お騒がせしました。 cmp bh, ffh のところ、 cmp bh, 0ffh に修正したら巧く行きました。 コブラ [2000/05/29 Mon 14:48:03] [210.151.246.77] 諜報省 VC++ Ver6.0 を使ってます。 自分の使ってるマシンのベンダー名を判別する必要に迫られ、 試しに以下のコードをインラインで記述し、既存のC関数に 組み込んでコンパイルしましたが、結果は "error C2443: この命令には同じサイズのオペランドが必要です。" 等という惨憺たるものでした。 コンパイラが出力したこのメッセージが該当箇所として指し示す場所は、 ソースの54行目でありまして、 int getver(){ int r=0; __asm { pushad mov ah, 30h int 21h ; cmp bh, ffh je pc98 mov r, 01h popad ret pc98: mov r, 00h popad ret } // return r; } それは、 cmp bh, ffh je pc98 の部分の "je pc98" のニモニックに対してエラーを検出した と報告しております。 しかし、je 命令のオペランドは pc98 としてちゃんとジャンプ 先ラベルとして指定してありますし、長さもジャンプ元と同じ です。 何故、こんなエラーが出力されるのでしょうか? これは Win32 SDK で __asm {} 組み込みした事による副作用 なのでしょうか? 何方か教えて頂けませんか? arm [2000/05/28 Sun 03:59:11] [211.5.12.54] Analysis of Object File Formats for Embedded Systems PharLap簡易OMFかどうかはわかりませんが、元々のOMFはIntelのものではないかと思います。 上記URLにPDFファイルがあります。基本的な構造は同じかもしれません。 Intelのサイトってかなり使えます。 http://support.intel.com/support/search.htm で categories から All Intel Site を選んで OMF を検索すると出てきます。 http://support.intel.com/support/processors/i960/devtools/INTELHEX.htm に、HEXファイルのフォーマットもあるようです。 nvaca [2000/05/28 Sun 00:44:16] [210.131.1.97] nvacaworks 現在、PharLap-簡易OMF386をリンクしてexpを吐くリンカを作成しようと試みています。 以前の書き込みで、EXPの形式についてはわかったのですが、PharLap簡易OMFのフォーマットをもし知っていたら教えてください。また、PharLapの386LIBのLIBの形式などももしよろしければ教えてください。 パラオ [2000/05/27 Sat 01:01:02] [210.250.247.105] 澤口@一升金さん アドバイスありがとうございました。 大変、参考になります。 ASICは高嶺(値?)の花ですね。 澤口@一升金 [2000/05/26 Fri 12:07:34] [211.0.69.33] 澤口@一升金です。 to パラオさん: NEC の V20 から V55 に至るシリーズが入手性がいいんじゃ ないかと思います。 あとはインテルの 80186,80188,80386EX あたりですか。 AMD にも組み込み用のコントローラがあったような。 お金に糸目を付けなければ ASIC の CPU コアとしても販売 されていますから、いくらでも自分でバリエーションが作れ ます。 パラオ [2000/05/25 Thu 23:34:59] [210.250.247.185] 8086互換のワンチップマイコンにはどのようなものが あるのでしょうか? どなたか、ご紹介ください。 TAZZ [2000/05/25 Thu 14:15:32] [202.230.45.2] たびたび書き込みさせて頂いてます。 アセンブラ歴2週間のTAZZです。 現在アセンブラを一生懸命勉強していますが、 難しいですね(^-^; 下のインラインアセンブラを解読できれば、 あとのアセンブラ処理も解決できそうな気がするので、 誰かご教授願います。 分からない事は、 1)".section .fixup,\"ax\"\n"は何を意味するかが分からない。 fixupというセクション名にAXレジスタをセットしたという事?? う〜ん、いまいち、ここの文法が掴めていないんですよ。。。 2)1の命令の後に続く、 " .align 4\n" \ " .long 1b,3b\n" \ ".previous" \ も全く分からないです。何をやってるのだろう。。 お恥ずかしいですが、誰かこの処理を説明してください。 宜しくお願いします。 (__put_user_asmという名前のインラインアセンブラです) __asm__ __volatile__( \ "1: mov"itype" %"rtype"1,%2\n" \ "2:\n" \ ".section .fixup,\"ax\"\n" \ "3: movl %3,%0\n" \ " jmp 2b\n" \ ".previous\n" \ ".section __ex_table,\"a\"\n" \ " .align 4\n" \ " .long 1b,3b\n" \ ".previous" \ : "=r"(err) \ : ltype (x), "m"(__m(addr)), "i"(-EFAULT), "0"(err)) 以上です。 澤口@一升金 [2000/05/25 Thu 11:25:53] [211.0.69.33] 澤口@一升金です。 to KAZUO さん: アセンブラでも Windows のフォーム周りはスタックに パラメータをプッシュして Windows API を Call する だけなので、 C 言語で作るのと何も変わりません。 でも、わざわざ製品版の MASM を購入しなくても、フリー の実用的なアセンブラ統合環境はいくつもありますよ。 過去アーカイブに紹介されているはずです。 KAZUO [2000/05/25 Thu 08:58:29] [210.197.208.81] 知り合いがWindows版のMASMがMicrosoftから発売されると言ってま した。もしそれが真実なら、アセンブラで簡単にWindowsプログラム が組めます。 ところでWindowsのフォームを作るアセンブラのコードってどうなる んですかね。 jackal [2000/05/25 Thu 03:56:54] [210.161.27.8] あやさんへ 自分で調べてください↓ レポート・・・、聞くだけで頭がおかしくなってくる。(笑) http://www.intel.co.jp/jp/developer/design/intarch/manuals/index.htm あや [2000/05/24 Wed 23:47:20] [210.131.107.159] はじめまして。あやといいます。 gooで検索してこのページを見つけました。 その検索していた内容なのですが、 ・Pemtiumプロセッサのレジスタ構造 ・Pemtiumプロセッサ向けアセンブラのニーモニック この2つについて調べています。 実は大学のレポートなのですが(笑)。 すみませんが、分かる方教えてもらえないでしょうか。 よろしくおねがいします。 BAKABON [2000/05/24 Wed 23:44:56] [210.197.210.42] 始めまして、BAKABONと申します。以前からこのページを拝見させて 頂いております。BBSの過去ログとかは非常に参考になります。 実は、MASMを勉強しています。といってもレベルは文字を表示すると か、入力を受け付けるぐらいのレベルです。そこで本を買おうと思っ てるんですが、初心者向けの良書はどんなのがあるでしょうか? 僕の知ってるのではASCIIの初めて読むMASMと、技術評論社のMASM くらいです。どなたかアドバイスをお願いします。 KS [2000/05/24 Wed 21:10:43] [210.147.136.32] ココアラさん、ぴょン太さんありがとうございました。 参考にさせていただきます。 TAZZ [2000/05/24 Wed 11:05:30] [202.230.45.2] 理解しました。 カトさん、ありがとうございました。 このホームページは非常に勉強にさせて頂いてますので、 またお世話になると思います。 今度もよろしくお願いします。 力卜 [2000/05/23 Tue 18:52:54] [192.51.44.17] TAZZさん、こんにちは。 最初にお断りしますが、ただの情報へのポインタです。 私は内容を理解していません。 > 1)rdmsrは何を意味するのか? > 2)rdtscは何を意味するのか? > 3)rdpmcは何を意味するのか? http://www.intel.co.jp/jp/developer/design/intarch/manuals/index.htm ↑から入手できる「インテル・アーキテクチャ・ソフトウェア・ デベロッパーズ・マニュアル、中巻:命令セット・リファレンス」 を入手されるとよいと思います。 参考までに、このほかに上巻、下巻、最適化マニュアルなども同ページ から無償で取り出せます。 ちょっと前の書き込みについて: > 1) > 出力部分に出てくる"=D"や"=C"の意味が分からないので、 > このD、Cの意味するものを知りたい。 この質問はGNUアセンブラ(gas)に対する質問ではなくて、 gccやgppのインラインアセンブラに対する質問ですね。 http://www.castle.net/~avly/djasm.html ↑の Inline Asm の章を参照してください。 djgpp向け(英語)ですが、gccやgppでも同じだと思います。 "d" は、このインラインを実行する前に、指定の変数値を edx に代入。 "=D" は、インラインを実行した後に、 edi の値を指定の変数に代入。 "=c" は、インライン実行後に ecx の値を変数に代入…って感じですかね? "=A" については書かれてませんが、命令の返却値をもとに考えると、 edx(上位32ビット):eax(下位32ビット)の値を64ビット変数に代入なのかな? "0" や "1" については上のページでは述べてませんが、 そのページ曰く、"This is the basic syntax, as described in the online help" とのことですので、ヘルプに載ってるようです。 (少なくとも、djgppのオンラインマニュアルには…ですが) TAZZ [2000/05/23 Tue 15:41:02] [202.230.45.2] ニーモニック教えてください また書き込みさせて頂きました。 どうも586で使う命令みたいなのですが、 調べても載っていないので、誰かご存知の方はいませんか? 下のソースを解析したいのですが、次の質問に答えてください。 /* * Access to machine-specific registers (available on 586 and better only) * Note: the rd* operations modify the parameters directly (without using * pointer indirection), this allows gcc to optimize better */ #define rdmsr(msr,val1,val2) \ __asm__ __volatile__("rdmsr" \ : "=a" (val1), "=d" (val2) \ : "c" (msr)) #define wrmsr(msr,val1,val2) \ __asm__ __volatile__("wrmsr" \ : /* no outputs */ \ : "c" (msr), "a" (val1), "d" (val2)) #define rdtsc(low,high) \ __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high)) #define rdtscl(low) \ __asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx") #define rdtscll(val) \ __asm__ __volatile__ ("rdtsc" : "=A" (val)) #define rdpmc(counter,low,high) \ __asm__ __volatile__("rdpmc" \ : "=a" (low), "=d" (high) \ : "c" (counter)) 1)rdmsrは何を意味するのか? 2)rdtscは何を意味するのか? 3)rdpmcは何を意味するのか? の3点です。初歩的な質問ですみません。 誰かご教授願います。 ぴょン太 [2000/05/23 Tue 00:23:26] [210.139.252.165] a ここしばらくプログラムは触ってなかったんですが、 今日授業があって、ちと暇だったので資料無しでどこまで組めるかやってみました。 結果は2時間で、セグメントの範囲をコマンドラインから指定でき、 segment、offsetの表示、16進ダンプ表示、ascii表示、で1行。 という感じでダンプするプログラムが組める程度でした。 ちなみに、全く資料がないと頭の中は真っ白でした。 それと、自分は資料がないと何も出来ないのではないかと少し怖くなりました。 皆さんもやはり資料を見ながらプログラムを組む、という感じですよね?ね? to KSさん >なのでアセンブリで何かソフトを作ってみたいと思うのですが、 >何かいい入門用の初めに作れば勉強になるようなソフトは >ありませんか? vectorなどで配布されているDOSのフリーソフトを使ってみて、 自分で「これは作れそうだ!」と思うソフトでいいと思います。 なければDOSコマンドを真似してみるのもいいんではないでしょうか。 まだスキルがないのにこんなことを言うのもなんですけど^^; TAZZ [2000/05/22 Mon 15:41:00] [202.230.45.2] Linuxアセンブラについて はじめまして。 私はアセンブラを初めて2週間の新米プログラマーです。 今、Linuxのソースを解析しているのですが、 分からない部分も多々あり、良いサイトを紹介して頂きたいと 思い書き込みしました。 ソースの例を挙げますと、 (これは80386アセンブラをGNU式で書かれたものです) _asm_ volatile_ ("cld;rep;outs" #s \ :"=D"(addr),"=c"(count) :"d"(port),"0"(addr),"1"(count)); というインラインアセンブラなのですが、 まず調べたいのが 1) 出力部分に出てくる"=D"や"=C"の意味が分からないので、 このD、Cの意味するものを知りたい。 2) 出来れば、GNUアセンブラと80386を絡めたサイトなどを紹介して 頂きたいのですが、無ければ80386だけでも構いません。 以上の2点についてお願いしても宜しいですか? お手数をかけます。宜しくお願いします。 ココアラ [2000/05/19 Fri 23:43:42] [210.228.248.121] >一応ML.EXEとTASM.EXE、NASN.EXEを >持ってます。もっと良いとがあればそちらの方がいいんですけど。 >初心者に扱いやすいというよりも将来性のあるものが良いです。 充分すぎやしませんか・・・!? 将来性は、どのアセンブラを使うか云々ではなく、あなたの積む経験が ものをいうと思います。つまり、どれを使ってもOK、と思います。 ソースコードの可搬性のことを言うなら、MASMかTASMなのかな? KS [2000/05/19 Fri 22:05:10] [210.147.136.10] はじめまして、KSといいます。 厳密には大分前に1・2度違うHNで質問させて頂いているので はじめましてでは無いかもしれませんが。 今回ここの掲示板に戻って来たのはもう1度アセンブリ言語に 兆戦しようと思ったからです。 前は結局C言語に逃げてしまいました。 Cを学ぶ前にここのページを何度か見ていたので1度挫折したCを 何とか理解できるようになりました。 いくつかソフトも作ってみました それで、上を目指したいというのかでアセンブリ言語にもう1度 兆戦することにしました。 Cの時と同じように、Cを勉強したことにより (余り関係ないですが、プログラムが如何なるものなのか ということが少し理解できたので) 前のアセンブリ挑戦で挫折させられたセグメントも 何とか理解出来たかなと自分で思ってます。 実際は分かったというふうに勘違いしてる可能性もありますが(^^。 でCでのプログラミングの経験からプログラミングを学ぶには 実戦が一番ということが分かりました。 なのでアセンブリで何かソフトを作ってみたいと思うのですが、 何かいい入門用の初めに作れば勉強になるようなソフトは ありませんか? 出来ればつまずいた時にここで聞けばすぐに答えの帰ってくるような 簡単なやつが良いんですけど。 あとこれからアセンブリを学んでいくにはどのアセンブラが 良いですか? 一応ML.EXEとTASM.EXE、NASN.EXEを 持ってます。もっと良いとがあればそちらの方がいいんですけど。 初心者に扱いやすいというよりも将来性のあるものが良いです。 もしML.EXEならもう1度↓アドレスからDLしようと思います。 いろいろとあつかましいことをだらだらと書いてしまいましたが、 よろしくお願いします。それと長すぎてすいません。 澤口@一升金 [2000/05/19 Fri 17:39:11] [211.0.69.33] 澤口@一升金です。 to JA KYOSAI さん: CPU や FSB クロックの設定は CPU やチップセットのソフト的 な機能ではなく、マザーボードのハード設定機能ですので、一般 的にはできないと思います。 arm [2000/05/19 Fri 12:52:27] [192.51.44.19] >とりあえず、Cのコードをコンパイルする際にアセンブラ >コードの出力をさせてみます(VC++6.0)。 ># 可能なんですよね(汗) >...ちなみに、これを行うにはどうすればいいので >しょうか? 一番簡単な方法は、何か適当なソースを書いて、(a = bとか) そこにF9キーでブレークポイントを張って実行させます。 停止したところで、右クリックして「混合モードを表示」とすれば、 アセンブラのコードが出てきます。 アセンブリソース生成のオプションは /Fa です。 コマンドプロンプトから、VC++のbinにあるvcvars32.bat実行して、 cl /Fa main.c みたいな感じでOkです。 刹那 [2000/05/19 Fri 09:25:28] [138.107.10.1] ぴょン太さん、貴重な情報&ご助言、誠にありがとう ございました。 > インラインだけなら関数間の引数や戻り値の受け渡しの方法とか > Cのコードがどんなニーモニックに変換されるか、とかが > 理解出来ていれば、初めから勉強しなくても問題ないんではないでしょうか。 ハイ、ここから躓いております(汗) とりあえず、Cのコードをコンパイルする際にアセンブラ コードの出力をさせてみます(VC++6.0)。 # 可能なんですよね(汗) ...ちなみに、これを行うにはどうすればいいので しょうか? オンラインヘルプを見る限りでは出てなかったです。 もしかして、コマンドラインからコンパイルしないと できないのでしょうか? また、この方法が書かれているHP・書籍に関する情報を もしご存知でしたらお教え頂けないでしょうか? # もしFAQでしたらすみません。 どうか、宜しくお願い致します。 JA KYOSAI [2000/05/19 Fri 00:58:25] [210.197.210.9] 質問なのですが,CPUの倍率を変更、もしくはFSBを変更するプログラムを作りたいと思っています。チップセットやCPUによって、コーディングは違うと思いますが、技術的に可能でしょうか? ぴょン太 [2000/05/18 Thu 12:26:23] [210.159.27.125] @参考書籍等 インターフェース別冊とかトラ技のバックナンバーとか、 結構古いのは本屋で探すより古本屋で回って探したほうがいいかも。 書店や出版社に注文したところで在庫切れなのは目に見えてるし。 あとは、電子回路が好きな人とか大抵はCQ出版のバックナンバーを 持ってますので見せてもらったり譲ってもらったりするのも一つの手かも知れません。 to 刹那さん インラインだけなら関数間の引数や戻り値の受け渡しの方法とか Cのコードがどんなニーモニックに変換されるか、とかが 理解出来ていれば、初めから勉強しなくても問題ないんではないでしょうか。 言うまでもなく1からアセンブラ組めるのが一番でしょうけど。 インラインアセンブラのマニュアルとかを探すよりは、 人の書いたものを参考にするのがいいかも知れません。と思います。 ftp://ftp.hornet.org/pub/demos/code/effects/ ↑海外のdemoのソースとか見ると、 ほとんどがアセンブラか、C+インラインアセンブラ、 あるいはPascalで書かれてるようです。 あ、↑のサイトだとVC関係ないですね… 刹那 [2000/05/16 Tue 15:14:17] [138.107.10.1] はじめまして。 [MMX] & [インラインアセンブラ]で検索をかけて 此処に来ました。 今後ともどうぞ宜しくお願い致します。 早速質問で恐縮ですが、VC++ 6.0のインライン アセンブラを用いてMMX命令を用いた処理を作成 したいと思っておりますが、VC++ 6.0のインライン アセンブラに関するマニュアルというものは存在 するのでしょうか? もしありましたら、書名等をお教え頂ければ大変 嬉しく思います。 # やはり8086アセンブラ用の書籍から勉強しなく # てはいけないでしょうか(汗) どうか宜しくお願い致します。 近藤妥 [2000/05/16 Tue 01:38:31] [202.245.160.87] ぴょン太さん ありがとうございます。 早速、探しに行こうと思います。 ぴょン太 [2000/05/16 Tue 00:26:37] [210.139.252.163] うわーごめんなさい。 今日DOS6で動かして見て、死にました。 inを使ってたのが悪かったみたいで直しておきます(汁) バッファに溜まってるとか、そんなのが悪さをするんでしょうか。 Win98の窓では動くけども、DOSで動かすと、ってことで、 やっぱDOS窓はエミュレーションな部分があるんでしょう。多分。 >- エントリ(開始アドレス)を指定してない。 なぜか昔はmainを書いてたのですけど、 書かなくても動くので今は書いてません。 やっぱり必要なんでしょうか? >- メモリ1バイトを2バイトレジスタに入れる処理が好ましくない。 これは頭ではわかってたんですけど、 ソースを書いていたときにとりあえず1バイトにしたかったんで… ああ。言い訳ですね^^;; >- 文字列の長さに定数値を使っている。 >〜略〜 >cmp cnt_flg,(offset mese)-(offset mes) うーん。そんなやり方ってあったんですね。勉強になります。 今日、また授業があって、きちんと動くようになったので、 直しておきます。わざわざどうもです。 力卜 [2000/05/15 Mon 17:45:10] [192.51.44.12] to ぴょン太さん ソース見てみました。いくつか気になった点があったので挙げてみます。 なお、私はWin2000Proのコマンドプロンプト上で、nasm用に書き直しています。 - エントリ(開始アドレス)を指定してない。 ラベル"main"をエントリにしたいようですが、それが指示されていません。 masmはよくわかりませんが、ソース末尾の end を、end mainとかにするのかな? - スタックセグメントとスタック用バッファは用意してあるけど、使っていない。 Win2000の debug.exeで vect1ch.exe の起動直後の ssとspの値を見ましたが、 ssは、csと同じ値を、spはゼロを持っていました。(^_^;) スタック用バッファの次のアドレスを指すように ss:sp を設定します。 stack segment word stack 'stack' dw 100h dup(?) sbottom: stack ends : main proc near cli mov ax,stack mov ss,ax ; ss設定 mov sp,offset sbottom ; spをスタックの底に設定 sti : - メモリ1バイトを2バイトレジスタに入れる処理が好ましくない。 次のようにしてsiに、cnf_flg(バイトメモリ)の内容を入れようとしていますが、 mov si,word ptr [cnt_flg] and si,00ffh ;;マスク これは、次のようにするとよいと思います。(masmでうまく通るかな?) movzx si,byte ptr [cnt_flg] または、最初の cnt_flg db 0 ;;55ms*n カウント の後ろに、 db 0 を入れて、and si,00ffh をやらないという方法もあります。 場合によって、word として見たり、byte として見たりするのです。 なお、私なら、 xor bx,bx mov bl,byte ptr [cnt_flg] mov dl,byte ptr [mes+bx] とやります。… # 私は 486DX で開発している人間なので、パーシャルレジスタストール # は意識していませんが、最後の例は引っかかるのかもしれないので、 # 気を付けてください。 - 文字列の長さに定数値を使っている。 cmp cnt_flg,21 という行がありましたが、最初に mes db ' PUSH ESC KEY TO END ' mese: とかしておけば、 cmp cnt_flg,(offset mese)-(offset mes) と書け、あとでメッセージを変更しても問題なくてよいと思います。 - キー入力を I/Oポート直読みで行っている。 これは問題というワケではないですが、キーポートの直読みをしている ため、私の環境(Win2000Proのコマンドプロンプト)では、二度目以降の 起動直後に、すぐにプログラムが終了してしまいます。 調べてみたら、最初に起動したプログラムの後でのI/Oポート60hの読み 込み値が、常に 1になっていました。 BIOSファンクションや、BIOSワークの読み出しでキー入力を調べた方が よいかも知れません。 ではでは。 ぴょン太 [2000/05/14 Sun 05:19:35] [210.139.252.164] to 近藤妥さん トラ技SP、ブートストラップ、インターフェースなど、 CQ出版社から出てるものは、ある程度信用していいと思います。 トラ技SPの中でも、No10「IBM PC&80286のすべて」はよく見ます。 基本的なことは「すべて」書いてあります。多分。 ただ、トラ技SPは最近本屋ではNo50〜くらいしか置いてなくて全く見かけません。 そういやCQ出版の別冊本ってなぜかあまり紹介されませんね。 私が見てないだけかも。時代は過ぎたのか。 近藤妥 [2000/05/14 Sun 02:09:34] [202.245.160.87] C言語で始めるWindowsプログラミング PC/ATの基本ハードについての良書を教えてもらえませんか? BIOSの使い方など、DOSとアセンブラから攻めていくのに 必要なのです。 ぴょン太 [2000/05/14 Sun 00:21:30] [210.139.252.165] 1CHのサンプルです^^;; ↑時間のある人は見てくださいね。ソース汚いですけど。MASM5.1です。 何か「こうすると良い」とか、アドバイスもらえるとうれしいです。 私の宿題をやってくれ、と言ってるわけではありません。 あと拡張子をexeにするとexeファイルが落ちてきます。そんだけ。 ------------------ to Kakef31さん 今の私の知識では、全くついていけません(汗) 昔、一度だけPC98のHDDをガリガリとダイレクトに読み書きしたんですが、 もちろん、クラッシュしました。DOS5だけだったからよかったんですけどね。 その辺のことも機会があれば触ってみたいとは思うんですが、 まだそんなに知識が無いのと、資料が英語なのとで、 私には見つけることさえも難しいです。 誰かが和訳で書いてくれるのを待ちましょう。 なんだか人任せですね…。あぁ。 ------------------ to 澤口@一升金さん 外国にもいないんでしょうか…。 いつも外国にはとんでもないプログラムを作れる凄腕のプログラマーがいて… という印象なんですが。 軍のドメインってなんだか格好良いですね。 そういや圧縮とか暗号化の技術には「やれ軍隊だそれ輸出だ」というのが ついてきますが、そんなに大変なことなのでしょうか。 私には一生関係なさそうですが^^;;; 澤口@一升金 [2000/05/13 Sat 09:19:17] [211.0.69.33] 澤口@一升金です。 to ぴょん太さん: わたしは FA 開発者の ML にも入っていますが、 WinNT でリアルタイム割り込みを使いこなしている人というのは 見たことありませんから、外国にもいないんじゃないでし ょうか。 わたしならリアルタイム Linux をおすすめしたいですけ どね。 VMWare を乗っければ Windows アプリも走るでし ょう。 ↓ http://www.rtlinux.org/rtlinux.new/index.html フリーのリアルタイムカーネルにはこんなのもあります。 ( URL アドレスに注目!) 日本の自衛隊も情報戦の準備くらいしているでしょうから、 成果をどんどん公表してもらいたいですね。 ↓ http://www.rtems.army.mil/rtems.html Kakef31 [2000/05/13 Sat 09:11:04] [210.253.98.109] >ぴょん太さん ・割りこみ関係(私もよく知らないのですが) DOS窓で(ハードウェア割り込みをフックする)プログラムを 常駐させたまま窓を閉じる、これと似たような事ですかね。 本来のタイマ割りこみはシステムVMで処理され、 DOS窓のベクタはエミュレーションされているですが、 幾つかの割りこみは、ウィンドウがアクティブでなくても、 ベクタテーブルが指すルーチンを呼んでいるのでしょう。 NTも含め、通常はOS以外はIDTを読み書きできないので、 ベクタをいじるには、ドライバを書くか、あるいは、 WIN95系ならVXDとか。それ以外にありません。 ・ハードディスク関係 通常のOSでは、ドライバを経由して読み書きしますが、 (WINは知らないけど、UNIX系なら/dev/????とか) リアルモードで動作するOS(つまりDOS)なら、BIOSを呼びます。 具体的にはint13hを呼び出して、IDE-HDDを読み書きできます。 (SCSI-BIOSが有効にしてあれば、SCSI-HDDも読み書きできます) このとき、拡張int13hを使わないと、8G以上の領域にアクセス 出来ません。 WIN95系のDOS窓の場合は、 デバイスマネージャでint13hがチェックされていれば SCSI-BIOSをエミュレーションしてくれます。 ただし、DOSモードでなければ、起動ドライブは書き込みできません。 (起動ディスクの他のパーティションは出来るかも) 拡張int13hの使い方は、日本語で解説してある所は知りませんが、 英語での解説は、見つける事が出来ます。 ついでに。 現在、手元にはDOS/V機しか無いのですが、どうしてもPC98の外付HDD (しかも開放された領域)を読みたくなった事があり、 幾つか試してみました。(上の文は、その時の経験によるもの) PC98のHDDのセクタ0の後半部分はほぼ使われていないようで、 パーティションテーブルをうまく書きかえれば、そのまま DOS上で認識できます。 (拡張領域として設定すればドライブレターも変わりません) WIN98でもDOS互換モードにならずに読み書きできました。 たぶん、98に戻しても、そのまま起動できると思います。 また長々と失礼しました。 80年式@ぴょン太 [2000/05/13 Sat 01:59:31] [210.139.252.165] to カトさん 詳しくありがとうございます。 フラグの退避と復帰、割り込み禁止を追加するだけで なんとか不安定ながらも動作するものは作れたんですけど、 1Chって、やっぱりタイマだけあって、危険なものなんでしょうか。 プログラムはきちんと動いても、割り込みの後始末を少し怠ると、 Windows(98)が見事におかしくなります。 プログラムを終了してからDOS窓の挙動が段々とおかしくなり、 怖いのでDOS窓を終了して、再度DOS窓を開くも、さらに挙動不審に。 最後にはDOS窓を強制終了も出来ず、電源OFF+Scandiskとなりました。 という現象に陥りました。 あんなのをいじる時って「DOS窓だからハングしてもいいや」という 気持ちは捨てた方がいいんですね…。 フリーズすればマシンの再起動は覚悟しないとダメですね。 それと、 >far jmpの代わりに、far callで元のベクタを呼んですぐに復帰するのなら、 というのは、なんだか参考になりました。 今までfar jmpで飛ぶかiretで戻るかの2つしか無いと思ってましたから。 学校はですね…。秘密ということにしておいてください(汗) ------------------ to 澤口@一升金さん そんなとこからはじめないとダメなんですか…。 もっと簡単に「どこどこを触って〜(略)〜するとできる」とか思ってました。 かなり険しい道のりですね…。 って言ってもどこかの外人さんとかは簡単に(?) やってのけるんでしょうけど。 ------------------ 学ぶべきことが多すぎる。嫌になりそうだ…。どうしましょ。 力卜 [2000/05/12 Fri 12:20:50] [192.51.44.12] to ぴょん太さん。 最初のpushfの必要性はわかりますよね。(念のため) >どうも〜。う、stiにpopf…。そんなの書いてなかった…。 割り込み処理ルーチン自体に時間が掛からないようなら stiの必要性は低いと思いますが、念のため入れてあります。 ハードウェア割り込み要求は、長時間放っておくと不都合が 起きる可能性がありますので。(一般に何が起きるかはわかりません) popf は、far jmpで元の割り込みベクタにジャンプするのなら 必要です。そうしないと、スタックの整合性が狂いますから。 far jmpの代わりに、far callで元のベクタを呼んですぐに復帰 するのなら、最初の pushf に対する popf をしないで、far call, iret の順でしょうか。 >講義の先生は08hではなく今回は「あえて標準的な」1chを扱うと言っていたので >一応1chなのですが、やっぱり1chの方が標準的なのでしょうか。 標準的か否かというより、用途次第という気がします。 int 08hは、PIT(programmable interval timer)を直接いじって 割り込みの周期を本来よりも短く変えるようなときに処理ルーチン を差し替えして使います。とてもハードウェア寄りな割り込み です。 例えば周期を1/4(13.75ms)にした場合、4の倍数回目の割り込みは 55ms周期になりますから、割り込み処理が終了した後、元のベクタ にジャンプしてあげます。 4の倍数回目でない割り込みだった場合は、割り込み処理が終了した 後に元のベクタに戻るのではなく、自分でハードウェア割り込みの 後始末をしてから復帰します。 具体的には自分で割り込み終了(EOI)を宣言(I/Oポート操作)して、 保存したレジスタを復元して、最初の pushf に対する popf をして から iret する必要があります。 int 1ch は、int 08h の本来(元)の処理ルーチン内で発行される ソフトウェア割り込みだと思います。 もし、上記の例のように 割り込み周期が変更してあっても、新しい int 08h ハンドラは、55msごとに元の int 08hハンドラを呼ぶ でしょう。(ただし、まっとうな作りのソフトなら、ですが。) これにより、もし 割り込み周期が変えてあっても、55msごとに int 1ch が発行されることになります。 また EOI の処理は、int 08hハンドラが最後にちゃんとやって くれます。 よって、割り込み周期(55ms)を変更する必要がない場合にはこちらを 使う方が EOI などを書かなくてよいだけ簡単です。 また、割り込み周期が変更されないため、処理ルーチンのネスト (割り込みベクタの書き換えのこと)を何段しても、誤った周期で 処理が行われてしまうなどの問題がありません。 このため、常駐するプログラムに使うのもよいかも知れません。 ところで、楽しそうなことをやってる学校ですねぇ(^_^) ではでは。 澤口@一升金 [2000/05/12 Fri 09:41:59] [211.0.69.33] 澤口@一升金です。 to ぴょん太さん: >あと、NT上で割り込みベクタを書きかえる方法とかってないんですか? WinNT DDK をダウンロードして、デバイスドライバを作成すれば できるでしょう。 >それとかOSの制約を受けずに直接HDDをガリガリ読む方法とかないでしょうか。。。 ブートローダを自作して、E-IDE とか SCSI のプロトコルを駆使して・・ Linux とか FreeDOS のソースが読めればそれを参考にできるでしょう。 ぴょん太 [2000/05/12 Fri 00:04:52] [210.139.252.164] http://ns.to/asm/ to カトさん どうも〜。う、stiにpopf…。そんなの書いてなかった…。 講義の先生は08hではなく今回は「あえて標準的な」1chを扱うと言っていたので 一応1chなのですが、やっぱり1chの方が標準的なのでしょうか。 どっちにしろコードに大きな変わりはないと思うのでやってみようと思います。 なんだかDOS用スクリーンセーバーを作るのが目的みたいです。 どうもありがとうございます。また何かあったらお願いします。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ あと、NT上で割り込みベクタを書きかえる方法とかってないんですか? 書き換えてもメリットはないと思いますが、気になったので…。 それとかOSの制約を受けずに直接HDDをガリガリ読む方法とかないでしょうか。。。 気になればなるほどだんだんと疑問が出てきます。。。うぁぁ(悩) 力卜 [2000/05/11 Thu 10:08:15] [192.51.44.12] ぴょン太さん。 PC/AT互換機のDOS(窓)上で、int 1ch じゃなくて、その大元の int 08hを フックしていいるプログラムを作りましたが、うまく動作しています。 55msごとに本来のベクタにジャンプする処理をしているんですが、 その部分のひな型だけを抜き出してみました。うまく動作すればよいですが… なお、ソースは nasm 用ですので、masm 用には書き換えが必要なハズです。 OldTmrV dw 0,0 ; 古いタイマベクタ: オフセット, セグメント TmrHdlr pushf ; フラグを保存する sti ; 短期間だが他の割り込みを許可する push ax ; 使用レジスタ群を保存する push ds ; 〃 mov ax,data ; mov ds,ax ; データセグメントに値を指定する : ; (さまざまな処理をする) pop ds ; レジスタ群を復元する pop ax ; 〃 popf ; フラグを復元する (cli命令相当の動作を含む) jmp far [cs:OldTmrV+0] ; 古いベクタにジャンプする もし誤りがあれば指摘してください>ALL。以上です。 arm [2000/05/11 Thu 00:51:36] [163.139.58.62] こんちは。 インラインアセンブラでメンバ関数にアクセスする方法ですが、なんかだめそうですね。 でもメンバ変数にはアクセスできるので、celsさんの方法を少しいじって、 class Foo { public: Foo() { bar = Bar; } void Bar(void); void (Foo::*bar)(void); }; これなら call obj.bar と書けますね。意味ないですが…。 shuna [2000/05/10 Wed 20:51:37] [208.32.26.78] はじめまして。 検索でみつけました。 アセンブラはCでインラインアセンブラを少しやった程度です。 後はデバッグ時に時々みますが。 アセンブラで使っている本は、工学社の「80386プログラミング」 です、良い本だと思いますがあまりみかけません。 お力をお借りさせて頂く時もあるかもしれませんが、宜しく お願いいたします。 NEW [2000/05/10 Wed 19:59:37] [210.251.66.227] >iretで戻っちゃダメなんですー。 >もともとの処理をまるごと書き換えるだけならiretですけど。 ああ、やっと意味が分かった、自分の処理に最初に飛ばして、 本来のint 1chに戻るって事ですね。 うーんまずは、自分のオリジナル処理内で何にもしないで 戻ってみてはどうですか? 自分の処理の中でOSのシステムコール呼んでいるとか。 後はいやらしい症状として、再入しているって事はないですかねぇ。 intは普通、cli状態で呼ばれるんだっけか? 再現性あります? スタック大量に使っているとか? もうint 1chとか言われても覚えていないンですが(^^; 大昔の経験だと、割り込みコントローラってものがあって(^^; そいつの割り込みマスクを制御しなきゃとか、色々あったもんですが...。 どん [2000/05/10 Wed 19:10:58] [210.196.94.34] 澤口@一升金さん、どうもありがとうございました。これからいってみます。これからも、アセンブラで困った時には、立ち寄らせていただきますので宜しく御願いいたします。 相模隆明 [2000/05/10 Wed 16:59:09] [150.15.16.31] to ぴょん太さん 私が思いつく事としては ・レジスタの内容が保存されていますか ・スタックの関係は保たれていますか ・intで呼び出されたルーチンの中でintを使用していませんか ・保存してある本来のベクタの順序はオフセット−セグメント の順序になっていますか これくらいですね。 ぴょン太 [2000/05/10 Wed 13:05:44] [210.159.27.184] to 澤口@一升金さん またなぜそんなHNに…(謎) どうもありがとうございます。 MASM6のソースをわざわざMASM5に直さなくて済みました^^ to NEWさん iretで戻っちゃダメなんですー。 もともとの処理をまるごと書き換えるだけならiretですけど。 to cocoalaさん なんか、フラグはいじらなくていいみたいなんです。 割り込み禁止をかけないとダメかなとは思ったんですけど、 それでもないみたいだし。 cocoala [2000/05/10 Wed 12:22:27] [210.235.232.4] intで割り込まれたら、pushfでFARjmpてのはダメですか? 澤口@一升金 [2000/05/10 Wed 11:03:45] [211.0.69.33] 澤口@一升金です。 to ぴょん太さん: ML(Tech Asm)からの再掲です。時間が経っているので、バージョン とか今では少し変わっているかもしれない。 以下引用 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 標準的にはマイクロソフト社が配布しているデバドラ開発用の ツールを使います。 http://www.microsoft.com/ddk/download/98/BINS_DDK.EXE (2.9 MBytes) http://www.microsoft.com/ddk/download/98/98SETUP.EXE (1.9 MBytes) の2つをダウンロードして解凍します。 ml.exe ml.err link.exe がアセンブラプログラムに必要なツールです。 ml.exe は 現在 MASM 6.11d 相当ですが、これは MMX や 3DNow! に対応していないので、パッチを入れます。 ftp://ftp.microsoft.com/softlib/mslfiles/ML612.EXE ftp://ftp.microsoft.com/softlib/mslfiles/ML613.EXE ftp://ftp.microsoft.com/softlib/mslfiles/ML614.EXE です。 また、link.exe は 32bit リンカですので、リアルモードプログラ ム(16bit プログラム)を作るときは ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe が必要です。 澤口@一升金 [2000/05/10 Wed 10:51:27] [211.0.69.33] 澤口@大崎 あらため澤口@一升金です。 to どんさん: アセンブラマニュアルってアセンブラソフトのマニュアルですか? なら、ソフトメーカーがわからないと誰も答えられないでしょう。 本家本元の Z80 アセンブラとマニュアルがダウンロードできる。 ↓ http://www.zilog.com/support/sd.html Z80 ニーモニックなどの解説ページ ↓ http://www.geocities.com/SiliconValley/Peaks/3938/z80_home.htm ツールが少し。 ↓ http://margo.student.utwente.nl/el/micros/xx80/ MSX のページ。非公開ニーモニックの解説がある。 ↓ http://www.msxnet.org/tech/ NEW [2000/05/10 Wed 09:32:28] [210.251.66.227] >そこでint 1chをいじるンですけど、ベクタの書き換えをして >自分の処理を割りこませて、使うレジスタの保存と復帰、 >戻るときはレジスタ復帰、far jampで本来の処理に戻る。 >というステップなのですが、確実に止まってくれます。 あー最近ベクタフックするプログラムなんか書いてないんで 忘れたけど、intで呼ばれたら、iretで戻るんじゃないっけ? ぴょン太 [2000/05/10 Wed 00:48:06] [210.139.252.165] 大麻 授業でやったンですが、インターバルタイマが上手くいきません。 55ms毎でカウントして…ってことをやってます。 そこでint 1chをいじるンですけど、ベクタの書き換えをして 自分の処理を割りこませて、使うレジスタの保存と復帰、 戻るときはレジスタ復帰、far jampで本来の処理に戻る。 というステップなのですが、確実に止まってくれます。 何か足りない処理とか、見落としやすい注意点ってありますか? 他の割り込み番号だと割り込みルーチンは動くのに…。 どん [2000/05/09 Tue 18:28:19] [210.196.94.34] 初めまして、どんともうします。GOOで検索してココにだとりつきました。現在Z80のアセンブラマニュアルやアセンブラの説明が書かれているページ、もしくはPDFファイルを探しています。初心者でもわかりやすい物が欲しいのです。みなさまのお力をお貸し願えませんでしょうか。宜しく御願いいたします。 oh [2000/05/09 Tue 02:36:16] [202.219.231.203] >Disk1〜Disk4の中に入っているファイルを全てどこかのディレクトリにコピーしてからInstall.exeを実行すればいいと思います。 出来ました。ありがとうございます。 だけではいけないので自分が実行したインストール方法を書いておきます。 http://community.borland.com/article/images/21751/tcpp101.zip からTurboC++1.01をダウンロード。 C:\tcに展開。 ディレクトリC:\tc\allを作りC:\tc\Disk? (?は1から4)の中身全部をコピーする。 cdでC:\tc\allに移動してusモードになりinstallと打ってエンターを。 インストール画面が出てくるので進むインストールするディレクトリは C:\PROGRA~1\BORLAND\TCにしました。 インストールを実行。 これでインストール出来るはずです。 Nishimura [2000/05/09 Tue 00:05:47] [210.175.221.71] ohさんへ Disk1〜Disk4の中に入っているファイルを全てどこかのディレクトリにコピーしてからInstall.exeを実行すればいいと思います。 oh [2000/05/07 Sun 22:54:57] [202.219.232.81] >Disk1〜Disk4にはいっているファイルを4枚のフロッピーに振り分け >てフロッピーディスクからUSモードでInstallを実行すると良いと思います。 なるほど。 さっそくやってみました。 しかしDisk2を入れてコピーしている時に File C:\TC\BIN\UNZIP.ZIP HELP....(ここから覚えていない) not found とでて終了してしまいます。 インストール先のディレクトリが悪いのかと思い変えてみましたが同じでした。 DOS窓からがダメかと思ってMSDOSモードでもやりましたが結果は同じ。 でもディレクトリ構成がわかったのでとりあえず使えるようになりました。(^^;;;; ヘルプファイルなどがインストール出来てないんですけどね。 *.CA1、*.CA2などはどうやって展開するのだろうか・・・? TurboC++1.01はここからダウンロード出来ます。 http://community.borland.com/article/0,1410,21751,00.html jackal [2000/05/07 Sun 19:06:04] [210.248.187.17] ohさんへ Disk1〜Disk4にはいっているファイルを4枚のフロッピーに振り分け てフロッピーディスクからUSモードでInstallを実行すると良いと思 います。 oh [2000/05/07 Sun 03:03:13] [202.219.232.65] 場違いだと思いますが失礼します。 http://community.borland.com/article/0,1410,21751,00.html からTurbo C++1.01をダウンロードしてインストールしようと思ったのですが出来ません。 具体的には、Disk1に入っているINSTALL.EXEを実行しても何も起こらないのです。 INSTALL.EXEを実行したのはWindowsのDOS窓からです。 環境はWindows 98です。 Windowsにはインストール出来ないのでしょうか? とおりすがり [2000/05/06 Sat 23:54:00] [210.234.15.55] http://nav.webring.org/hub?ring=x86asm;list なんか見てみるとアセンブラで Win32 やってる人結構いるみたいですよ。 実際のところは SDK の関数をアセンブラから呼び出してるだけ って感じですけど。 Ichi [2000/05/06 Sat 05:55:21] [210.237.205.254] to ぴょん太さん >アセンブラは組めてもWindowsアプリケーションを組めないのは、 >重症でしょうか…?それと、同じ境遇の方っています? 私もいまのところ同じようなものです。 98でアセンブリ言語バリバリのプログラムは組めても、 Windowsだと、ちょっと...な状態です。 最近は専らコンソールアプリを作ってます。 # おとなしくMFCを使えばずいぶん楽なんですけどね。 ぴょン太 [2000/05/06 Sat 00:36:05] [210.139.252.165] http://ns.to/asm/ to celsさん どうもありがとうございます。 私はこのページさえもたどりつけなかった。クッ…。 ----- どうしましょ。DDKダウンロードしに行って、 Win32プログラムが組めないことになんだか負い目を感じてしまった。 ずっと通信環境の無いPC-9801(486世代)の上、 MASMと逆アセンブラとバイナリエディタのみで独学してきた私には、 Windowsアプリケーションは遥か彼方なのれす。遠いです。 アセンブラは組めてもWindowsアプリケーションを組めないのは、 重症でしょうか…?それと、同じ境遇の方っています? cels [2000/05/05 Fri 23:41:44] [210.149.134.226] to ぴょン太さん MASM単体はちょっとわからないのですが、 DDKを落とせば入っています。 http://www.microsoft.com/hwdev/ddk/ddk98.htm ぴょン太 [2000/05/05 Fri 02:09:04] [210.139.252.163] 無題 ずっと昔から覗かせてもらってます〜。どうも。 「お久しぶりです」と言っても誰も覚えてないか。 書きこんだ当時は違うHNだったし。 澤口@大崎さん、お願いがあります。 メーリングリストで発言された、MASM6.?(MLですね)の場所を もう一度書いてもらえませんでしょうか。 あるいは誰か知ってる方、お願いします。 「確か発言されてるはずだ」と思い、BBSの過去ログを見ても見つからず。 発言されたのがメーリングリストだったことを思い出しました。 マイクロソフトのダウンロードセンター行っても、 私の技術不足でMASMに当てるパッチしか出てきません(泣) 実はHDDが全部消えちゃいまして…。 皆さん寝ぼけたままFDISKを扱うのはやめましょうね(w どうかよろしくお願いします。 cels [2000/05/04 Thu 00:33:31] [203.180.145.204] to ずとしさん >パーシャルレジスタストール レジスタの一部に書き込んだ後でレジスタ全体を読みこむと起こる 遅延のことをそういいます。 読み込んだときに最低7クロック止まります。 >やっぱりサポートしてないっていうことなんでしょうけど。 >未サポートなんでしょうか、それとも、呼ばれちゃまずいんでしょうか。 >アセンブラでそんなことするなってことですかの。 インラインアセンブラではタイトな一部のコードだけを書くことしか 考えていないのでしょう。 メンバ関数を呼ぶにはなんらかの追加機能が必要なので。 to yutaroさん 1.mov eax,a 2.mov eax,offset a とするとaを変数として 1: eax = a 2: eax = &a が近いでしょう。 シンボルを変数として見られる、という設計のようです。 個人的にはなんとなく馴染めないので いつも[a]とか書いてしまいますが。 to Kakef31さん >BCC32でやっても、メンバ関数のアドレスは直接取得できませんね。 BCCでもだめですか。 やっぱりアセンブラからC++を呼ぶことまで考えてないんでしょうね。 >#この当時はインラインアセンブラで'include'とか'segment'とかも使ってました。 いいですね、それくらいできると。 VCでも#includeなら使えますが(笑) ずとし [2000/05/03 Wed 22:38:48] [210.238.165.55] 毎度。 >セグメントの先頭からのオフセット値なので、 あーそういうことだったんですね。納得。 @ジャンプテーブルの件 いろいろ教えていただきまして。 とりあえず、Cで配列を作って、ジャンプは'jmp jmp_table0[eax*4]'でいってみます。 インラインでつけたラベルのアドレス値は、C側で記述できるだろうと高をくくって。 あと、少し気になったのは、 > mov al,data8 > mov r16,ax >等をするとパーシャルレジスタストールが起きて、 ここいらに書いてある「等」っていうのは、 「オペランドサイズの違うメモリー絡みの命令を 同じレジスターに対して続けて使う等」 って感じだと予想して読んだのですが、間違って、ない、ですか。 それと、なんとかストールとかいうやつらは、速度以外にも障害を与えますか。 かなりわかりませんでした。すいません。はやく本買わなくちゃぁいかんですな。 'xor eax,eax'とかは心がけて使ってるので、大丈夫かも。 @メンバ関数呼び出し >命令列はわかるのですが、肝心のメンバ関数アドレスがとれないのです。 >即値アドレスは当然使えませんし、 コンパイラがコードをはけるということは、 アドレス算出用のクラス情報をコンパイラは知ってるわけで、 その情報がアセンブラの部分では使えない。 やっぱりサポートしてないっていうことなんでしょうけど。 未サポートなんでしょうか、それとも、呼ばれちゃまずいんでしょうか。 アセンブラでそんなことするなってことですかの。 yutaro [2000/05/03 Wed 19:05:00] [172.143.190.128] >Kakef31さんへ 1.mov eax, a mov eax, [eax] 2.mov eax, offset a 3.lea eax, a チェックしてみたら1番はC言語っぽく書くと eax=*a 2と3番は eax=&a だと思うんですけど..そうですよね yutaro [2000/05/03 Wed 17:16:45] [172.138.215.131] >Kakef31さんへ これはきまりなんですね。 >void (Foo::*f)(int) = &Foo::bar; こんな書き方できたんですね。 とても勉強になりました。 >お返事を下さった方々へ ありがとうございました。 今、MASM32とDirectXで3DのGAMEを 作りたいなと思っています。 (ちょっと前までVisual C++で作ってた) Drawと3Dの初期化を終えて、これからゲームの中身を作ります。 また、謎にであったらここへきたいと思います。 それでは.... Kakef31 [2000/05/03 Wed 16:14:43] [210.253.98.205] >yutaroさん >1.mov eax, [a] >2.mov eax, a > mov eax, [eax] aがメモリ上の変数である場合、 mov eax, a と mov eax,[a] は、 全く等価です。 2.の形式で、望む結果を得るには、 mov eax, offset a か lea eax, a を 用います。 >celsさん BCC32でやっても、メンバ関数のアドレスは直接取得できませんね。 メモリ変数のアドレスの前に'BYTE PTR'がついちゃいます。 仮想関数テーブルが3DWORD使っているのが原因のようですね。 leaでアドレスを得てからcall memするしか方法が... TCC1.01とかの頃は違った気がするので、例外処理とかの関係でしょうか? #この当時はインラインアセンブラで'include'とか'segment'とかも使ってました。 #TASMを呼び出していたので。 cels [2000/05/03 Wed 08:21:24] [203.180.144.19] >'db'とか'dw'とか'd?'とかでデータ定義ってできるんですか。 インラインアセンブラでは使えません。 代わりに_emitという擬似命令があるのですが、 8ビットしか置けなくてかなり使えませんね。 関数テーブルをCで作るか、 MASMとかの普通のアセンブラを使ったほうがいいかもしれません。 >[edx + eax*SIZE myType]っていう書式があるそうですが、 >この場合eaxは符号有りなのか、無しなのか。 SIZEは1,2,4,8のいずれかです。 eaxの符号はよく考えればわかると思います。 アドレススペースは32bitしかありませんので。 >変数に代入してるところをトレースしてコードをパクッてきて、 >#define Call_m_func(func_name,class) __asm ????? __asm ????? _asm ???? >とかで書式をでっち上げる。可能でしょうか。 命令列はわかるのですが、肝心のメンバ関数アドレスがとれないのです。 即値アドレスは当然使えませんし、 シンボル名は?とか@が入っていてインラインではエラーになります。 Kakef31 [2000/05/03 Wed 03:03:10] [210.253.98.142] 初めまして。時々のぞかせてもらっています。 アセンブラはDOS(98)の時代にかじったまま WINは全然理解できてない者です。 32ビットコードは、スーパーアスキーの 386 de MS-DOSで勉強しました。今はああいう記事、少ないですね。 >ずとしさん > offset > 前につければ、プログラムアドレスを返してくれる、 > で、あってますか。 だいたいあってると思いますよ。 セグメントの先頭からのオフセット値なので、 offset DGROUP:address が必要なときもあります(フラットモデルでは不要) また、アドレスの差を求めるときは、sub命令を使わずとも、 mov ebx,(offset func01) - (offset func00) で大丈夫だと思います。(括弧は不要かな?) >アドレステーブルの作り方がわかりません。 アセンブラの場合 JUMP_TABLE label dword dd func00,func01,func02,func03, dd func04,…,funcFF 等を作り、 movzx eax,this.DMGopecode ;[edx]? call/jmp JUMP_TABLE[eax*4] ;*1,*2,*4,*8のいずれか ; ここで、分岐予測が必ず外れるため、ペナルティが大きい で大丈夫です。 C言語ならば、僕の場合 typedef void vfn_t(void); //これで少し見やすくなる static void func00(void) { /* NOP */ } vfn_t *TABLE[] = { func00,func01, …,funcFF, }; としておいて、 void callcode(int code) { TABLE[code](); } でコールします。 コンパイラの出力も、上記アセンブラの方法と ほとんど変わらない(レジスタをかませる程度) ものになると思います。 vfn_t型に引数のある型を使っても大丈夫です。 あと、少し気になったのは、 > 8ビットレジスタ上位下位ともに使いまくり。 ですが、P6コア(PenII,PenIII等)の場合、 mov al,data8 mov r16,ax 等をするとパーシャルレジスタストールが起きて、 パイプラインが止まります。このペナルティは不定で、 大抵、分岐予測が外れたときよりも大きいと思います。 古いコンパイラ(TurboC 2.0等)は、平気で mov al,data8 mov ah,0 ret 等の関数を作りますね。回避するには、movzxを使うか、 xor/sub ax,ax mov al,data8 とするのが良いです。(P6を前提にするなら、movzxが良い) mov ax,0 mov al,data8 では駄目です。いずれaxレジスタを読み出したときに、ストールします。 reg8→reg32やreg16→reg32でも同様です。 いきなり長くなって、すみませんでした。 ずとし [2000/05/02 Tue 23:38:47] [210.147.66.97] 毎度どうも。おはこんばんちは。 >add eax,offset jmp_table0 >でいけるはずです。 'offset'の使い方に自信が無かったので。 前につければ、プログラムアドレスを返してくれる、 で、あってますか。 知ってるオフセットって言葉のイメージと なんだか違うのでよくわかりませんでした。 >jmp命令のテーブル作るのはあまり効率的とは思えません。 >アドレステーブルを作って jmp [eax] のほうがよいのでは。 >なにか理由があるのでしょうか。 ええ、実は。 アドレステーブルの作り方がわかりません。 まずはインラインアセンブラでラベルのプログラムアドレスを データ定義する書式がわかりません。 'db'とか'dw'とか'd?'とかでデータ定義ってできるんですか。 以上の物は試したところできなかったようですが。 それとも、 static void* jmp_table0[256] = { code0, //nop code1, : : }; とかでいけるんでしょうか。 こっちは、試す前に例のやつで動いてしまったので試してないです。 で、'jmp メモリー'の、このメモリーってゆうオペランドのことでまたちょっと。 'jmp'に限らずですが、インデックスの指定はどこまでいけるんでしょうか。 [edx + eax*SIZE myType]っていう書式があるそうですが、 この場合eaxは符号有りなのか、無しなのか。 掛け算される配列のサイズとかの定数は何ビットで符号の有無は。 とか、ですね、いろいろよくわからないことがあって。 まぁ、今回も、情報お待ちしてますってことで。毎度、すんません。 >命令の出現頻度はエミュレーションできるようになってから >統計を取るのが楽かも、と思いますがどうでしょう。 やー、面白そうですな。ぜひやりましょう。 どうせならデバッガーの驚きの新機能にしちゃいましょう。命令出現頻度統計。 出力されたデータをもとにEXE内のコードがカスタマイズできるとか。 夢が広がりますねぃ。へへへ。 >>メンバ関数の呼び方 >いったん変数で受けるあたりがダサいですが、一応呼べます。 >MASMなら直接呼べますが、手動で名前マングリングしないと >いけませんね。 >このコンパイラの制約を回避する方法はあるのだろうか。 変数に代入してるところをトレースしてコードをパクッてきて、 #define Call_m_func(func_name,class) __asm ????? __asm ????? _asm ???? とかで書式をでっち上げる。可能でしょうか。 だいたいに、自分でやればいい話なのですが、 いまのところ仕事場にしか環境が無いもんで。 頼ってばっかですいません。いつも長くてすいません。 yutaro [2000/05/02 Tue 23:16:15] [64.236.63.243] 申し訳ありません。 ひとつ前の質問を訂正します。 a DWORD ? 1.mov eax, [a] 2.mov eax, a mov eax, [eax] でお願いします。 yutaro [2000/05/02 Tue 22:20:40] [64.236.81.114] ここで質問するのも2回目になります。 MASMをつい最近はじめました。 さっそくご相談ですが、 1番と2番はどうして結果が違うのか教えてください。 1.mov eax, [変数] 2.mov eax, [レジスタ] Ichi [2000/05/02 Tue 07:16:09] [210.237.206.9] >GBのプログラムは画面表示のレジスターを、 >描画中にもいじって演出したりするので、 >頻繁に照合しないと画面の再現が望む物までいかないのです。 なるほど。失礼しました。 一ライン描画されるごとにパレットを変えて 擬似的に色数を増やす、と言うのと同じですね。 質問があります。 DPMIを使って、仮想86モードのタスクを作ろうと思うのですが、 なかなかどうしたら良いのか分かりませんので、 次の理解が正いかどうか教えていただけないでしょうか。 1.TSSのディスクリプタはGDTに置かなければならない。 2.DPMIを使ってではGDTを変更できない。 3. 2より新しいタスクを自分で作ることは出来ない。 4. 3より、自分自身を変更して仮想86モードのタスクにすれば良い。 3辺りが間違っているような気がするのですが... もし間違ってたら、新しいタスクを作る方法も教えてください。 よろしくお願いします。 cels [2000/05/02 Tue 03:24:05] [203.180.144.206] to ずとしさん >lea ebx,jmp_table0 >add eax,ebx うざいというここですが、 add eax,offset jmp_table0 でいけるはずです。 jmp命令のテーブル作るのはあまり効率的とは思えません。 アドレステーブルを作って jmp [eax] のほうがよいのでは。 なにか理由があるのでしょうか。 命令の出現頻度はエミュレーションできるようになってから 統計を取るのが楽かも、と思いますがどうでしょう。 >メンバ関数の呼び方 ちょっと考えてみました。 Fooってクラスがあって、メンバbarを呼びたいとします。 Foo t; void (Foo::*f)(int) = &Foo::bar; _asm { lea ecx,t push 5 call f } いったん変数で受けるあたりがダサいですが、一応呼べます。 MASMなら直接呼べますが、手動で名前マングリングしないと いけませんね。 このコンパイラの制約を回避する方法はあるのだろうか。 ずとし [2000/05/01 Mon 23:22:02] [210.147.66.101] >(http://www7.freeweb.ne.jp/computer/ichi98/opinion/t0002.html) ややや、ありがとうございます。わざわざ実験していただいたとは。 なんともありがたいことです。 で、ですね。 CPU1命令なんて関数にするほどコード無いんで、ベタで書いてます。 8ビットの貧乏性でCALLが怖いんですよ。 最近のやつはスタックがやたら速いとかも聞いたことあるんですがね。 つまりは、__asm{ lea eax,for_get_code_size0 lea ebx,for_get_code_size1 sub eax,ebx ;ジャンプ命令一個のサイズを教えてもらいます mul [edx]this.DMGopecode ;ゲームボーイのCPUオペコード lea ebx,jmp_table0 add eax,ebx jmp eax ; end_of_operation: jmp cpu_loop ;命令実行完了しました ; code0: ;nop jmp end_of_oeration code1: code2: ; jmp_table0: jmp code0 ;nop jmp code1 for_get_code_size1: jmp code2 for_get_code_size2: ; } //end of __asm って感じで書いたと思います。思い出して書いてるので正確じゃないです。 いやー遠慮の無い'jmp'しまくり具合がとってもデンジャラスですねぃ。 ジャンプ先の計算で'lea'がウザイのですが、ラベルのプログラム番地を 直でオペランドにもってきたらなんだかバグッたのでこうしてあります。 なにか情報があればありがたいです。 >出現頻度の高い命令「だけ」個別にチェックして、そのあと >ジャンプテーブル等の速い方法で分岐すれば良いと思います。 命令の出現頻度なんて。 あ、'daa'はあんまり使わないですね。'ld a,a'とかもたぶんいらないですね。 出現頻度低いのを見つけても、なんにもならないですねぇ。 ひとまず仕上げ段階までほっぽっときます。 >どこまで描画された(はず)かのカウンタを作って、 >実行が中断したらそこまで描画する、というはどうですか? 「実行が中断した」がどの状態のことだかわかりませんが、 カウンターを作ってやってはおります。 GBのプログラムは画面表示のレジスターを、 描画中にもいじって演出したりするので、 頻繁に照合しないと画面の再現が望む物までいかないのです。 カウンターはCPU処理、画面処理の切り替えの最適化の道具ということで。 ふう、いらんアセンブリとか埋めて長くなりました。 こういう書き込みはだめでしょうか。 ずとし [2000/05/01 Mon 23:21:55] [210.147.66.101] NELSさんへ。 GBアセンブラなら、うーんと、 「DMG」とかで検索かければいけるんじゃないでしょうか。たぶん。 たしか、フリーのアセンブラ、あったはずです。海外にも、たしか。 あのぅ、GB、詳しいですよ。 マルヒなことでなかったらいろいろ。聞かれりゃお答えすると、思います。 で、そういう質問がこのBBSで容認されれば、ですが。 NELS [2000/05/01 Mon 11:38:23] [210.232.69.58] はじめまして 実は、GameBoyでアセンブラで 組みたいのですが 参考になるページなどございませんでしょうか コンパイラとリンカはあるのですが DL先ではC言語で組んでいたもので アセンブラでの組み方がわかりませんでした。 どなたかご存じでしたらお教えくださいませ。 Ichi [2000/04/30 Sun 06:56:16] [210.237.206.8] 調査結果 to Miniraさん >これを利用してプログラミングの勉強をしようと思うのですが、やりかたはあるでしょうか。 アセンブリ言語のサイトなのでアセンブラを紹介します。 THE ARROWSOFT ASSEMBLERというのが、無料で使えますので、 試してみてください。(確かMASM 2.0互換です。バグまでも) http://www.vector.co.jp/soft/dos/prog/se014771.html to ずとしさん: >@ジャンプテーブルの件。 >つまりはすべて条件ジャンプのif-else if-else -...... で >順番も考えてならべると、速くなるであろう、 調査してみました。結果、256の場合はジャンプテーブルが (調査した中では)一番速いという結論になりました。 そしてただのif-elseだけでは論外でした。 (http://www7.freeweb.ne.jp/computer/ichi98/opinion/t0002.html) というわけで、NEWさんのおっしゃる様に、まず 出現頻度の高い命令「だけ」個別にチェックして、そのあと ジャンプテーブル等の速い方法で分岐すれば良いと思います。 >なので、CPU実行プログラムと、液晶画面描画プログラムとを、頻繁に行き来するんですよ。 どこまで描画された(はず)かのカウンタを作って、 実行が中断したらそこまで描画する、というはどうですか? Minira [2000/04/29 Sat 19:02:05] [210.253.226.120] はじめまして。 知り合いからPC98のノートをもらいました。 表面がフェラーリの色に塗られているので、心配でしたが動くようです。 ハードディスクは合計で500Mくらいあると思います。Windows3.1が入っています。 これを利用してプログラミングの勉強をしようと思うのですが、やりかたはあるでしょうか。 よろしくお願いします。 yutaro [2000/04/27 Thu 23:18:12] [152.166.28.123] ずとしさんアドバイスありがとうございました。 早速がんばってみます。 Ichi [2000/04/26 Wed 06:34:30] [210.237.205.247] http://www7.freeweb.ne.jp/computer/ichi98/ さっき http://www.vesa.org/ へ行ったら、仕様書が有料の様で面食らいました。 >ずとしさん >えーと、僕のはスタンダードでしたねぇ。最適化の設定が >いじれねぇと思ったらそういうことなんですね。 裏技があるんですよね、これが。でもここで書くのは相応しくないと思うので、 メールがいいでしょうか。 ずとし [2000/04/26 Wed 00:34:39] [210.230.144.173] やっぱりしばらく厄介になることにしてもいいですか。 >standardだと高度な最適化をしてくれないので別です。 えーと、僕のはスタンダードでしたねぇ。最適化の設定が いじれねぇと思ったらそういうことなんですね。 プロフェッショナルでコンパイルかけると違うモノができるわけですな。 人のやつ間借りして使わしてもらうとよさそうですね。 @ジャンプテーブルの件。 つまりはすべて条件ジャンプのif-else if-else -...... で 順番も考えてならべると、速くなるであろう、 ということであってますよね。 Cで書き直すときについでにやるということで先送ります。はぁ。 大変参考になりました。 ....実は2バイト命令で同様の超多方向分岐がもう一個要ったりします。 >エミュレータ作ってるんだけど、速度的に問題なかったんで、ゲーム >ボーイなら普通にCで書いても行けそうな気がしますが...。 エミュレーターでなしにデバッガーを作りたいのです。 ブレークポイントでCPU止めると、同時に画面の描画も止まったりするやつです。 描画ラインの途中とかでも、ぴたぁっと。 なので、CPU実行プログラムと、液晶画面描画プログラムとを、頻繁に行き来するんですよ。 133MHzの開発に使ってるやつでは、動作はもはやあきらめ状態です。 @メンバ関数の呼び方 クラスへのポインタからいくらか行ったところに、 メンバ関数へのジャンプ命令が並んでたのをトレース中に見た気がします。 ヘルプには呼び出せないって書いてあったけど、 そのへんいじくりまわしてれば、一応可能なんじゃないでしょうか。 ただ、インラインアセンブラがメンバ関数呼び出しの書式を サポートしてないだけじゃないかと思ってます。 適当なこと言ってるので、信用しないでくださいね。 長くなりまして。ではまた。 yutaro [2000/04/25 Tue 22:28:10] [152.200.157.145] 質問させていただきます。 Visual C++のインラインアセンブラから クラスのメンバ関数をCALLしたいんですが、 CALLの方法を知っている方アドバイスをお願いします。 よろしく!! houbou [2000/04/25 Tue 19:19:13] [203.104.140.200] Codename:F ども。もう忘れられているhoubouです。 そういえば今までDOSのLIB.EXE互換コマンドは見かけなかったの ですがついこの間見つけたので報告しておきます。 ftp://ftp-fd.inf.fh-rhein-sieg.de/pub/freedos/local/ lib-sk???.zipというがそれです。 では。 NEW [2000/04/25 Tue 09:11:34] [210.251.66.227] >VCのほうが速いんですねぇ。げーん。 >なんも考えずに、Cで書いてないところまでアセンブラで組みかけてしまいました。 >直した方がいいんですね。 せっかく書いたのだから、そのまま使ってもよいとは思います。 ただ、デバッグ等を考えると、Cの方がよい場面が多いです。 >でも、ゲームボーイのCPU256命令文のジャンプテーブルとか作っちゃったし。 >switch~ case: で書くの、めんどくさそう。 ジャンプテーブルを使用すると、間接ジャンプを使う事になります。 間接ジャンプは、ジャンプ先がその命令を実行するまで確定しない ので、最適化でもっとも避けるべき方法だったりします(^^; 普通の条件ジャンプ等は、分岐予想を行い、かなり高い確度で跳び先を 予想し、ジャンプする前から跳び先の命令のデコードを始め、パイプ ラインが乱れない様になっています。パイプラインが機能して始めて、 規定のクロック数で動作しますので、一度乱れるとめちゃくちゃ遅く なってしまいます。 ただし、VCの場合はswitch〜caseでジャンプテーブルを作るので、 この部分はアセンブラで作っても変わらないと思います。また、256個 なので、数も多いですし。 解決策としては、256個全部の出現確率が一定ではないはずなので、 なるべく頻繁に使われる命令からチェックし、あまり使われない命令を テーブル化するとか、ハッシュ検索を使うとか、アルゴリズムの方で まずは最適化をはかるべきだと思います。アセンブラに置き換える のは、最後の手段でしょう。 >フラグのことですが、Z80とビットの並びが同じならそのままコピーとか考えてたんですけど、 >アセンブラで書かないほうがいいならもういっかぁ。 Z80とは違うと思いますよ。 大学の後輩が、M88とかいうWinで動く懐かしのNEC PC-8800シリーズの エミュレータ作ってるんだけど、速度的に問題なかったんで、ゲーム ボーイなら普通にCで書いても行けそうな気がしますが...。 Ichi [2000/04/25 Tue 07:04:41] [210.237.206.30] http://www7.freeweb.ne.jp/computer/ichi98/ >ずとしさん >VCのほうが速いんですねぇ。 standardだと高度な最適化をしてくれないので別です。 (裏技で最適化もありますが) >CPU256命令文のジャンプテーブル これは多分速いと思います。256なら。20くらいだと なんとも言えないところですが。 ジャンプテーブルはパイプラインを破壊する様ですから。 # でもVCはswitch-caseをジャンプテーブルに最適化するらしい... >澤口@大崎さん >たしかにそれは新機軸ですね。作りが同じなら、余計なタスク >スイッチのない分、DOS 版の方が早くなるでしょう。 >期待してます。わたしも 9801 でしか走らないソフトを多数 >抱えているもので。 ありがとうございます。早速更なる質問をさせていただきます。 >大昔は PC9801 上で PC/AT 用ソフトを走らすためのドライバ >ってのがありましたが。 テキスト画面がある分、98の方が有利なんでしょうかね。(謎) では、質問です。 テキスト画面とグラフィック画面を表現するのに、640*480*16の VGAでは力不足なので、SVGAを使おうと思います。VESAというのが 標準らしいのですが、このとき、画像を表示(ビデオカードに転送)する にはどうしたら良いのでしょうか。 関連サイトでもいいので、教えてください。 ずとし [2000/04/24 Mon 23:05:18] [210.249.23.72] VCのほうが速いんですねぇ。げーん。 なんも考えずに、Cで書いてないところまでアセンブラで組みかけてしまいました。 直した方がいいんですね。 でも、ゲームボーイのCPU256命令文のジャンプテーブルとか作っちゃったし。 switch~ case: で書くの、めんどくさそう。 8ビットCPUだから変数とかほとんど8ビットだし。 8ビットレジスタ上位下位ともに使いまくり。 あー困った。 フラグのことですが、Z80とビットの並びが同じならそのままコピーとか考えてたんですけど、 アセンブラで書かないほうがいいならもういっかぁ。 大ショックなり。 ひとまずアセンブラで続きつくって動くようになってからCに直すかなぁ。 無念。無益。 ものすごく、勘違いでした。テクノロジーの進歩をナメておりました。 しかし新たな興味も沸き立つのでありました。へへへ。 まずは、やっぱり、書物あさりですね。 また、お世話になるかもしれません。 そのときはよろしくお願いします。もっかいはじめまして言うと思いますが。 澤口@大崎 [2000/04/24 Mon 14:16:14] [210.141.243.66] 澤口@大崎です。 to Ichiさん: >遅いからです。98用コードを仮想86モードで動かして、 >VRAM、I/Oポート等へのアクセスを捕まえてやる、 >くらいに干渉を抑えれば速くなるかな、と思いまして。 >Windows上で出来ればいいんですが、Windowsが許して >くれなそうなので、DOS上でやることにしたのです。 たしかにそれは新機軸ですね。作りが同じなら、余計なタスク スイッチのない分、DOS 版の方が早くなるでしょう。 期待してます。わたしも 9801 でしか走らないソフトを多数 抱えているもので。 大昔は PC9801 上で PC/AT 用ソフトを走らすためのドライバ ってのがありましたが。 NEW [2000/04/24 Mon 10:10:42] [210.251.66.227] > movsz/movzxなんかを使えば8bit->32bit変換が movsx/movzxの間違い(^^; >あと、別件ですが、フラグレジスタの各ビットにどのフラグが割り当てられているか。 >と、ビット操作(フラグのじゃなくて)の命令があれば教えていただきたいです。 フラグは、おいらは記憶してませんが、x86の本で、lahf/sahf命令 のところに載っていると思います。 ビット操作って、シフトとかじゃなくて? 何か専用の命令って事ですか? 何か命令ありましたっけ? > ALL NECの8086互換チップであるV30とかは、INS、EXTとかいう謎な命令が ありましたが、普段はand、orとかしか使わないから覚えてない(^^; 出来る限り簡単な命令を組み合わせた方が、高速化にはききますよ。 loop命令なんて、いまや使わないしね。遅いから(互換チップ除く)。 NEW [2000/04/24 Mon 10:01:04] [210.251.66.227] ずとしさん: >そこで疑問があるのですが、VCの最適化を通してはかれたコードと、 >命令表から使える命令を探している状態(つまり初心者)の手書きコードとを比べても、 >手書きのほうが速く動くものなのでしょうか。 これはIchiさんも答えていましたが、VCの最適化コードの方が 速いと思われます。x86は奥が深いですよ〜。 >リスティングではかれたコードと比べると、明らかに命令の数は手書きのほうが少ないのですが、 >動作もよくわからなければ、サイクル表とかもないので、はっきりとわかりません。 実行されるマシンのCPUによって変わるので、一概には言えませんが、 もやはサイクル表はあまり意味を成さない世界です。 > x86 少なくともP6(PentiumPro)以降のアーキテクチャでは、x86命令を デコードして、更に細かいμ命令に置き換わった挙げ句、OOO(Out Of Order) 実行を行うようになっていますし、命令のデコード状態や、キャッシュの 状態等でコロコロと実行速度は変わります。(キャッシュにヒットして いないメモリをアクセスしようもんなら、規定サイクルの数十倍時間 がかかるなんてざらですし...。) 最適化をするなら、正確な時間を測れるプログラムを書いて、実際に 測ってみるしかないです。また、最適化支援ツール(V-Tuneなど)を 使う作戦もありますよ。 >たとえば、32ビットのCPUで8ビット値の取り扱いは遅くなったりしないかなど、 >気になっています。 これも、一概には言えません。x86で8bitの値を扱う方法は、明示的に 32bit中の下位8bitしか使わない、パーシャルレジスタを使うなどの 方法がありますが、P6以降はパーシャルレジスタは使わない方が良い です。つまり、EAX(32bit)、AX(16bit)、AH/AL(8bit)という風に 同じレジスタをそれぞれの精度で使えるには使えますが、これはあん まり好ましくないです。中でも、AX、AHなんかは厳禁とおいらは 思っています。movsz/movzxなんかを使えば8bit->32bit変換が 楽に出来るので、最下位の8bitは使っても良いです。ただし、これらの 命令はP6以降では速いですが、それ以前のCPUでは遅かったりして、 とにかくx86の最適化は歴史を知る事と慣れが必要です。 長くなりました。 Ichi [2000/04/23 Sun 05:42:59] [210.237.205.233] とりあえず計画のページ >澤口@大崎さん レスありがとうございます。やっぱり簡単には呼び出せないんですね。 リアルモードに戻らねばならないとは。 >あえて新作するココロ 遅いからです。98用コードを仮想86モードで動かして、 VRAM、I/Oポート等へのアクセスを捕まえてやる、 くらいに干渉を抑えれば速くなるかな、と思いまして。 Windows上で出来ればいいんですが、Windowsが許して くれなそうなので、DOS上でやることにしたのです。 >ずとしさん >VCの最適化 (略) >手書きのほうが速く動くものなのでしょうか。 初心者のと比べたら、VCが最適化したものが速く動きます。 ずとし [2000/04/23 Sun 02:38:39] [210.249.21.110] はじめまして、8ビットアセンブラ使いでC、C++の勉強を最近やりはじめました。 で、WINDOWSで動くゲームボーイデバッガーを作ってるのですが、 エミュレーション部分の高速化のために、VCのインラインですが、 アセンブリを混ぜてみています。当初のCの勉強という目的がボケてしまっていますが。 そこで疑問があるのですが、VCの最適化を通してはかれたコードと、 命令表から使える命令を探している状態(つまり初心者)の手書きコードとを比べても、 手書きのほうが速く動くものなのでしょうか。 リスティングではかれたコードと比べると、明らかに命令の数は手書きのほうが少ないのですが、 動作もよくわからなければ、サイクル表とかもないので、はっきりとわかりません。 たとえば、32ビットのCPUで8ビット値の取り扱いは遅くなったりしないかなど、 気になっています。知らないところで基本的な勘違いとかもありそうで。 あと、別件ですが、フラグレジスタの各ビットにどのフラグが割り当てられているか。 と、ビット操作(フラグのじゃなくて)の命令があれば教えていただきたいです。 えー、それから、インラインアセンブラ特有の書式について、よくわからないことが多いので、 参考になる情報をいただければ。 お初で聞くばっかりになりますが、どうかよろしくお願いします。 澤口@大崎 [2000/04/22 Sat 15:17:58] [210.141.243.66] 澤口@大崎です。 あまり関係ないんですけど、 BeOS は 5.0 から フリーになってましたね。こいつなら対応している のかも知れない。(無責任モード) ↓ http://www.be.com/products/freebeos/ 澤口@大崎 [2000/04/22 Sat 15:09:18] [210.141.243.66] 澤口@大崎です。 to Ichi さん: プロテクトモードから DOS コールを呼び出すには、 一旦リアルモードに戻ってからコールし、その後再び プロテクトモードに戻る、という手続きを踏みます。 DPMI 規格でサポートされていると思うのですが。 市販やフリーの DOS Extender でもここらの機能はサ ポートされているのが普通です。 ただ、この場合(プロテクトモードからリアルモードの BIOS 呼び出しもそうですが)呼び出しオーバーヘッド が非常に大きくなります。 フリーOS のソースを参考にして、自前でプロテクトモー ドのドライバを実装したほうがパフォーマンスが良くなる と思います。 ところで、PC98 エミュレータって色々あると思いますが ↓ http://www.blk.mmtr.or.jp/~abetti/ あえて新作するココロは? がんばって下さい。 Ichi [2000/04/22 Sat 07:20:48] [210.237.206.18] Ichiのプログラミング小ネタ集 初めまして。Ichiといいます。MASMで検索していたらここを見つけ、 こんなにアセンブリ言語をやっている人が集まるところが今でも あったなんて、と感激しました。過去ログも全部読んで、今 めぼしいサイトを回っているところです。 一応アセンブリ言語(x86系)歴は4年ですが、最近2年はほとんどやってません。 さて、私は今AT互換機で動くPC98エミュレータを作ろうと企んでいるの ですが、いかんせん覚えることが多すぎてなかなかうまくいきません。 これから質問することも多いかと思いますが、一つ、よろしくお願いします。 (長くてすみません) 早速ですが(爆) DOS上で保護モードのプログラムを実行している際に、 当該プログラムはDOSファンクションコールを呼び出せるのでしょうか。 出来るならばどの様に呼び出すのでしょうか。 さかもと [2000/04/14 Fri 18:52:49] [210.171.3.34] さかもとです。 NEW様、歩野零一様、本当にありがとうございました。 う〜ん、かなりお馬鹿な勘違いをしていたようで・・・。 で、肝心の「SSE」の件ですが、 お教えいただいたサイトを手掛かりに、 もう少し探求してみたいと思います。 また、結果が出ましたらご報告いたします。 OS付属のデバッカには、ばっちしSSE命令が 表示されているので、使えるとは思うんですが・・・。 あ、OSは・・・BeOSなんです。 うわ〜ごめんなさい〜。(?) ITA [2000/04/14 Fri 10:58:07] [210.233.25.3] 最近更新をサボり気味 カトさん、ありがとうございました。 なんとか希望の動作をしてくれました。 その他の皆さん(個人的にメールをくれた人も含めて)、ありがとうございました。 またわからないことがあったら、質問させていただきますので、その時はよろしくお願いいたします。 歩野零一 [2000/04/14 Fri 07:11:50] [210.238.143.85] さかもと様 OSが何かはわかりませんが、こちらが参考になるかもしれません。 http://www.me.ics.saitama-u.ac.jp/~fujita/ http://www.aial.hiroshima-u.ac.jp/~sakai/Linux/gogo2/ SSEはOSが対応していないとダメとも書かれていますね。 ディストリビューションに依存するようです。 Anatrium [2000/04/14 Fri 01:00:38] [210.135.18.220] LinuxやFreeBSDなどのUNIX系のOSのオブジェクトコードの形式、ライブラリファイルの形式や実行ファイルの形式はどのようになっているのでしょうか? NEW [2000/04/13 Thu 19:38:08] [210.251.66.227] >そこでは、MMXなら大丈夫なんですが、SIMD命令を認識してくれま >せん。 >「そんな386命令ないよ」ってアセンブラからエラーが出ます。 SIMDってSSEの間違いかな? SIMDは、Single Instruction Multi Dataの略で、字のごとく、 1つの命令で、複数のデータを扱う命令形態の事を指します。 従って、MMXもSIMD命令の一種です。 SSEは、PentiumIII以降に搭載された単精度浮動小数点のSIMD命令群 で、Streaming SIMD Extentionの略だったと思いますが、これですか? っておいらGCCじゃないからわからんすけど(^^; さかもと [2000/04/13 Thu 18:58:44] [210.174.82.36] 始めまして、さかもとと申します。 (じつは、あまり直接アセンブラとは関係ないのですが・・・。) 私は、GCC(2.9)でインラインアセンブラを利用しているのですが、 そこでは、MMXなら大丈夫なんですが、SIMD命令を認識してくれません。 「そんな386命令ないよ」ってアセンブラからエラーが出ます。 場違いでしたら申し訳ないのですが、 対処法をご存知の方がおられましたら、 情報へのポインタでも結構ですので、ご教授ください。 よろしくお願いします。 K.S [2000/04/09 Sun 22:07:31] [210.238.172.131] Assembly language 質問です。 IBM PC/AT 及びその互換機で広く採用されている「サウンドブラスタ ー」に搭載されているDSP(CT13xxシリーズ)が、Windows において、 8ビットモノラル、サンプリング周波数11.025kHzのPCMデータを扱う 時の、「データチャンク以降のフォーマット」をご存知の方、いらっし ゃいませんか?ここでいうフォーマットとは、テキサスインスツルメン ツのTMSシリーズの「Qnフォーマット」の、CT13xxシリーズ版を知りた い、ということです。よろしくお願いします。 力卜 [2000/04/06 Thu 14:10:51] [192.51.44.12] 間違っていました。ゴメンなさい。 mul dx は、dx(上位16ビット):ax(下位16ビット)に ax * bx の値を代入するのでしたね。 だから、 6: dx = 10; /* mov dx,000ah */ は不要で、 13: ax = ax * dx; /* mul dx */ の前に、 12.5: dx = 10; /* mov dx,000ah */ としなくてはなりませんでしたね。 あと、余白として空白を複数入れていたんですが、 みごとに詰まって表示されますねぇ。 見づらくなってすみませんでした。ではでは。 力卜 [2000/04/06 Thu 13:55:44] [192.51.44.18] ITAさん。 C言語ならバッチリだと思うので、8086のアセンブリ言語のレベル に落とし易いようにCソースで書きました。コメント内に8086用の ソースコードも書きましたので参考にしてみてください。 このサブルーチンの仕様は以下です。 - ds:bxにasciz文字列へのポインタを設定してdec2binを呼ぶ (near call) - 文字列には、文字としては数字(30h〜39h)しか現れないことが 前提になっている(14行目) - 戻ってきたときにはaxに数値が入っている - bx,cx,dxとフラグの内容は破壊される 1: /*dec2bin: */ 2:unsigned short dec2bin ( char *bx ) { 3: unsigned short ax, dx; 4: unsigned char ch, cl; 5: ax = 0; /* mov ax,0000h */ 6: dx = 10; /* mov dx,000ah */ 7: ch = 0; /* mov ch,00h */ 8:label1: /*label1: */ 9: cl = *bx; /* mov cl,[bx] */ 10: bx ++; /* inc bx */ 11: if ( cl == '\0' ) /* cmp cl,00h */ 12: goto label2; /* je label2 */ 13: ax = ax * dx; /* mul dx */ 14: cl &= 0x0f; /* and cl,0fh */ 15: ax += cx; /* add ax,cx */ 16: goto label1; /* jmp label1 */ 17:label2: /*label2: */ 18: return ax; /* ret */ 19:} …もちろん、mov ax,0000h なんかは xor ax,axにした 方がよいとか英字などが出てきたときのエラー処理 があった方がよいとかあるでしょうが、とりあえず 理解しやすいと思われるように簡単に書いてみました。 ではでは。 NEW [2000/04/06 Thu 13:53:14] [210.251.66.227] うーん質問の趣旨が分かりづらいのですが、 > ファンクションコールで外部からの入力を受け付けたときと > いうのは、内部的には文字列としてしか扱われないのでしょうか? > つまり、外部入力を数字として扱うことは可能なのでしょうか? > 現状、「123」という外部入力があった場合、データを保持する > エリアでは、「31 32 33」という文字列として保持されます > よね。これを「7B」として保持する方法をご存知の方いらっ > しゃいますでしょうか? 外部入力というのがまず謎ですが、キーボード等からの入力の ファンクションコールですかね? そのファンクションコールの 仕様がそうなっているなら、それに従うしかないでしょう。 ファンクションの方を改変可能ならば、作り替えてしまえば良い と思います。 123という文字列を数値に変換するのは、入力の数値が10進数なら、 下の桁から順に、10^nしたものと値を掛けて総和を求めれば良い でしょう。この例なら、nの範囲は0〜2(3文字だから)、 一番下の桁は 3 * 10 ^ 0 = 3, 二番目の桁は 2 * 10 ^ 1 = 20, 三番目の桁は 1 * 10 ^ 2 = 100, これの総和は、123となります。 これはアセンブラというより、アルゴリズムの話ですね。 とりあえず、Cが出来るのであれば、Cで書いて、それをアセンブラに するのが良いと思いますよ。 環境にもよりますが、Cの標準関数的なものはアセンブラには 基本的に存在しないと考えて、全て自力で作る覚悟が必要です。 もちろんライブラリやファンクションコールに用意されているなら それに超した事はありませんが、何も用意されていない事はざら ですから。 ITA [2000/04/06 Thu 10:26:13] [210.233.25.3] アセンブラとは関係ない僕の子供のこと はじめまして。ITA と申します。 この度、転職いたしまして、アセンブラをマスターしなければならなくなりました。具体的なCPU名はちょっと割愛させ得いただきます(同じ職場の人が見てたら笑われっちゃう)が、PHSのCPUとだけいっておきます。 今まではC言語でのみプログラムしていたので、アセンブラはまったくの初心者です。それなので、Z80 から勉強をはじめて、やっと今週 8086 まできました。 そこで質問があります。 ファンクションコールで外部からの入力を受け付けたときというのは、内部的には文字列としてしか扱われないのでしょうか?つまり、外部入力を数字として扱うことは可能なのでしょうか? 現状、「123」という外部入力があった場合、データを保持するエリアでは、「31 32 33」という文字列として保持されますよね。これを「7B」として保持する方法をご存知の方いらっしゃいますでしょうか?逆に、16進の数値を10進で外部表示する方法もご存知でしたら、あわせてお教えいただければ、と思います。 一応、過去のログを拝見しましたが、こんな基本的な質問をされている方はいらっしゃらなかったので、今回質問させていただきました。 なお、回答が長くなるようでしたら、メールでも結構です。 よろしくお願いいたします。 歩野零一 [2000/04/05 Wed 22:35:35] [210.251.4.68] NEW様 遅れましたが、レスありがとうございます。 御礼まで。 fnami [2000/04/05 Wed 13:57:53] [202.238.80.25] kakushiさん: >>>AND EAX,imm32 → Clocks 1 >>>AND r/m32,imm32 → Clocks 1/3 >> >>これは、第一オペランドがrのときは1クロック、m32のときは3クロックということです。 >でもなんでわざわざ「EAX」と「r」に分けて表記してある>のでしょうか? >やはり何か意味があると言うことなのでしょうか? AL,AX,EAXをオペランドにする場合にだけ、短い命令エンコーディングが使えるからです。 25 78 56 34 12 AND AX,12345678H 81 E1 78 56 34 12 AND CX,12345678H 短い命令エンコーディングでも、たいていは、実行時間は同じですが、短くなる場合もあります。長くなることもありますが、例外的です。 NEW [2000/04/05 Wed 10:04:34] [210.251.66.227] >それは、クロック数は同じでも、オペコードが違うからだと思いま >す。EAXレジスタを用いた時のオペコードは「26 id」で、そうで >ないときは、「81 id」です。 そのとおりでしょうね。今となっては遺物ですね。 > コードの違い Intel系のCPUは、レジスタの利用方法を特定するという文化の上で 進化して来たので、この様になっているんですね。 nvacaworks [2000/04/05 Wed 00:32:41] [210.131.1.168] nvacaworks to Kakushiさん >fnamiさんのご説明によれば、第一オペランドがr >即ちレジスタのときにAND命令は1Clockということですよね。 >でもなんでわざわざ「EAX」と「r」に分けて表記してあるのでしょうか? >やはり何か意味があると言うことなのでしょうか? それは、クロック数は同じでも、オペコードが違うからだと思います。EAXレジスタを用いた時のオペコードは「26 id」で、そうでないときは、「81 id」です。 kakushi [2000/04/04 Tue 22:14:21] [210.224.140.9] >kakushiさん: > >>AND EAX,imm32 → Clocks 1 >>AND r/m32,imm32 → Clocks 1/3 > >これは、第一オペランドがrのときは1クロック、m32のときは3クロックということです。 皆さん、お騒がせいたしました。 恥ずかしいです… 本当にすみませんでした。 と、謝りながらまた疑問がでました。 fnamiさんのご説明によれば、第一オペランドがr 即ちレジスタのときにAND命令は1Clockということですよね。 でもなんでわざわざ「EAX」と「r」に分けて表記してあるのでしょうか? やはり何か意味があると言うことなのでしょうか? 以上よろしくお願いいたします。 今度も的をはずれていたらどうしよう… fnami [2000/04/04 Tue 19:03:14] [202.238.80.26] kakushiさん: >AND EAX,imm32 → Clocks 1 >AND r/m32,imm32 → Clocks 1/3 これは、第一オペランドがrのときは1クロック、m32のときは3クロックということです。 NEW [2000/04/04 Tue 10:55:25] [210.251.66.227] kakushiさん: >AND EAX,imm32 → Clocks 1 >AND r/m32,imm32 → Clocks 1/3 そのマニュアルを見たわけでは無いのですが、おそらく これは、下が3分の1クロックで終わるというのではなくて、 1〜3クロックかかるって事の様な気がしますよ。 >lea edx, [ecx*4] >lea edx, [esi + ecx * 4] >↑何がどう違うのでしょうか?(爆) >僕の素人的な考えだと下の方が計算量が多くて遅くなるような気が >するのですが… 実際にアセンブルして、コードを見るとわかるのですが、 下の命令の方は小さなコードを生成します。 leaの括弧内は、専用のハードウェアが計算しているらしく、 必ず何かの値を加算する様に出来ている様なのです。 つまり、 lea edx, [ecx*4] と書いても、内部的には、 ecx * 4 + 0 と計算しているわけです。 でもって、この0の部分が即値としてコード中に4Bytesも 埋め込まれます。よって、コードが冗長になるのです。 また、上記の様にハードウェアで一気に計算するため、 遅くなったりする心配はありません。 速度は変わりませんが、コードサイズが小さくなる事で、 もしかしたら、キャッシュにより多くの命令がヒットし、 ループなどで大きな速度差を生み出すかもしれません。 つまり、その命令だけの速度を追求するのではなく、もっとマクロな 視点で考えるのも最適化のテクニックの一つです。 kakushi [2000/04/04 Tue 09:52:47] [210.224.140.9] to NEWさん & 皆さん >32Bit環境で、AXはEAXよりもクロック数(バイト数も)多くなり >ますが、その事ではなくて? >それは初耳というか、そんな事ないはずだけどなぁ。 僕もたぶんないと思うのですが、例のCQ出版の本によれば 例えば「pentium デベロッパーズマニュアル」の「25-31」に AND EAX,imm32 → Clocks 1 AND r/m32,imm32 → Clocks 1/3 と書いてあるのですが… どうなのでしょうか? kakushi [2000/04/04 Tue 09:40:13] [210.224.140.9] 皆さんご親切にありがとうございます。 が、まだいくつか疑問が…(^_^;) to 皆さん 「lea」っていうのは第2オペランドの実効アドレスを 第一オペランドで指定したレジスタに格納する命令らしいのですが、 「レジスタの実効アドレス」って何ですか? to NEWさん lea edx, [ecx*4] lea edx, [esi + ecx * 4] ↑何がどう違うのでしょうか?(爆) 僕の素人的な考えだと下の方が計算量が多くて遅くなるような気が するのですが… また、「出力されるコード」ってなんですか? 以上またしても基本的な質問かもしれませんが、 どうかよろしくお願いいたします。 NEW [2000/04/04 Tue 09:23:28] [210.251.66.227] 失礼しました。INT32Sとか書いてるし(^^; まぁ構造体の中身はなんでもいいんです。 とりあえずサンプルっちゅーことで(^^; NEW [2000/04/04 Tue 09:20:26] [210.251.66.227] mlさん: インラインアセンブラのHELPをみたら、SIZEというCでいう sizeofと同様の動作をするものがありました。 って、対象はVCです。 以下サンプルコードです。 // ### sample structure typedef struct _TMP{ INT32S nTT; char cTT; void* pTT; }TMP; // ### 以下の2命令は同意 __asm{ lea esi, [esi + SIZE TMP] add esi, SIZE TMP } こんなんで宜しいですか? NEW [2000/04/04 Tue 09:11:51] [210.251.66.227] kakushiさん: /*ecxを4倍したものをedxに代入*/ lea edx, [ecx*4] これは本当ですよ。また、これで簡単な掛け算は出来ちゃいます。 シフト命令は、Pentiumの場合Uパイプでしか実行できないとか、 色々あるので気を付けないとね。leaも、この命令で算出された 内容を参照するまで1Clock以上空けないとAGIペナルティ食らう から注意が必要だけど。 それと、おいらは、上記の様なケースでは、シフトを使うかな。 もしくは、0クリアされたレジスタを使って、例えば、 lea edx, [esi + ecx * 4] の様に書く事が多いです。何故ならば、実際に出力されるコードが 非常に大きくなってしまうからです。コードサイズが小さくなれば、 その分だけキャッシュに命令やデータを蓄えられますから、なるだけ 小さなコードにする様においらは心がけています。 >また、その本によると、 >「add」「sub」「and」「or」等の命令で「AXレジスタ」を使うと >他のレジスタを使うよりも >クロック数が多くなるらしいのですが、なぜなのでしょうか? 32Bit環境で、AXはEAXよりもクロック数(バイト数も)多くなり ますが、その事ではなくて? それは初耳というか、そんな事ないはずだけどなぁ。 それから、対象のCPUによっても違うから一概には言えないと 思います。P6系ならば、レジスタリネーミングしているから、 内部的には他のレジスタと何ら変わりない筈だし..。 やすひろ [2000/04/04 Tue 02:17:59] [202.230.246.209] すみません たとえば mov ax,imm と mov bx,imm を たとえば add ax,imm と add bx,imm に 修正させてください。 やすひろ [2000/04/04 Tue 02:13:18] [202.230.246.209] みなさん こんにちは kakushi さんへ >現在僕はメガデモ(っぽいもの)を作っているのですが、 >メガデモでは当然「速さ」が超重要になるので、 >アセンブラで書けるところはアセンブラで書いています。 これはこれでとても楽しいですよね(^^ これを言ってしまっては終わりかも知れませんが最適化の定番なので。 コードを吟味してそれなりの効率アップをできる場合もありますが アルゴリズム的なアプローチから手を入れたほうが手軽に? 劇的な効果を得られる場合が多いかも知れません。 >また、その本によると、 >「add」「sub」「and」「or」等の命令で「AXレジスタ」を使うと >他のレジスタを使うよりも >クロック数が多くなるらしいのですが、なぜなのでしょうか? 最近のx86系CPUは色々なアキテクチャーを持った物が存在するので 私も詳しいことは判りませんが 本に書いてある消費クロック数はあくまでもデコード済みの 実行だけに要する時間だと思います。 少なくてもadd,subなどはオペランドにアキュムレータを含むと 命令名が同じでもコード長が変わってきますよね? たとえば mov ax,imm と mov bx,imm こんなのが全体のスループットに関係してこないのかなぁー? 関係無いかな・・・。 実際にはV-TRUENなど使って計測してみるしかないですけど。 プログラム頑張って下さい。 nvaca [2000/04/04 Tue 01:24:17] [203.104.132.149] The Page of Nvaca to Kakushi それは本当です。というのも、たとえばPentiumの場合では、 インテルのマニュアルによると、lea命令はメモリから32ビットレジスタへのオペレーションでも1クロックですむのに対し、 mov命令は、それだけで1クロックを消費します。当然、後者のlea命令を利用したほうが高速になります。 http://www.csl.sony.co.jp/person/fnami/asm.htm が参考になるのではないかと思います。 また、lea命令は、第2オペランドの実行アドレスを第一オペランドで指定したレジスタに格納します。 なぜAXレジスタが早いのかはわかりませんが、もしそうなら、アーキテクチャ上の問題なのだと思います。 kakushi [2000/04/04 Tue 01:00:02] [210.224.140.9] こんばんは。久しぶりに書き込みます。 と言ってもまた質問ですが… 現在僕はメガデモ(っぽいもの)を作っているのですが、 メガデモでは当然「速さ」が超重要になるので、 アセンブラで書けるところはアセンブラで書いています。 そこで質問なのですが、以下のプログラム /*ecxを4倍したものをedxに代入*/ shl ecx,2 mov edx,ecx よりも /*ecxを4倍したものをedxに代入*/ lea edx, [ecx*4] とした方が遙かに速いというのは本当でしょうか? というか「lea」ってどういう命令なのでしょうか? 一応手元にCQ出版が出している「pentiumデベロッパーズマニュアル」 があるのですが、そいつを見てもよくわかりません。(恥) また、その本によると、 「add」「sub」「and」「or」等の命令で「AXレジスタ」を使うと 他のレジスタを使うよりも クロック数が多くなるらしいのですが、なぜなのでしょうか? というか、なんでこんな仕様なのでしょうか? おそらくなにか意味があってこのようになっているのだと思いますが、 僕はまだ初心者なのでよくわかりません。 以上ながながとなってしまいましたが、 よろしくお願いいたします。 ml [2000/04/03 Mon 17:20:47] [133.9.6.38] NEWさん、レスありがとうございます。 >インラインアセンブラではだめですか? 構いません。是非ご伝授くださいませ。 できれば具体的なコード例お願いします。 なにぬねの [2000/04/03 Mon 13:14:35] [202.224.189.53] SAKURAの季節さん、houbouさん、情報ありがとうございます とりあえずがんばってMASMを手に入れてみます。 あまりに初心者のため、基礎を勉強してからまた質問しにきます。 NEW [2000/04/03 Mon 10:43:47] [210.251.66.227] それから、なんかの最適化の本に載っていましたが、 メモリ転送する際に、場合によっては、転送先の内容が 転送元と同じなら転送しない方が良いという、にわかには 信じがたい現象も起きるんですよね。 とにかく、なるべくバスのトラフィックを軽減してやる方が 高速化には繋がると。メモリが応答する間にCPUは、何命令も 実行できるわけですから、まぁ当たり前と言えば当たり前 なんですが...。 もしSSEが使えるなら、転送関数に入ってきた時に、 prefetch命令を使ってキャッシュにローディングして しまうのも手ですよ。SSEが使えなくても、32Bytes単位に キャッシュへのローディングをしておくと、これまた結構 違いますので、お試しあれ。そうそう、キャッシュバンクの 構成によって、単純に32Bytes毎に読み込むよりはインター リーブ(というのか?)した方が良いCPUもあります。 SSE使うと、命令を入れるだけで10%程度は速くなるので、 とっても楽ちんです。 K6-2以降に搭載されている3D Now!にも同様の命令がありますが、 K6の場合、ひえ列にアクセスする事を想定して、アクセスが あったアドレスの次のキャッシュラインをキャッシュにプレ ロードする機能がハード的に備わっているリビジョンがあって、 あまり意味なかったりします(むしろオーバヘッド分、遅くなります) その機能が搭載されていないCPUは、初期のロット付近なので、 数的には搭載されているものの方が多いでしょう。よって、これは 対応してもあまり意味が無いと思います。 長くなりました。 NEW [2000/04/03 Mon 10:32:44] [210.251.66.227] 歩野零一さん: 一般に、CPUの速度の方がメモリの応答速度よりも高速なんで、 あまり意味無いですね。ただ、おいらは出来る限りMMXを使って ますが...。 rep movs命令も、PentiumII以降で、特定の場合には、高速に 転送できるモードになるらしいですが、実際良く分かりません。 後は、WriteCombine? がどこまで効くのか? とか、 チップセット側のWriteBackが何段あるのかみたいな環境にも 依存してしまうので、なんとも言えないですよね。 MMXで転送しておけば、とりあえず64bit単位ですから、将来的に バスの転送方法などに改変があっても、32bit単位よりは効率が 良くなる可能性が高いかなと思って使ってます。 EMMSのオーバヘッドもまぁ最近は無視できるレベルですし。 また、命令の配置も考えた方が良いですよ。 P6がターゲットなら、4-1-1のμ命令順に配置すれば少しは よくなるかもしれません。P6アーキテクチャでは、メモリに 対しての書き込みは、2μ命令になるので、書き込み後に 読み込み2回配置するのが良いかもしれません。そうすると 読み込みと書き込みの命令数が異なるので、leaなどでポインタを 進める、ループする処理の間にうまく潜り込ませるのも手です。 それと、ループの先頭を32Bytesアラインに揃えるなども一つの 手ですね。それをやっても結果が落ちる場合もあって、なかなか 最適化は奥が深いですが。 おいらは、MMXを使う時、プログラムの制御関係には汎用レジスタを 使って、データにMMX側のレジスタを用いるようにしています。 movdとか、結構厄介な命令だったりするんで(PentiumMMXでは)。 NEW [2000/04/03 Mon 10:16:10] [210.251.66.227] mlさん: インラインアセンブラではだめですか? おいらはC++と組み合わせる時は、全部インラインアセンブラでやってます。その方が色々便利です。(細かい事は出来ませんが) それからスケールファクタは、sizeof(structure)で値を算出して、明示的に加算すれば良いでしょう。というかそれくらいしか方法ない様な気がします。 ml [2000/04/02 Sun 03:44:26] [210.197.78.27] 始めまして、最近アセンブラをはじめて、検索エンジンで このページを見つけて掲示板のログをチェックしながら勉強して おります。アセンブラに関する書籍や資料は少なくてわからない 部分はこのBBSでご厄介になりますんでよろしくお願いします。 早速質問なんですがC++のソースとアセンブラをリンクしようと 思ってるんですがメンバ関数のアセンブラからの呼び方が分かりません。 それからポインタ移動などでは例えばDWORDなら4をスケールファクタ として[.. + 4 * esi]などとすると思いますがサイズの大きい構造体 などの場合はどうすればよいのでしょうか。 過去にもこのような質問がありましたらゴメンナサイ。 どうぞよろしくお願いします。 歩野零一 [2000/04/02 Sun 03:15:08] [210.230.131.48] AZUCO様 レスありがとうございます。 うーん、やはりダメのようですね。オーバーヘッド分くらいは 早くなるか?程度の希望的観測だったのですが。 単純作業ではMMXはなんの意味もないですね。 >X68KのXC ver2等が著作権フリーになりました。 XCまだ持ってますよ。出てすぐに買って、昔えっちらおっちら 担いで帰ったものです。 AZUCO [2000/04/01 Sat 18:38:59] [63.12.69.210] X68KのXC ver2等が著作権フリーになりました。 詳しくは@niftyのFSHARPへ! AZUCO [2000/04/01 Sat 18:36:27] [63.12.69.210] MMXでコピー メモリのリードサイクル自体は変わらないのではないのでしょうか? キャッシュに入るコピーだと速くなるかも? Free-DOS また身売りされてたみたいですね(笑) 歩野零一 [2000/04/01 Sat 12:03:17] [210.238.142.3] いつもお世話になっております。 Cにはmemcpy()という関数がありますが、これをMMXで高速化 出来るかどうか、試しにアセンブラで組んで見ました。 仮にこいつの名前をmemcpyX()とします。 ところが、gprofでベンチマークを採ってみると、素のmemcpy() と処理速度が変わりません。(テストは1MBのコピーを1000回ルー プ) この手の処理速度はMMX、非MMXでも変わらないものなのでしょう か? ;; ;; memcpyX.asm ;; ;; void memcpyX(void *dest, void *src, int n) ;; ;; ;; nasm -f elf memcopyX.asm ;; +16 n ;; +12 src ;; +8 dest n equ 16 src equ 12 dest equ 8 section .text global memcpyX align 16 memcpyX: push ebp mov ebp, esp push eax push ebx push ecx push edx ;; eax -> ebx mov eax, [ebp + src] mov ebx, [ebp + dest] movd mm0, [ebp + n] ; count1 movq mm1, [ebp + n] ; count2 psrld mm0, 5 ; 1/32 count, count1 pand mm1, [mask] ; count < 32, count2 movd ecx, mm0 ; Zフラグは変化するか? and ecx, ecx jz near secondphase loop1: movq mm2, [eax] ;32バイト単位でコピー movq mm3, [eax+8] movq [ebx], mm2 movq mm4, [eax+16] movq [ebx+8], mm3 movq mm5, [eax+24] movq [ebx+16], mm4 lea eax, [eax+32] movq [ebx+24], mm5 lea ebx, [ebx+32] loop loop1, ecx secondphase: movd ecx, mm1 and ecx, ecx jz near epilogue loop2: mov byte edx, [eax] mov [ebx], byte edx inc eax inc ebx loop loop2, ecx epilogue: emms pop edx pop ecx pop ebx pop eax pop ebp ret align 16 mask: dd 31, 0 .end houbou [2000/04/01 Sat 01:43:27] [210.172.148.30] Codename:F お久しぶりです。どもhoubouです。 今まで何していたかというと別に逃げていたわけではなく FreeDOS方面に顔だしていたんでこっちはあまり顔を出せません でした。 あ。そうそうHP仮運営ですが立ち上げました。 多分開発者リンクが皆様のお役に立てると思いますので ご利用下さい。宜しくです。 なにぬねのさんへ チュートリアルなら大量にネットのアップされてますので 探してみると良いでしょう。 それとアセンブラですがフリーで入手できるものとして 有名なのはA86,MASM(DDK,32v5),NASMがあります。 たしか洋書でMASMのフルバージョンが添付されているものが あります。高い($70ぐらい)ので私はしばらくDDKで我慢します。 リンカとかはフリーで手にはいるので。 では。また機会が在ればみなさんお会いしましょう! SAKURAの季節 [2000/03/30 Thu 23:59:46] [202.219.216.161] 飯田さんへ レスが遅くなってすみません。 大変ありがたい情報を本当にありがとうございます。 さっそく探してみようと思います。 アセンブラ初心者という方々へ 尋ねてばかりというのは失礼なので、 MS−DOSの内部構造、アセンブラの本で私が使っているものを お知らせいたします。 「速習MASM」山海堂 著者 田中 尚 「Cユーザーのための実践アセンブラ」近代科学者 著者 吉川 敏則 「DOS/Vプログラミングガイド」 アスキー出版局 著者 最上 晃 「MS−DOS完全活用法」 CQ出版社 著者 中島 信行 「MS−DOSプログラマーバイブル」 CQ出版社 著者 阿部 英志 ご参考にしてみてください。 なにぬねの [2000/03/29 Wed 16:33:14] [202.224.189.53] はじめまして アセンブラを勉強をしたいと思ってるんですが、周りに詳しい人がいません。 また本屋さんにいってもどれがいいのか分かりません。 今あるアセンブラのソフトとか、初心者向けに書かれた本を教えてもらえませんか? 能力値としてはC/C++がわかる程度で、 アセンブラは見たことしかなく、触ったことはありません。 基礎知識ゼロです。 澤口@大崎 [2000/03/27 Mon 13:34:54] [210.141.243.66] 澤口@大崎です。 to Matsu さん: わたしも AZUCO さんと同意見です。 エラーコードは何が返っているのでしょうか。 よくあるのがパラグラフとバイト数を混同しているとか。 AZUCO [2000/03/27 Mon 03:01:49] [63.12.69.13] メモリ確保ですが、多分困っているのは、メモリを取得しようとしても、全然確保されない・・・というエラーだと思います。 もし、このエラーの場合には、EXEヘッダのメモリ要求量を必要最小限にするか、プログラムの最初で、自分のメモリブロックをリサイズすると良いとおもいます。 Matsu [2000/03/26 Sun 14:34:22] [202.238.94.151] 8086でプログラムを作っているのですが、メモリ確保の仕方が良く分かりません。どなたか教えて頂けませんでしょうか? INT 21h AH=4Ah,48h,49h あたりのファンクションでやっているのですが、いまいち良く分かりません。 カレーライス [2000/03/24 Fri 13:15:05] [202.211.153.209] 澤口@大崎さんへ がんばって追跡して行こうと思います。 どうも、いろいろと教えてくださり ありがとうございました。 澤口@大崎 [2000/03/24 Fri 11:15:54] [210.141.243.66] 澤口@大崎です。 to カレーライスさん: 8086 の割り込みベクタは、割り込み番号を4倍したアドレスに あります。1BH なら、6CH ですね。 ここに、実際の処理先の FAR ADDRESS が セグメント:オフセ ットの4バイトで格納されていますので、この FAR ADDRESS に 相当するメモリ番地から逆アセンブルをかけます。 すると、その中に AL レジスタが 5 かどうかをコンペアしてど こかにジャンプしているニーモニックがあるはずですから、さら にそこから先を逆アセンブルします。 解析ってのはまぁこんな感じで進めていきます。 内部割り込みを使った処理というのは、製品毎に実際の処理アド レスはまちまちですから、ベクタを取り出してみないとどこの番 地から処理が始まっているのかは誰も分からないんですよ。 「16bit DOS マシンの設計・製作」(CQ 出版)には同じ動作の FDD コントロール BIOS がソース付きで載っていましたが、こ の本も多分絶版。 カレーライス [2000/03/23 Thu 23:10:37] [202.211.153.209] 澤口@大崎さんへ まずはCOMファイルから頑張って行こうと 思います。 ところで、BIOSのアドレスがどこからどこまで なのか教えてください?? 例えば、 フロッピーのセクタへの書き込みである 機能コード05H、割り込み1BH を実行した場合のBIOSのアドレスは どこからどこまでになるのでしょうか?? 澤口@大崎 [2000/03/23 Thu 11:44:44] [210.141.243.66] 澤口@大崎です。 to DGさん: DOS ファンクションの Int 25H とInt 26H を使います。 ↓ http://www.simtel.iif.hu/pub/simtelnet/msdos/c/wr_prot.c 澤口@大崎 [2000/03/23 Thu 11:37:12] [210.141.243.66] 澤口@大崎です。 to カレーライスさん: 逆アセンブルには逆アセンブラを使います。わたしは市販の Sourcer97 というツールを使っていますが、これは主な DOS コールや BIOS 呼び出しは自動的にコメントをつけてくれる ので、ときどき重宝することがあります。 また、メモリダンプにはいわゆるデバッガを使います。 BIOS ダンプといっても特別なしかけがあるわけではなく、デ バッガからみれば BIOS もただのメモリですから、アドレスを 指定してファイルにダンプするだけです。 フリーのものは例えばベクターなどにもいろいろありますし、 ↓ http://www.vector.co.jp/vpack/filearea/dos/index.html ここの過去ログにもたくさん紹介されています。 念のため書き添えておくと、逆アセンブラでファイルを全部解析 しようとすると、すぐ数MB ないし数十MB のファイルになってし まいます。しかも、逆アセンブラ自体はどこがコードでどこが固 データなのかは解析しません。(多少はするが) 自分でニーモニックを読みながら、プログラムの流れに沿って少 しづつ逆アセンブルするのがコツです。 いきなり MS-DOS 解析などといわず、まずは数KB の COM ファイ ルなどでトレーニングしましょう。 K.S [2000/03/23 Thu 10:43:07] [210.251.6.205] Assembly language カレーライスさんへ。 簡単にメモリーダンプ&逆アセンブルするには、MS-DOSに付属の DEBUG コマンドを使うとよろしいかと思います。 使い方は、 drive:\path>debug [解析したいファイル名] です。例をあげると、 c:\temp>debug command.com です。 drive:\path>debug /? で、ヘルプが見れます。ジャンジャンバリバリ解析してください。 ついでに、私のホームページへ訪問してみてください。 けっこうディープなネタ、用意してます。 DG [2000/03/22 Wed 13:27:05] [147.47.111.34] 始めまして。 MS-DOSでフロッピーディスクにセクタ単位で読み書きする方法を知りませんか? 資料、サンプルコードなどがある場所をしっていたら教えてください。 カレーライス [2000/03/21 Tue 19:08:36] [202.211.156.33] 澤口@大崎さんへ >徹底的に追及するのであれば、 MSDOS.SYS,IO.SYS,COMMAND.COM >を逆アセンブルします。 逆アセンブルするには・・・??? 逆アセンブルツールを使うのでしょうか?? >BIOS も、ダンプして逆アセンブルします。 BIOSをダンプするには・・・??? カレーライス [2000/03/21 Tue 19:08:29] [202.211.156.33] 澤口@大崎さんへ >徹底的に追及するのであれば、 MSDOS.SYS,IO.SYS,COMMAND.COM >を逆アセンブルします。 逆アセンブルするには・・・??? 逆アセンブルツールを使うのでしょうか?? >BIOS も、ダンプして逆アセンブルします。 BIOSをダンプするには・・・??? 澤口@大崎 [2000/03/21 Tue 16:35:18] [210.141.243.66] 澤口@大崎です。 to カレーライスさん: どの程度までの調査をするのかによりますが、普通はPC9801の 解析本を見ます。(でも、最近は入手困難かも) 徹底的に追及するのであれば、 MSDOS.SYS,IO.SYS,COMMAND.COM を逆アセンブルします。 BIOS も、ダンプして逆アセンブルします。 あとは、デバッガを使って適当なアドレスにブレークをかけてメモ リをダンプするとかですね。 でも、普通は解析するよりベクタをフックして自作したほうが早い ような気もしますが。 カレーライス [2000/03/21 Tue 13:52:03] [202.211.156.18] MS−DOSの内部の仕組みについてはどのように 調べればいいでしょうか?? また、BIOSはどのようにすればその中身を 調べることができるんでしょうか?? ちなみにpc−9801です。 AZUCO [2000/03/20 Mon 02:37:57] [63.12.69.64] 暇なので、久々に回答に回ります・・・・(笑) COM - PSP=CS=DS=ES=SS という具合にすべてのセグメントが同じに なります。 EXE - PSP=ES,CS,DS,SS という順番でセグメントが並べられます (この並びはどうもDOSの標準セグメント配列らしいです:リンカの マニュアルによると) しかし、当然自分で指定すればこの限りではありません。 ちなみに、データにアクセスするには、DSにデータセグメントの値を 入れないとアクセスできない、のではなくて、 基本的に、ラベルの定義位置によって違います。 たとえば、コードセグメント中で(あるいはコードを示すブロック 中で)定義されたデータは、DSを参照せずにCS参照で(CSセグメント オーバーライドで)アクセスされるわけです。 もちろん、あえてDSプリフィックスで参照も出来ますけど(CS=DSで ないと正しい位置にアクセスできない) まぁもっとも、ソースで明記しなくても、セグメントプリフィックス は勝手に付けられるので、自分ではぴんとこないと思いますが。 一度、DEBUG等で逆アセンブルすると、セグメントプリフィックスが 実は入ってる事が良く分かると思います。 このセグメントプリフィックスはうまく使うと、なかなか面白い使い 方が出来ます。 たとえば、かなり大きな構造体を扱う場合(データベースとか)あえて わざわざESプリフィックスでアクセスするように書いておけば、ESを 切り替えるだけで、大きな構造体を楽に参照できると思います。 こういう事を考え出すと「EMSのアクセスに使えるよね」とか段々 トリッキーな話になるあたりがアセンブラの魅力かも(笑) ChoMo [2000/03/19 Sun 17:56:39] [202.219.231.169] 澤口@大崎さん EXEではDOSが勝手にやってくれるのはわかりましたが、 結論として (1) COMはセグメントレジスタに自分で適切な値をセットする。 EXEはDOSが勝手に適切な値をセットしてくれる。 (2) COM、EXEとも自分でセグメントレジスタに適切な値をセットする。 (3) COMはセグメントレジスタに自分で適切な値をセットする。 EXEはDOSが勝手に適切な値をセットしてくれるが自分でセットしてもよい。 のどれなのでしょうか? どうもよくわからなくて・・・ 澤口@大崎 [2000/03/19 Sun 16:34:13] [210.141.243.66] 澤口@大崎です。 to ChoMoさん: ASSUME 命令ってのはディレクティブ、つまり疑似命令ですか ら、レジスタに何かいれるわけじゃないです。 8086 のアドレスがセグメント:オフセット形式であらわされ ることはご存じだと思うのですが、アセンブラではこのうちオ フセット部分しか面倒見ません。 で、オフセットというのは基準になるベースセグメントアドレ スが決まらないと具体的な数値にすることができませんから、 ASSUME 命令でアセンブラにどこのベースセグメントを基準に してオフセットを計算するのか教え込んでおく必要があるわけ です。 *.EXE の場合は DOS がプログラム開始時に適切な値をセグメ ントレジスタにセットしますから、小さくて、アドレス依存性 のないプログラムはそのまま動いてしまいますが、64K を越え るデータサイズとかコードサイズのプログラムを作ってみると、 ASSUME の必要性の意味が分かります。 ChoMo [2000/03/19 Sun 07:08:39] [202.219.231.176] 始めまして。 アセンブラに興味があるのでやりはじめました。よろしくお願いします。 早速質問です。 dsレジスタにデータセグメントの位置を入れなければならない理由って mov ax, memory_data は mov ax, ds:memory_data となるから データセグメントの位置がわからないとだめってわけですか? でも、 ASSUME cs:_CODE, ds:_DATA, ss:_STACK _CODE SEGMENT start: mov ah, 07h int 21h mov ds:ccx, al ; 20回ループする mov cx, 20 __loop1: mov ah, 02h mov dl, ccx int 21h loop __loop1 ; プログラムの終了 mov ah, 4Ch mov al, 00h int 21h _CODE ENDS _DATA SEGMENT ccx db 0 _DATA ENDS _STACK SEGMENT STACK db 100h dup(0) _STACK ENDS END start dsレジスタにデータセグメントの位置を入れてないのに 普通に動きます。(MASM6でEXEモデル?でアセンブルしました。) ASSUMEでdsレジスタにxxセグメントの位置を入れているのかと思っているのですが、 本には「アセンブルを行う時の情報としてMASMに知らされるだけ」と書いてあるし・・・ どういうことなんですか? 教えてください。 飯田 [2000/03/18 Sat 12:19:00] [210.253.194.83] こんにちわ、飯田です。 SAKURAの季節さんへ、IDEの仕様だったら ftp://fission.dt.wdc.com/pub/standards/x3t13/docs2000.xls をみてその中からATA/ATAPIの仕様書を探すのがよいかと。 多分、ATA/ATAPI-5 revision 2が1番新しいやつだと思います。 あと、使っているマシンのマザーボードに搭載されているチップセット メーカーのホームページからチップセットの仕様書を落としてくれば 必要なレジスタの情報が入ります。もちろんPCIデバイスをサーチして IDEコントローラを探すのも可です。 PCIの情報は残念ですがネットで説明してる場所を僕は知りません。 書籍でしたら CQ出版 OPEN DESIGN PCIバスの詳細と応用へのステップ という本である程度わかりました。電気信号や機械的なことはわかり ませんがソフトで制御することならこれで十分だと思います。 CDROM制御の情報もATA/ATAPIの仕様書に書いてありますが http://www.gaztek.co.uk/ にある公開されているフリーのOSのソースコードを見るのも参考に なるかと。LINUXのソースほど大きくないので見やすいです。 HAG [2000/03/17 Fri 10:04:40] [133.8.33.194] >stray_jackalさん わざわざお答えいただき、どうもありがとうございます。 ちゃんと「OTENKI.EXE」ができました。 初めて実行させたときの「OTENKI」は「KUMORI NOTI HARE」 でした。ここ何日かの間もやもやしていたものが晴れて解決。 よかったです。本当にありがとうございました。 jackal [2000/03/16 Thu 20:38:44] [210.248.188.177] すいません。今の書き込みに半角カナを使ってしまったので文字化けしてしまいました。 訂正 otennki.obj : warning LNK4033: 橘渕洽個の形式を OMF から COFF に変換します otennki.obj : fatal error LNK1190: 無効な岬・襲・゚(晴餅 0x0001) が見つかりました ↓ otennki.obj : warning LNK4033: オブジェクトの形式を OMF から COFF に変換します otennki.obj : fatal error LNK1190: 無効なフィックスアップ(タイプ 0x0001) が見つかりました 。 stray_jackal [2000/03/16 Thu 20:32:21] [210.248.188.177] はじめまして。初めて書き込みします。 HAGさんの質問なんですけど,僕も同じ本を持っているので答えようと思います。(あまり見ていないけどゥ・) otenki.obj : fatal error LNK1190: invalid fixup found, type 0x0001 上のようなエラーが出たとありますが,僕も実際に試して見ました。 ちなみに僕のバージョンは ml:6.14.8444 link:6.00.8168 です。 まず OMF(Object Module Format) と COFF(Common Object File Format) はオブジェクトファイルのフォーマットの形式です。DDKのリンカはOME形式のオブジェクトファイルをCOFF形式に変換してリンクするので,そのときに警告が出たのだと思います。MSDNライブラリ(持ってます?)によるとEDITBIN.EXEツールでOMF形式からCOFF形式に変換できると記載されていました。また,mlのオプションに/coffを付けるとcoff形式のオブジェクトファイルを出力します。 さて本題のエラーについては,Link.exeが32ビットEXEを出力するということが問題だと思います。(詳しくは知りません)僕はVC++6.0のリンカ(DDKのリンカとほとんど同じ)でやってみたんですが,次のようなエラーが出ました。 otennki.obj : warning LNK4033: 橘渕洽個の形式を OMF から COFF に変換します otennki.obj : fatal error LNK1190: 無効な岬W襲k゚(晴餅 0x0001) が見つかりました 同じエラーが出ました。次に僕の使っている16ビットEXEを出力するリンカで試すとうまくいきました。ちなみこのリンカはマイクロソフト製開発ツールのアップデート用のものらしくマイクロソフトのFTPサイトftp://ftp.microsoft.com/Softlib/MSLFILES/LNK563.EXEに置いています。ライセンスをよく読んでから使ってください。(僕は読んでないけどゥ・) ちなみにこのリンカの場合はCOFF形式に変換しなくても良いです。 あとこのプログラムはcom形式なのでmlのオプションに/ATを付けた方が良いのかも知れませんが,付けなくてもうまく動きました。 これでお分かりいただけたでしょうか? 僕も人に教えることができるレベルではないのですが,これからもよろしくお願いします。 SAKURAの季節 [2000/03/16 Thu 13:33:39] [203.141.89.167] はじめまして。 アセンブラの関連情報を探していて、ここにたどり着きました。 Z80や8086時代にかじる程度ですが、アセンブラを やっていたのですが、今またアセンブラを研究しようとして 色々情報を集めているのですが、良い情報があつまりません。 CPUに関する情報は集まったのですが、肝心なIOインターフェースに ついてはほとんど無いのが現状です。 YahooやGooでインターネットを探し、紀伊国屋などの書店のホムペに アクセスするのですがここでもやはり同じ具合です。 どなたか、良い資料をご存知の方がいらっしゃれば、お教え下さい。 必要としている情報は次の通りです。 IDE(E−IDEが特に)インターフェース バスマスターの制御 ATAPIの制御 CD−ROMのネイティブ(MSCDEXを介さない)制御 PCIインターフェース 探し物が多くてすみませんが、よろしくお願いいたします。 HAG [2000/03/15 Wed 09:36:38] [133.8.33.194] Chig.Hag はじめまして。唐突ですが質問です。 「はじめて読むMASM」のOTENKI.ASMっていうプログラムをその まんま打ち込んで、Windows98DDKの中のML.EXEとLINK.EXEで 「OTENKI.EXE」ができるのかと思いきや、LINK.EXEでつまづき ました。次のようなメッセージが出ます。 otenki.obj : fatal error LNK1190: invalid fixup found, type 0x0001 で、他に「OMF to COFF」なんとかいうのも出ましたがEDITBIN でどうにかなりました。とはいえ、単にメッセージが出なくなっ たというだけなんですが…。 なんでなんでしょう。 それで、バージョンなんですが「ML」が「6.11d」で、「LINK」が「5.12.8181」です。Windows98上でMS-DOSプロンプトからアセ ンブルとリンクをしようとしてます(もしかしたら、これがダメな 理由とかだったりして…純粋にDOSじゃなければいけないとか…)。 ものすごく初歩的な質問ですが誰かお答えいただければ、これ幸い です。 それでは。 澤口@大崎 [2000/03/12 Sun 18:48:20] [210.141.243.66] 澤口@大崎です。 to yyynnn さん: 個人売買の掲示そのものは管理人さんに任せるとして・・・ 商用ソフト、特にMS社のものは、購入した個人が使用権を 得るだけですので、他人に譲渡するのは有償・無償を問わず、 明確なライセンス違反です。MS-DOS も同じで、最初の購入 者本人以外には使用権がありません。 強いて譲れるのは、開封も、当然インストールもしていない 場合です。 MS社の人がこの掲示板を見ていたとすると、購入者に10 万円近い請求書が行きかねません。ペナルティー金額だと、 その3倍までありですね。 yyynnn [2000/03/11 Sat 10:02:58] [210.134.2.16] オーバードライブ付パソコン+SCSIカード付HDD(クイックC、BASIC&MASM等) たまに お世話になっています 投稿に問題があるかもしれませんが 今まで私が使っていた パソコンを売却します http://auctions.yahoo.co.jp/jp/auction/7366534 です よろしくお願いいたします価格は1000円からです NEC PC9801DX です CPUは 元386ですが I/Oデータ製の486オーバードライブを積んでいますので快適です 元々の5インチFDDを取り外して 3.5インチFDDを取り付けています(完動です) 外付けHDD 100Mバイト付けます このハードディスクに MS-DOS5.0のほかに 1.C言語のをはじめたての方やこれからの方に最適な MSクイックCが入っています 2,visual-basicの前進 クイックBASIC が入っています 3.INTEL CPUを扱うには 無敵なアセンブラ MASM が入っています 4,その他VZエディター、やユーティリティーも入っています 問題がありましたら 抹消してください Yasu [2000/03/10 Fri 21:06:03] [210.255.37.82] ここの ML て現在やってるのでしょうか? hibiki [2000/03/07 Tue 11:29:04] [202.224.34.252] こんにちは。 だれかTASMの使い方を知っている方はいないでしょうか。 今まで人のソースをみて、見よう見まねで使ってきたのですが、 正式な書き方を知りたくなりまして。 ここでいう使い方とは、「ソースをどのように書くか」です。 例: ".text" とか ".code" (すいません、言いたいことわかります?) Dexter [2000/03/03 Fri 11:56:54] [202.238.104.5] chipsetへのアクセス方法が書いてあるサイトを教えてください。 目的はRev番号やIDなどのステータスを読み出したいのですが、どのようにしたらいいのか、よくわかっていません。 世の中には、そのようなツールも多数出回っていますが、ソースまで公開されているところが見つかりません。 何かとっかかりが欲しいのですが。。。 よろしくお願いいたします NEW [2000/03/03 Fri 10:20:36] [210.251.66.227] NEWです。 >どうもMMXのコードは消化不良な設計の気がしますね。 >痒いところに届きそうで届かないというか…。 僕も、画像関係の仕事なんで色々とMMXを使って最適化するのですが、これだー!と思って設計して実際やってみると、あと一歩のところで命令が使えない(^^; pmaddとか、α合成に最適なんだけど、除算を固定小数点でやろうと思ったら、精度が足りないし(T_T) うまくやれば出来るけど、速くないし...(^^; まぁ、MMXが発売された時点で現実的なところで妥協したという感じですかね。個人的には浮動小数点より整数の方を多様するので、MMXも拡張されて欲しいですね。PenIIIになって命令増えてるけど、「そうじゃないんだよなぁ」と思います。 歩野零一 [2000/03/02 Thu 22:57:19] [210.230.134.214] NEW様、レスありがとうございます。 >「符号付きの16Bitデータ」の乗算です やはりそうでしょうかねぇ。 RGB->YCrCbおよびDCT2の演算ルーチンをしこしこと作っている のですが、どうもMMXのコードは消化不良な設計の気がしますね。 痒いところに届きそうで届かないというか…。 NEW [2000/03/02 Thu 10:13:45] [210.251.66.227] MMXの謎について 歩野零一さん: これは、MMXテクノロジオフィシャルガイドの表記が誤解を生んでいると思うのです。乗算の説明に「ワード」と書いてありますが、実際には「符号付きの16Bitデータ」の乗算です。mulではなくimulと言うと分かり易いかな? これで納得行きました? MajinBear [2000/02/28 Mon 20:55:15] [210.230.150.146] BearFactory/熊の家 はじめまして、柏木といいます。 いままではC/C++だけでしたが、アセンブラに興味を持ち 勉強を始めました。 これからも何かとよろしくお願いします(^^; 歩野零一 [2000/02/28 Mon 04:02:49] [210.251.23.139] ●MMX乗算の謎 さて、私のPCのK6-IIにて次のような条件でpmulhwを行なうと movq mm0, [aaa1] ; NASM form movq mm1, [aaa2] pmulhw mm1, mm0 aaa1: dd 0x000000FF, 0 aaa2: dd 0x00009646, 0 結果: mm1 = 0x00000000_0000FF96H となります。本来ならば 00FFH x 9646H = 0095_AFBAHで、この内上位 16bitを取るならば、96(四捨五入??)になるはずですが、なぜかFF96H になります。 になります。 試しに1111H x 9646H を計算させるとF8F3になります。ソフトバンク から出ているMMXテクノロジオフィシャルガイドの例(pp.91)の例は、 正しく8D94H x CFCBH = 158BH(158B_F05CH)となります。 Linux上でNASMを使っているのですが、NASMの出力ではgdbも任意の位置 でレジスタの状態を直接出力出来ないようで、何処がおかしいのか皆目 見当が付きません。 キャリーが立っている訳じゃないし、これは一体どういうことなのでしょ うか?? Toront [2000/02/27 Sun 23:38:18] [210.131.1.101] すいません。 LinuxなどのUnix用の、 gccなどが吐き出す、aout形式のフォーマットに 関しての情報はあるのでしょうか? Unit Missing Link [2000/02/23 Wed 22:35:04] [210.167.181.103] Unit Missing Link's Web page 'Rhythm' 皆様、こんばんわ Unit Missing Link の Mist! です。 お待ちいただいたログページを以下のようにアップしました。 09/05/99 〜 10/31/99 の書き込みをログページ Message Log 17 に、 11/01/99 〜 12/31/99 の書き込みをログページ Message Log 18 に、 01/01/00 〜 01/31/00 の書き込みをログページ Message Log 19 に移動しました。 とりあえず、場所を作って項目だけでも Assembler FAQs としてアップしよ うかと思っておる次第です。 今後おいでいただける皆様に有用で実際に活用していただける Assembler FAQs とするために、 FAQs アップの際は皆様には内容のチェックをお願いできれば と思います。 そろそろメニューのイラストも変えないといけませんなぁ。 さぁ、 2000 年いってみよう!! NEW [2000/02/23 Wed 00:16:03] [210.251.66.227] はじめまして。 Webをさまよっていたら、このページに辿り着きました。 アセンブラプログラマって世の中から駆逐されていると思ったら、 ちゃーんと活動されているんですね。嬉しい限りです。 おいらも中学1年でZ80を始めてからかれこれ16年になります。 仕事の大半はC++ですが、速度を要求される面ではインラインアセンブラとV-Tuneを使ってセッセとアセンブラで仕事してます。 社内でまともに書ける人間も一人になってしまい、さびしい限りですが、なんか仲間に会えた様な感じがして良いですね。 MLはいろうかなぁ〜。 houbou [2000/02/20 Sun 01:16:53] [203.104.132.85] > っていうか、FAQ誰かつくらへん? > あと、よく参照されるurl集とか。(VESAとかNASMとか) 作っておきましょうか? 一応HPは持っているので(というか永久工事中) 仮ページなら3日〜10日ぐらいで立ち上げられますけど。 もし立ち上げたらURL書いておきます。 管理人さんへ 本ページの別館の件ですが別にムリをして承諾しなくても いいですよ。(^^) Unit Missing Link [2000/02/19 Sat 23:14:21] [210.167.181.103] Unit Missing Link's Web page 'Rhythm' こんばんわ、 Unit Missing Link の Mist! です。 APYON さんへ > Technical の c が抜けてませんか? おぉ・・・ APYON さんにご指摘いただけるまで全く気がつきませんでした。 恐らく掲示板を立ち上げてからずぅ〜っと間違っていたのですね(笑) なんともはずかしぃ・・・ ご報告ありがとうございます、早速修正しまぁす。 AZUCO さんへ > あまり無理をせずに更新してくださいね。 何もできていない管理人ですのに、お気遣いいただきまして本当にありがと うございます。 なんとか現状で時間ができるようになりましたので、少しずつでも Technical Assembler を 2000 年仕様にバージョンアップさせていきたいと 思っています。 AZUCO さん及びにご利用いただいている皆様方に Technical Assembler を できるだけ快適にご活用いただけるように更新他していきたいと思っておりま すので、今後ともよろしくお願いいたします。 皆様あっての Technical Assembler ですからねっ!! ではではっ!! AZUCO [2000/02/19 Sat 17:20:03] [63.12.68.2] 管理人さんへ あまり無理をせずに更新してくださいね。 もともと管理人になった経緯も割と特殊だと思うので(以前の管理人がwebのノウハウを持っていた現管理人のサイトを間借りして始めたサイトで、そのまま現管理人に引き継がれた:だったと思う:笑)みんなもなるべく自分の出来る事をしてあげてください。 といいつつ自分もなかなか何かを出来ないでいるんですけど。 APYON [2000/02/19 Sat 03:47:20] [210.173.233.48] はじめて書きこませていただきます。 アセンブラネタとまったく関係ないですが… 掲示板のタイトル(ブラウザのタイトルバーにでてるやつ) 「Technial Assembler」 Technical の c が抜けてませんか? Unit Missing Link [2000/02/19 Sat 02:25:46] [210.167.181.103] Unit Missing Link's Web page 'Rhythm' こんばんわ、 Technical Assembler の管理をしております Unit Missing Link の Mist! です。 かなりの期間 Technical Assembler の管理ができていなくて、皆様には大 変ご迷惑をおかけしておりますです。 今回ちょいと掲示板の仕様を変更しました。 デザインが崩れるので今までしなかったのですが、快適に掲示板をお使いい ただけるようテーブルタグをはずしました。これで目的部分までの表示時間が 多少改善されたかと思います。 houbou さんへ > #管理人さんへ。もうそろそろ過去ログを移動してください。 > さすがに486な機種だと重いので・・・。 houbou さん、他皆様、本当に申し訳ありません。ご迷惑おかけしました。 応急処置として掲示板のログ削りました。 2, 3日中に過去ログの方もアップしますのでお待ちくださいね。 AZUCO さんへ > っていうか、FAQ誰かつくらへん? > あと、よく参照されるurl集とか。(VESAとかNASMとか) 構想はあるのですがなかなか手がつけられずに今にいたっています。 何も情報を提供できない管理人ですので、 FAQs 位はせっせと作りますね。 リンク集も充実させまぁす。 ではでは、近日中に Technical Assembler の更新を行いますので、しばら くお待ちくださいね。 AZUCO [2000/02/17 Thu 09:26:54] [202.244.60.101] >これから質問する方へ。 >できれば過去ログを読んでから答えが無い場合に限って質問をして っていうか、FAQ誰かつくらへん? あと、よく参照されるurl集とか。(VESAとかNASMとか) え?俺?うーん(滝汗) Gen [2000/02/16 Wed 14:25:04] [210.167.19.5] はじめましてGenと申します 早速質問ですが、最近NASMを使い始めたのですが 付属している逆アセンブラで逆アセンブラしてだしたソースコードを textファイルに保存するにはどうすればよいのでしょうか? ms-dosはあまり使ったことがないのでよろしくお願いします また、NASMについての日本語のページを教えてくだされば幸いです ヘラクレス [2000/02/16 Wed 02:57:35] [202.226.91.228] ヘラクレス はじめまして、ヘラクレスと申します。 今DOSV機のBIOS解析をしてみようと アセンブラの勉強を始めました。 いきなり壁にぶつかってしまったのですが BIOSのデータファイルって*.BINで提供されることが 多いと思うのですが、このファイルのフォーマットって特殊 何でしょうか? 拡張子を.lzhに変えると解凍出来、いくつかのファイルが 出てくるのですが、そのファイルを全て圧縮し直しても 元の容量になりません。 後、ROMに書き込まれる際に解凍され書き込まれるのでしょうか? それとも、.BINファイルが直接書き込まれ、起動する度に 解凍されてメモリにロードされるのでしょうか? 直接アセンブラネタでは無いのですが、教えて下さい。 houbou [2000/02/15 Tue 03:09:48] [203.104.132.162] どうもhoubouです。 kaichanさんへ > ものだったので、「アセンブラを勉強しとくと後が楽だぞ」ということでボクのところにお鉢が回ってきました。 私も知人にアセンブラやるぞと言ったらそういわれたことがあります。なんでもプログラムの動作がわかりやすくなるそうで。 (あと解析とかする場合にも便利かな。) Nvacaさんへ i486エミュレータなら既に作っている方はいますよ。 (記憶が確かならソースコード付きで。) > http://www.rdos.net/ あと、i486,Pentiumの資料ならIntelのHP行ってください。 (ここの過去ログにURLは書いてあります。) #管理人さんへ。もうそろそろ過去ログを移動してください。 さすがに486な機種だと重いので・・・。 #これから質問する方へ。 できれば過去ログを読んでから答えが無い場合に限って質問をしてください。 忙しいのはわかりますが、そういうことを言うと皆忙しい ということに成ってしまい世界が成り立たなくなりますので。(^^; houbouでした。 葵 [2000/02/14 Mon 13:56:50] [38.29.86.228] News Group見てたら LINKが沢山あるサイトをみつけたゥ・ > http://www.eg3.com/ 日本語のサイトでこんな所があればいいのに(-_-;) > http://www.nuvisionmiami.com/kip/asm.htm kaichan [2000/02/14 Mon 13:02:59] [210.166.225.52] houbouさん どうもありがとうございます。早速調べてみます。 ちなみにこのプログラムは、82年2月に完成したプログラムに改良を重ねた年代物で、マニュアルもすでに存在しません。今回の改良は軽いものだったので、「アセンブラを勉強しとくと後が楽だぞ」ということでボクのところにお鉢が回ってきました。 P.S 前回の書き込みの時、名前を書いた後うっかりエンターを押してしまい余計なものを書き込んでしまいました。大変失礼しました。 Nvaca [2000/02/13 Sun 23:31:34] [210.131.1.188] http://www1.webnik.ne.jp/~nishikaw/ はじめまして、Nvacaと言います。 アセンブラは、5年前から使っているのですが、ほとんどが8086向けのものです。 ところが、最近、486のエミュレータを作ろうと思い立って、勉強を始めたのですが、何か、マシン語とニモニックの対応が掲載されている書籍はないのでしょうか。8086/286に関しては、そのような本があったのですが、486やPentiumに関してはなかなか見つかりません。なにか資料などをご存じでしたら、お教えください。 : |
e-mail: mist@e-net.or.jp | Structured Anchor Tree Return to Menu Return to Parent Menu |
Powered by Unit Missing Link. |