Message Log 23 Return to Parent Menu 
Last Updated by 07/01/05(Fri)  

 
Tips
 

 やっぱり 2000 年もアセンブラッ!!だねっ


 
Message log list
 

 アセンブラ掲示板に書き込まれた過去のログです。


Message log 44 (05/01/0506/30/05)
Message log 43 (01/01/0504/30/05)
Message log 42 (01/01/0412/31/04)
Message log 41 (11/01/0312/31/03)
Message log 40 (10/01/0310/31/03)
Message log 39 (04/01/0309/30/03)
Message log 38 (12/01/0203/31/03)
Message log 37 (08/01/0211/30/02)
Message log 36 (05/01/0207/31/02)
Message log 35 (03/01/0204/30/02)
Message log 34 (01/01/0202/28/02)
Message log 33 (09/15/0112/31/01)
Message log 32 (08/01/0109/14/01)
Message log 31 (05/26/0107/31/01)
Message log 30 (05/15/0105/25/01)
Message log 29 (05/01/0105/14/01)
Message log 28 (02/01/0104/30/01)
Message log 27 (01/01/0101/31/01)
Message log 26 (10/01/0012/31/00)
Message log 25 (07/21/0009/30/00)
Message log 24 (06/16/0007/20/00)
Message log 23 (05/20/0006/15/00)
Message log 22 (05/01/0005/19/00)
Message log 21 (04/01/0004/30/00)
Message log 20 (02/01/0003/31/00)
Message log 19 (01/01/0001/31/00)
Message log 18 (11/01/9912/31/99)
Message log 17 (09/05/9910/31/99)
Message log 16 (08/21/9909/04/99)
Message log 15 (07/01/9908/20/99)
Message log 14 (04/01/9906/30/99)
Message log 13 (02/01/9903/31/99)
Message log 12 (11/01/9801/31/99)
Message log 11 (09/21/9810/31/98)
Message log 10 (08/01/9809/20/98)
Message log 09 (07/01/9807/31/98)
Message log 08 (05/04/9806/30/98)
Message log 07 (04/08/9805/03/98)
Message log 06 (02/23/9804/07/98)
Message log 05 (01/01/9802/22/98)
Message log 04 (11/09/9712/31/97)
Message log 03 (10/17/9711/08/97)
Message log 02 (08/22/9710/16/97)
Message log 01 (06/20/9708/21/97)


 
Message log 05/20/0006/15/00
 




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点についてお願いしても宜しいですか?
お手数をかけます。宜しくお願いします。



e-mail: mist@e-net.or.jp
Structured Anchor Tree Return to Menu Return to Parent Menu 
Powered by Unit Missing Link.