![]() |
Message Log 43 | Return to Parent Menu |
Last Updated by 07/01/05(Fri) |
| |||
かなりログがたまってきました!検索できると便利だろうに!? |
| |||
| |||
: wtz [2005/04/30 Sat 15:57:03] [210.237.50.99] http://www3.synapse.ne.jp/wtz/programming/assembler/ >MLの出力はobj形式ではないかと思うのですが・・・ そうなんですか。知りませんでした。すみません。 で、思うんですが、セグメントの名前が BCC のものと違うのが悪さしてるんじゃないかと。 _TEXT segment dword public use32 'CODE' _DATA segment dword public use32 'DATA' _BSS segment dword public use32 'BSS' に変えるとどうでしょうか? AKA [2005/04/30 Sat 10:27:33] [61.19.223.131] やってみましたが、だめなようです・・・ C:\MASM32>coff2omf x.obj xo.obj COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporation ERROR: COFF error: x.obj (coffread.cpp, 1495) : This file is probably an OMF library MLの出力はobj形式ではないかと思うのですが・・・ MLには/coffというスイッチがあって、これを使うと確かにデフォルトとは違う.objファイルが生成されます。 そしてその.objに対してcoff2omfを実行すると正常に変換するようです。 BCCにおいて、メインプログラムを.cで作り、一部を.asmで書いてリンクすることには成功しています。もちろんそれは完動しています。 その際、.asm->.objの生成にはMLを使い、問題はありません。 (そしてbcc32 main.c sub.objなどとして.exe生成できます。) なお、x.asmのエントリポイント(end文のオペランド)を省略した場合、ilink32は成功します。ただ、できた.exeを実行しようとすると不正な処理ダイアログが出ますが・・・ これは実行されてエラーが発生するわけではないようで、TurboDebugger32でロードした瞬間に不正な処理でTD自らも終了します。たぶん異常なヘッダが生成されているのでは、と思うのですが・・・ AKA [2005/04/30 Sat 05:36:44] [61.19.223.131] あれ? 間違えました すみません、無視してください。 wizさん、どうもありがとうございます。 やってみます。 AKA [2005/04/30 Sat 05:21:19] [61.19.223.131] DOSでMASMをやっていたのですが、WINでもアセンブラをやってみようと思った者です。 VCプロセッサーパックのML.EXEと、Borland C++のILINK32.EXEを使って以下のようなx.asmをアセンブル&リンクしてみましたが、アセンブルはノーエラーで、リンク時にエラーが出てうまくいきません。どのようにやるといいのでしょうか・・・? .386 code segment main proc ret main endp code ends stk segment stack dd 1000h dup(?) stk ends end main コンパイル&リンク方法 ml /c x.asm ilink32 x エラー Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Warning: インクリメンタル リンクできません。リンクをやり直します Fatal: Error detected (IMP2357) Fatal: wtz [2005/04/29 Fri 21:00:38] [202.95.44.153] http://www3.synapse.ne.jp/wtz/programming/assembler/ AKA さんへ。多分 Masm は出力するファイルの形式がCOFF(nasm では win32?)ですが Borand C++ の出力は obj 形式なので ilink32 は obj 形式でないと受け付けてくれないんだと思います。 Borland C++ のツールの中には COFF 形式を OBJ 形式に替えてくれるツールが あったと思います。( coff2omf.exe ) それを使ってみてください。 うまくいくといいのですが。 wtz [2005/04/29 Fri 20:52:03] [202.95.44.153] http://www3.synapse.ne.jp/wtz/programming/assembler/ WWWさんへ、マイクロソフト社の DirectX SDK はボーランド社用のライブラリ?を 含んでいるようですね。 http://www.neco.nu/gohodoji/bccfaq/bccfaq.html ここの「DirectX を使ったプログラムの作り方」が参考になるかと。 時間があったら遊んでみようかと思います。 AKA [2005/04/29 Fri 06:03:32] [209.166.177.229] DOSでMASMをやっていたのですが、WINでもアセンブラをやってみようと思った者です。 VCプロセッサーパックのML.EXEと、Borland C++のILINK32.EXEを使って以下のようなx.asmをアセンブル&リンクしてみましたが、アセンブルはノーエラーで、リンク時にエラーが出てうまくいきません。どのようにやるといいのでしょうか・・・? .386 code segment main proc ret main endp code ends stk segment stk ends end main コンパイル&リンク方法 ml /c x.asm ilink32 x エラー Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Warning: インクリメンタル リンクできません。リンクをやり直します Fatal: Error detected (IMP2357) Fatal: AKA [2005/04/29 Fri 06:03:24] [209.166.177.229] DOSでMASMをやっていたのですが、WINでもアセンブラをやってみようと思った者です。 VCプロセッサーパックのML.EXEと、Borland C++のILINK32.EXEを使って以下のようなx.asmをアセンブル&リンクしてみましたが、アセンブルはノーエラーで、リンク時にエラーが出てうまくいきません。どのようにやるといいのでしょうか・・・? .386 code segment main proc ret main endp code ends stk segment stk ends end main コンパイル&リンク方法 ml /c x.asm ilink32 x エラー Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Warning: インクリメンタル リンクできません。リンクをやり直します Fatal: Error detected (IMP2357) Fatal: wtz [2005/04/28 Thu 19:13:54] [202.95.36.1] http://www3.synapse.ne.jp/wtz/programming/assembler/ ごめんなさい。大事なことを忘れていました。 マイクロソフト社の SDK ならマイクロソフト社の形式で作られてますよね。 (nasm での win32 形式かな?) Alink は obj 形式のほかに COFF(win32?)形式にも確か対応していたと思いますが どのくらい対応しているのか分かりません。(使ったことないもんで) obj 形式と win32 形式混在でも使えるのか私にはわかりませんが。 DirectX の関数たちの居場所(どの DLL か)がわかれば obj 形式だけでも 使えると思いますが… とりあえずいろいろ試してみて、よかったらまた結果を書いてみてください。 ちなみに私は Borland C++ compiler (32bit obj 形式)を使ったことありますが、 このリンカ(ilink32)は import 命令に対応していないようでした。 (例の MessageBoxA を使う簡単なプログラム) WWW [2005/04/27 Wed 20:39:34] [218.228.243.163] >インポートライブラリを使えば関数がどの DLL にあるかを >気にしないで済むので使ってもいいんじゃないでしょうか? >DirectX 用の SDK がダウンロードできたような気がします それは、DirectXSDKにふくまれているのでしょうか wtz [2005/04/27 Wed 17:19:17] [210.237.51.106] http://www3.synapse.ne.jp/wtz/programming/assembler/ 連続書き込み失礼します。 nasm の EQU と %define の違いについてです。 ---- db x x equ 0 db y %define y 0 ---- をアセンブルすると分かるように %define は遡っては適用されません。 また EQU では「再定義」ができません。 ---- x equ 0 x equ 1 %define y 0 %define y 1 ---- を試してみてください。 ---- wtz [2005/04/27 Wed 08:53:20] [210.237.48.235] http://www3.synapse.ne.jp/wtz/programming/assembler/ taa さんへ。 masm 系だと movaps xmm0, [esi + 8*ebx + 0x1000 ] org $-4 var dd ? で varにアクセスすればうまく行くかと。 nasm だと x:movaps xmm0, [esi + 8*ebx + 0x1000 ] ... mov dword [x+4],0 かな? ただ一般にコード領域での書き込みがエラーになるようで、 その場合はどうしたらいいのか分かりませんが。。 wtz [2005/04/27 Wed 08:12:21] [210.237.48.235] http://www3.synapse.ne.jp/wtz/programming/assembler/ WWWさんへ。 obj 形式で Alink を使う限り win32.lib などのいわゆる インポートライブラリは不要です。 Y.DLL の関数 X を使う場合、 extern X import X Y.DLL ... call [X] ... としておけばリンク時に Alink がインポート部分を書き込んでくれます。 インポートライブラリを使う場合には extern X ... call X ... と書くことが出来ます。 call X のかわりに call [__imp__X] と書くこともできます。 この場合、インポートライブラリの中では X: jmp [__imp__X] となっているだけだと何かで読んだことがあります。 インポートライブラリを使えば関数がどの DLL にあるかを 気にしないで済むので使ってもいいんじゃないでしょうか? DirectX 用の SDK がダウンロードできたような気がします。 taa [2005/04/24 Sun 00:31:35] [219.214.188.254] gcc のインラインアセンブラしか使った事がない者ですが、 プログラム実行時のコード自己改変が容易に記述できるアセンブラを 探しています。例えば、 movaps xmm0, [esi + 8*ebx + 0x1000 ] の 0x1000 の部分を、プログラム開始直後に一度だけ再設定し その後はずっとその値で連続使用するといった事をやりたいです。 アドレス位置を自前で計算してやるのは出来ると思うのです が、容易ではないのでマクロ等の利用により 容易に記述できるアセンブラがあれば使用したいと考えています。 ご存知の方がいらっしゃいましたらぜひご教授よろしくお願い致します。 WWW [2005/04/23 Sat 17:37:35] [218.228.243.163] ALINKのWIN32.libは、全ての、APIに対応しているのでしょうか。DirectXをNASMでやろうとしているのですが、インクルードするのを、WIN32.libだけで十分か、不安です。 AZUCO [2005/04/18 Mon 05:48:07] [218.251.106.198] AZUCO World Ver5.0 AMD64アセンブラの具体的実装例を含むプログラム(Konami Hornet System Emulator)をアップしました。 場所は http://www.smallnews.net/azuco/ の hornet > ダウンロードです。 あと、ビルドには Visual Studio .NET 2005 beta 1 (書籍に添付されている物を買うか、MSDNで入手) Direct X SDK april 2005 (マイクロソフトよりダウンロード可) zlib static 32/64 (ソースからコンパイルするしかない) が必要です 興味のある方はどうぞ♪ WWW [2005/04/15 Fri 20:48:43] [218.228.243.163] ありがとうございました。どうやら、翻訳するのに失敗していたみたいで、他の文字に変わっていたようです。ほんとにありがとうございました。 wtz [2005/04/15 Fri 20:18:09] [210.237.58.47] http://www3.synapse.ne.jp/wtz/ >sub ebp,WNDCLASSEX_size 間違えました。上の ebp は esp の間違いでした。 wtz [2005/04/15 Fri 20:16:08] [210.237.58.47] http://www3.synapse.ne.jp/wtz/ Windows でアセンブラでプログラミングをしたい方。 「いまどきのアセンブラ教科書版」によると 統合環境 NAGOA+ というのがフリーであるようです。 http://www.visual-assembler.pt.vu/ アセンブラ、リンカ、リソースコンパイラ、デバッガ、ディスアセンブラなどを 含んだ統合環境です。また付属の nagoa.inc を使ってNASM 単体で PE exe ファイルを作ることも可能なようです。 RAR 形式で圧縮されているので対応する解凍ソフトで解凍する必要がありますが、 +LHACA デラックス版ではディレクトリしか解凍できませんでした。 LHUT32(+UNRAR32?.DLL) か ZERDA で解凍するとよいようです。 http://www.forest.impress.co.jp/lib/arc/archive/archiver/ wtz [2005/04/15 Fri 20:03:22] [210.237.58.47] http://www3.synapse.ne.jp/wtz/programming/assembler/ 一つめ %include 'win32n.inc' でOK 二つめ 具体的な構造体の使い方ですが mov dword [WC+WNDCLASSEX.cbSize], WNDCLASSEX_size mov dword [WC+WNDCLASSEX.style], CS_HREDRAW|CS_VREDRAW mov dword [WC+WNDCLASSEX.lpfnWndProc], WindowProc ... という具合に構造体名を書く必要があるようです。WC は WC resb WNDCLASSX_size か、ローカル変数として使うには push ebp mov ebp,esp sub ebp,WNDCLASSEX_size %define WC ebp-WNDCLASSEX_size というやり方があります。 後者は私が公開した「構造化マクロ」の中に winproc.inc という名で 入っているものを使うのでもよいかと思います。 (nagoa.inc、nagoa+.inc を真似しました。) WWW [2005/04/15 Fri 18:59:41] [218.228.243.163] 説明のところを翻訳サービスを使って翻訳すると %include 「win32n.inc」 と書いてあったのですがnasmが認識してくれません。 WWW [2005/04/14 Thu 19:19:02] [218.228.243.163] wtzさんありがとうございました。ダウンロードできたのですが、使い方が今ひとつ分りません。どのように宣言したらよいのでしょうか。 wtz [2005/04/14 Thu 17:35:10] [202.95.36.220] http://www3.synapse.ne.jp/wtz/ NASM の windows 版の構造体(および定数)をまとめた ファイルならwin32n.inc と言うのがあります。 http://rs1.szif.hu/~tomcat/win32/ ここから探してみてください。 http://www.deinmeister.de/w32asm1e.htm 解説…かな? win32API function を extern 指定でまとめたファイルがあるのかどうかは存じません。 wtz [2005/04/14 Thu 17:27:16] [202.95.36.220] http://www3.synapse.ne.jp/wtz/ obj と win32 の違いですか?どうでしょうかね。 obj は 16bit の頃は DOS では普通に使われてましたが、 その後、 32bit 版が使われて(Borland C++ compiler?)いますが、 それとは別に 32 bit 版のフォーマットとして COFF とか言うものがあります。 (LINUX なんかでも使われるんじゃ) で、マイクロソフト社の VISUAL C++(?) がこの COFF 互換といって 使っている形式が実は互換じゃないよと NASM の Document に載ってますが、 そのマイクロソフト社の形式が win32 ということのようです。 obj フォーマットなら内部の構造まで知っていますが、 (でもこれも各社が独自に定義したタグなんかがあってまちまちなようです。) win32 のことはよく知りません。 obj 形式でも NASM の import,export とかは Borland 社のものでは利用できないみたいだし。 (いいかげんな記憶に頼ってかいてますので間違いがあったらすみません。) WWW [2005/04/13 Wed 18:57:59] [218.228.243.163] NASMでExternによる指定や、構造体の指定がめんどくさくて、C言語のようにインクルードによって、Externなどをあつめたファイルを、インクルードする方法などありませんか。それともコピペしかないでしょうか。 WWW [2005/04/12 Tue 19:48:51] [218.228.243.163] wtzさんありがとうございました。頑張って、-fobjのほうを勉強してみます。今まで -fwin32出しかやった事が無くて[汗] ところで、-fwin32と-fobjの違いは、何があるでしょうか? wtz [2005/04/12 Tue 17:38:51] [210.237.48.77] http://www3.synapse.ne.jp/wtz/programming/assembler/ 連続書き込み失礼します。 Nasm ようの構造化マクロを作ってみました。 皆さん、どうか使ってみてください。 http://www3.synapse.ne.jp/wtz/programming/assembler/ 文法とかの説明とかはないですが、サンプルを読めば分かるかと。 (手抜き) wtz [2005/04/09 Sat 14:56:29] [202.95.45.130] http://www3.synapse.ne.jp/wtz/sendai/ >何故か message の前にゴミが出ます。??? これは私の使用した oedit の仕様で2バイト余分な数値が挿入されているためのようです。 削除したらうまくいきました。 wtz [2005/04/09 Sat 14:25:16] [202.95.39.12] http://www3.synapse.ne.jp/wtz/sendai/ MessegwBoxW(ユニコード)を使う方法、考えてみました。 ---- extern MessageBoxW import MessageBoxW USER32.DLL section .code USE32 class='CODE' ..start: push 0 push title push message push 0 call [MessageBoxW] ret section .data USE32 class='DATA' title: incbin 'mess.uni' ; db 'メッセージ',0 dw 0 message: incbin 'messbox.uni' ; db 'メッセージボックスです',0 dw 0 ---- *.uni は右の文字列をユニコードにしたテキストファイルです。 何故か message の前にゴミが出ます。??? wtz [2005/04/08 Fri 21:30:33] [202.95.39.111] http://www3.synapse.ne.jp/wtz/sendai/ 訂正です。ソースファイルをユニコードで書いたら 全部ユニコードになってしまって nasm が扱えないファイルに (たぶん)なりますね。 引用符に囲まれた部分をユニコードの番号で並べるしかないのだろうか? dw 1234h,4567h,...,0? (上の数字はでたらめ) なんかハンドアセンブルを思いだします。 wtz [2005/04/08 Fri 21:11:42] [210.237.53.108] http://www3.synapse.ne.jp/wtz/sendai/ WWWさんへ 1つめ ユニコードを使いたければ、ソースファイルをユニコードで 編集できるエディターで書くとよいのでは? (やったことないけど) 私は OEDIT と言うエディターを使っていてこれはユニコードで テキストファイルを保存できるので、いいと思います。 http://www.hi-ho.ne.jp/a_ogawa/ 2つめ nasmw -fwin32 a.asm たぶんここが問題です。 import,export ってのは -fobj オプションをつけたときのみ 使用できるディレクティブ?です。 (うまく言ったら教えてください) wtz [2005/04/08 Fri 21:11:39] [210.237.53.108] http://www3.synapse.ne.jp/wtz/sendai/ WWWさんへ 1つめ ユニコードを使いたければ、ソースファイルをユニコードで 編集できるエディターで書くとよいのでは? (やったことないけど) 私は OEDIT と言うエディターを使っていてこれはユニコードで テキストファイルを保存できるので、いいと思います。 http://www.hi-ho.ne.jp/a_ogawa/ 2つめ nasmw -fwin32 a.asm たぶんここが問題です。 import,export ってのは -fobj オプションをつけたときのみ 使用できるディレクティブ?です。 (うまく言ったら教えてください) WWW [2005/04/08 Fri 18:45:21] [218.228.243.163] import start a.dll にしても、 error: parser: instruction expected とでてしまうのですが、もしかしてこの書き方じゃだめなんでしょうか。 WWW [2005/04/08 Fri 18:18:42] [218.228.243.163] wtzへ では、ユニコードの文字列を扱うにはどのようにしたらよいのでしょうか。 wtz [2005/04/07 Thu 18:51:57] [202.95.38.114] http://www3.synapse.ne.jp/wtz/sendai/ NASM での %define と EQU の違いについて。 %define x 100 とすると x は「数値」として扱われますが、 y equ 100 とすると数値ではない値として扱われるように思います。 ----t.asm x equ 100 %define y 100 %ifnum x dd x %endif %ifnum y dd y %endif ----t.asm end として nasmw t.asm -l t.lst を実行して t.lst を眺めてください。 この関係で私は win32n.inc の EQU を %define で置き換えたものを使ってます。 (ところでそう書き換えた win32n.inc を公開したいのですが、 著作権とかどうなってますでしょうか?) タカべぇ〜 [2005/04/06 Wed 13:05:32] [203.165.12.46] お返事いただきました、AZUCOさん DirectXが旧機能に関して動作レベルで完全互換を保ってるのは感心しました。 DirectX5or6のBlt機能も頭に入れてやってみます。 現状ではせっかくOpenGLを触っているので、OpenGLでの制作も続行します。ある程度3Dについての理念もこちらで掴もうと思います。 色々参考になるご意見ありがとうございます。 wtz [2005/04/06 Wed 11:38:35] [210.237.55.176] http://www3.synapse.ne.jp/wtz/sendai/ 読んでるかどうかわからないけどWWWさんへ import a.dll start ではなくて import start a.dll です。 AZUCO [2005/04/06 Wed 01:02:16] [218.251.106.48] AZUCO WORLD Ver.5 >タカべぇ〜さん DirectXは下位は速度はともかく一応完全互換です マイクロソフトにしては褒められる部分だと思います wtz [2005/04/05 Tue 22:54:00] [210.237.59.195] http://www3.synapse.ne.jp/wtz/sendai/ GTRSSR さんへ、もう読んでないかな? MessageBoxW はユニコード用の関数です。 MessageBoxA がシフトジス用の関数です。 後者を使うとよいはずです。 タカべぇ〜 [2005/04/05 Tue 14:20:13] [203.165.12.46] あはぁ、、(汗 AZUCOさん、少し痛いお返事をサンクス まぁ、そうなのですよね。 確かにDirectXは画面への描画速度を向上させるためのどうぐなんですもんね。 しかし、後から追加するAPIを使用するっていることに抵抗がありましてねっ 最初から存在するAPIを120%利用してOSレベルで完全互換を成し遂げたいです。 けど、DirectX5ぐらいならWin95から入ってた気がしましたっ?? が、DirectX8から従来の方向性と大きく切り替わったのですが、それでも旧DirectXとDX8以降向けのハードウェアでは問題無く利用できますか? 自分はDirectXのこの辺が気に入らないんですわ。 三次元描画にさいして、W×Hサイズのピクセルバッファとzバッファを設けてピクセルアートを行わせるのですが、ピクセル情報をGUIのHDCへ直接渡すなんて出来ますか? それが出来るなら心配事が減りますが、聞いてばかりも良くないですね。 MSDNでそんなおいしい関数があるか調べてみます。 毎度毎度ご意見ありがとうございます。 けど、エミュレータ製作者と会話できて結構ビツクリですだ。 またお返事いただけたらありがたいです AZUCO [2005/04/05 Tue 12:09:33] [219.117.197.160] AZUCO WORLD Ver.5 >タカべぇ〜さん ちなみに自分のエミュレータでは、仮想VRAMを作って、最後に描く段階でちょびっとDirectXを使っています。 何故仮想VRAMなのかというと、実装したい物が DirectXの実装に簡単にしっくりきそうにない 明らかに実機よりも多機能、高機能だから 実機では再現性が悪いから というような理由です。 この仮想VRAMはDOS/Vもそうでしたけど、めちゃくちゃな実装でない限り、PCの速度進化が速度問題を解決してくれるので(アセンブラ好きにあるまじき発言ですが)個人的には割りとベストな実装方法ではないかと思ってます。 タカべぇ〜さんのやろうとしている事も、DirectXの範疇を超えるような機能だとかそういう部分があれば、仮想VRAMのような一種エミュレーション的手法が有効になってくるかもしれませんね。 あと、ちょっといやらしい突っ込みですが、GDIを解析して、その非公開ファンクションを使うのと、DirectXでは、将来の互換性はDirectXの方が絶対高いと思いますが・・・・・(汗 タカべぇ〜 [2005/04/04 Mon 19:34:20] [203.165.12.46] AZUCOさん、わざわざ返答ありがとうございます。 AZUCOさんの言う通りに、直接的に触らせたくない思考はわかります。 愚痴になってしまうのですが、もう少し低水準なものも提供して欲しいです。 SetPixelの速度が遅すぎですよ。 やはりDirectXが手っ取り早いですよね。 しかし、DirectXは使えないです。 Windowsにとっては(特に乗りに乗っているマシン)には使い勝手がいいけども旧マシンにはハードウェアレベルで不向きに思いました。 それにDirectXはコロコロ変わりすぎです。 現在、描画部にOpenGLを仮に使っています。 一応、物体の表示まで出来ました。 一段落ついたら公開しますのでお暇でしたら使ってみてください。 それと、Win32APIのSetPixelについて逆アセンブルして調べてみます。 仮想とは言ってもどっかしらにデータを置いているのは確実なので、もうちょいと詮索するつもりです。 お言葉ありがとうございました。 お勧めの通りには行わないのですが、意見をもらえてよかったっです。 AZUCO [2005/04/03 Sun 12:28:04] [219.117.197.160] AZUCO WORLD Ver.5 >タカべぇ〜さん ダイレクトに描かせたくないから、DCというAPIやハードウェアが仮想化されてるのだと思いますが・・・・・ とりあえずDirectXでデスクトップのサーフェイスを取得してそこにダイレクトに描くのが、おそらく思ってる事に一番近いと思います。 Gopikrishna [2005/04/01 Fri 19:07:02] [196.12.38.83] タカべぇ〜 [2005/03/30 Wed 19:26:12] [203.165.12.49] WindowsのGUIで、DCについての質問ですι 現在、OSに既存しないプログラムスタイルの3Dソフトウェアエンジンを作っているところですが、第一歩としてWindows環境で作っています。 DCへ書き込む時にSetPixelを利用せずにできればダイレクトに書きたいのですが、何か方法はありますか? 自分なりにもいろいろ調べてみたのですがさっぱりです。 おそらくHDCはそのデータにDC構造のアドレスを収めているものだと思うんですが詳細がわからないです。 わかる方がいらっしゃったら、お教えください。 AZUCO [2005/03/21 Mon 19:41:54] [219.117.197.160] AZUCO WORLD ver5.0 久しぶりに書き込みますAZUCOです。 最近AMD64のアセンブラをVS8の上で記述する事についていろいろまとめてますので、興味のある方はどうぞ〜 (MAIN PAGE>過去コラム>AMD64です) 同掲示板で質問等も受けてます〜 GTRSSR [2005/03/14 Mon 20:29:42] [218.228.243.163] 追加です。NASMでやっています。 GTRSSR [2005/03/13 Sun 13:39:50] [218.228.243.163] MessageBoxWを呼ぼうとして push 0 push title push message push 0 call MessageBoxW ret section .data title: db 'メッセージ',0 message: db 'メッセージボックスです',0 とすると、文字化けになるのですがどうしたらいいのでしょうか。 教えてください。 mitec [2005/03/12 Sat 22:12:55] [211.127.116.240] そういえばalinkってどこいったんでしょうか?? 追加ですWWW [2005/03/09 Wed 13:12:55] [218.228.243.163] DLLのソースは nasmw -fwin32 a.asm alink -oPE -dll -entry dllstart win32.lib bits 32 extern MessageBoxA global dllstart global start export start global hihi export hihi section .text dllstart: ret start: ret hihi: ret16 です WWW [2005/03/08 Tue 19:06:04] [218.228.243.163] NasmでDLLを使おうとして bits 32 import a.dll start extern start global start section .text start: call start ret としたのですがimportというのでエラーが出るのですが どうしたらエラーが出なくなりますか? mitec [2005/03/07 Mon 21:33:51] [211.121.209.166] 失礼いたしました。Turbo C++のほうでの間違いだったようです。 申し訳ございません。 mitec [2005/03/07 Mon 20:45:23] [211.121.209.166] すいません。初めて書きこみさせていただきます。 Turbo C++で物理セクタ(MBR)を読み出したくて、NASMで以下のようなプログラムを組んだのですが、読み出した最初の400バイトぐらいは正しい答えが返ってくるのですが、残りの100バイト程度、実際のものとはぜんぜん違う値が入っていて非常にこまっています。 どこかおかしいとこがありましたら教えてください。 ;int ReadSectorPhysical(char nDrive, short nCylinder, char nSide, char nSector); _ReadSectorPhysical: push bp mov bp, sp push si push di mov si,4 ; 失敗しても繰り返すカウンタを4にセットする ReRead: mov dl, [bp+4] ; dl = ドライブ番号 mov ch, [bp+6] ; ch = シリンダ番号 & 0xff mov dh, [bp+8] ; dh = ヘッド番号 mov cl, [bp+7] ; cl = セクタ番号(bit0-5) | (シリンダ番号 & 0x300) >> 2 shl cl, 6 or cl, [bp+10] mov ah,02h ; ディスクからの読み込み mov al,1 ; 読み込むセクタ数 mov bx, _Buffer ; データを読み出すバッファ es:bx push ds pop es push si int 13h ; バッファにデータを読み込む pop si jc ErrorReadPhy mov ax, TRUE jmp QuitReadPhy ErrorReadPhy: mov dl, [bp+4] ; dl = ドライブ番号 mov ah, 0 int 13h jc ErrorRPReset dec si jnz ReRead ErrorRPReset: mov dx, ErrorMessage mov ah, 9 int 21h ; エラーメッセージ表示 mov ax, FALSE QuitReadPhy: pop di pop si pop bp ret endproc AKA [2005/02/26 Sat 06:16:59] [218.228.58.97] すみません、16ビットDOSプログラムから統合アーカイバのDLLを呼び出すことってできませんか? ah [2005/02/11 Fri 14:13:32] [218.228.243.163] EBPとはなんなのか教えてください WWWN [2005/02/01 Tue 18:58:33] [218.228.243.163] NASMでWINDOWSプログラムを作成しているサイトあったら教えてください。 名無しの権兵街 [2005/01/29 Sat 03:12:54] [220.147.174.94] >>匿名さん >ヘッド0が裏、ヘッド1が表だと思ったけれど... あ、そうなんですか、、、φ(。。;) すんません、そこらへんかなりてきとーなんで^^; 匿名 [2005/01/22 Sat 21:22:35] [220.210.180.134] >MessageBoxAは呼べたのですが、 ならGetModuleHandleAを呼びましょう。 APIの実体はANSI文字のときは 〜A UNICODEのときは 〜W です。 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getmodulehandle.asp プログラミングWindows 第1部 基礎 Unicode入門 http://www.interq.or.jp/chubu/r6/masm32/tute/tute002_Jp.html 匿名 [2005/01/22 Sat 12:24:48] [220.210.179.93] やっていること No CC HH SS size dl ch dh cl al readfd1:0 0 0 2 17 readfd2:0 1 1 1 18 readfd3:0 2 0 1 36 すべきこと方法1 No CC HH SS size dl ch dh cl al readfd1:0 0 0 2 17 0 0 1 1 18 追加 0 1 0 1 18 追加 readfd2:0 1 1 1 18 readfd3:0 2 0 1 36 すべきこと方法2 No CC HH SS size dl ch dh cl al readfd1:0 0 0 2 17 readfd2:0 0 1 1 18 ch 1->0 readfd3:0 1 0 1 36 ch 2->1 cl 18->36 0 2 0 1 36 追加 ヘッド0が裏、ヘッド1が表だと思ったけれど... 名無しの権兵街 [2005/01/22 Sat 02:55:21] [222.159.244.93] >>GANさん 僕もよくわからんです^^;擬似命令かマクロの違いかなぁ、、、?? NASMのを解説してるサイトは、、、 http://www.geocities.co.jp/SiliconValley/9979/asm/asmhead.html ここに簡単な解説は載ってます あと、、、英語読める人ならNASMのマニュアルが一番詳しいかな >>ししのさん たぶんreadfd2、readfd3のint 13hの前でのレジスタの値が間違ってる気がします。 readfd2のほうは ch=0 dh=1 readfd3は ch=1 dh=0 でいけると思います(テストしてません^^; ディスクの仕様は詳しくは知らないけど、2HDの場合はししのさんが言ってるので合ってると思います。 1-18セクタ:トラック0、ヘッド0 19-36セクタ:トラック0、ヘッド1 37-54セクタ:トラック1、ヘッド0 ・・・ のように、まずトラックの表〜裏に記録して、次のトラックに行きます。 けんぼぉ [2005/01/21 Fri 23:27:50] [220.159.92.7] ども、けんぼぉです。 既にご存じかもしれませんが、「いまどきのアセンブラの教科書」 が毎日コミュニケーションズから発売されます。 著者:橋本和明 予価:2,940円(税込) A5判 304ページ ISBN4-8399-1718-3 発売日:2005年1月下旬 http://book.mycom.co.jp/book/4-8399-1718-3/4-8399-1718-3.shtml ししの [2005/01/10 Mon 11:01:04] [210.230.239.97] 初めて書き込みさせていただきます。ししのと申します。 あっきさんの質問と似ているのですが、どうやっても解決できません。OSのようなものを作っているのですが。フロッピーディスクから読み出すことが出来ないのです。 やりたいことはBIOSのint 13hを使用して、フロッピーディスク(1.44MB)の2〜42セクタを順に読み出したいのですが…。 とりあえず以下のようなコードを書きました。 readfd1: mov ax, CODE_TEMP_SEG ;転送先セグメントアドレス mov es, ax mov bx, 0 ;転送先オフセットアドレス mov ah, 02h ;割り込み用番号 mov al, 17 ;1トラックのセクターを全部読み込む mov cl, 2 ;セクター2から読み込む(1はfirstbootですでに読み込まれている) mov dl, 0 ;ドライブ番号0だよん mov ch, 0 ;シリンダ番号は0 mov dh, 0 ;ヘッダ番号も0 int 13h ;OKディスク読んじゃうよん jc readfd1 ;エラーでたらやれるまでループしろ call print_al putchar '-' readfd2: mov ax, CODE_TEMP_SEG mov es, ax mov bx, 2200h ; 512 * 17 byte 進める mov ah, 02h mov al, 18 mov cl, 1 ;次は19セクタ目から mov dl, 0 mov ch, 1 mov dh, 1 int 13h jc readfd2 call print_al putchar '-' readfd3: mov ax, CODE_TEMP_SEG mov es, ax mov bx, 4600h ; 512 * 18 byte さらに進める mov ah, 02h mov al, 36 mov cl, 1 mov dl, 0 mov ch, 2 mov dh, 0 int 13h jc readfd3 call print_al putchar '-' print_alサブルーチンにて、alの内容をダンプしています。alの内容を見る限りは、一応読み込めているようですが。読込先にジャンプしたときに、「無効な命令」の例外が発生するので、おそらくは前々見当違いのところを読んでいるのだと思います。 あと、フロッピーディスクの仕様がよく分かりません。裏と表があることは知っています。それぞれの面に80トラックあり、それぞれが18セクタを保持して、1セクタ512バイトだと聞きました。しかし記録順がよく分かりません。表→裏→表…なのですか?。 乱文・長文失礼いたしました。どなたかアドバイスのほうよろしくお願いいたします GAN [2005/01/09 Sun 21:21:51] [218.228.243.163] NASMについての質問 NASMを使っているのですが、EQUとdefineの違いがよく分りません。それと、NASMの解説を行なっているホームページがあったら教えていただけないでしょうか。 norige [2005/01/07 Fri 02:09:15] [218.218.61.34] 大変な初心者です!よろしくお願いします。 フロッピーディスクのあるデータを読み込みたいのですが、 ニーモニックでどのように表現するのですか? ひとつ例を挙げてもらえないでしょうか。 どなたかよろしくお願いします。 : |
e-mail: mist@e-net.or.jp | Structured Anchor Tree Return to Menu Return to Parent Menu |
Powered by Unit Missing Link. |