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

 
Tips
 

 そろそろ全面リニューアルをしたいと思う、今日この頃…


 
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 04/01/0309/30/03
 




Pacmon  [2003/09/30 Tue 19:25:59]  [218.142.56.1]

はじめまして。
早速質問ですが。。
MASMで[1200:6400]のメモリにAXの値を書き込みたいんです。しかし、どのようにやるかがまだまだ分からなくて。
どなたか教えてください。
力卜  [2003/09/29 Mon 22:50:26]  [192.51.44.48]

bonさん、こんばんは。
↓一度も使ったことがないですが、MASM,TASM,gas 用の“HLA (High Level Assembly)”というのがあるようです。
http://webster.cs.ucr.edu/Page_hla/0_Page_hla.html

↓一応、object-orientedな機能もあるようです。継承も可能なようです。残念ながらアクセス指定子(public/private etc)はないようですが。
http://webster.cs.ucr.edu/Page_hla/HLADoc/HTMLDoc/HLARef.html#pgfId-1024157

やす  [2003/09/28 Sun 20:31:20]  [220.211.169.100]

こんにちわ、bonさん。

MASMもマクロ機能が付加されているだけで、元を辿れば
アセンブリ(機械語コードをテキストに置換した物)
ですから、ご存知のとおり、機械語そのものはただの
CPU命令でオブジェクト指向などというものはなく、
コードをパック化しているCやC++言語とは異なるため、
私の個人的な意見ですが、MASMのみでオブジェクト指向を
実現するのは凄く困難だと思います。

ソースを1つのカプセルと考え、グローバル変数をPUBLICせずに
構造体で宣言し、プロシージャ中でメンバ変数として使うか、
C++コンパイラが実際にやっている方法のように、
構造体を定義し、プロシージャ呼び出しの際にレジスタ一つを
使用して、ポインタ操作する事でオブジェクト指向らしき物は
作れるかと思います。

プログラムをオールアセンブリで組むには、
時間の浪費や、無駄が出てしまうので、
大部分をCやC++言語のクラスで構造化、オブジェクト化し、
高速化したい所やハード制御などをアセンブリで組む
多重言語環境を私は推奨します。

C++とMASMを使用する多重言語環境なら、
C++のコンパイラが定義する関数名や呼び出し規則を取得し、
MASMでその関数本体を定義すれば、
MASM内の関数をC++言語のクラス関数として使用する事が可能です。

私は実際VC++.NET(MFC未使用、Win32APIのみ)に
MASM6.15を組み合わせての多重言語環境で
プログラミングをしていますが、
VCコンパイラはecxレジスタにクラスポインタを保持し、
呼び出された側がスタックを開放する呼び出し規約でしたので、
MASM側でsyscallプロシージャを定義する事で実現できました。
実際の関数名は一旦空の本体をC++側で作り、
アセンブリ出力(/FA)する事で取得できます。

bon  [2003/09/28 Sun 16:48:21]  [218.222.44.212]

こんにちわ

質問というか、ヨタ話というか、、、、。
あのー、MASM6でオブジェクト指向的なコーディング方法ってのは何かあるでしょうか?

数年振りにアセンブルソースをいじくってみたのですが、当時を思い出し懐かしいのと、そのムチャクチャ振りに頭がこんがらがってます。

ムチャクチャな要因は、自分の頭のせいというのを除いてみれば、やはり昔の言語なのでコードとデータのカプセル化が出来ないというのが大きいと思います。

でも、MASM6には当時から他のアセンブル言語が追従できない強力なマクロ仕様(機能)があります。
自分は、このマクロ機能の1/10も使えてなかったりするのですが、MASM6の強力な柔軟性でオブジェクト指向的な使用を実現している先人・先輩がたが居られるのではないかと、質問してみた次第です。

継承とか高度な動作は望まないのですが、カプセル化は是非アセンブル上で体験してみたいです。
Rastiv  [2003/09/27 Sat 21:35:19]  [220.108.170.229]

Rastivです。

くりぼんさん、澤口@一升金さん、お返事ありがとうございました。

いわれてみると、OS resource center に、関係しそうな資料が転がってました^^;
SYS32  [2003/09/27 Sat 14:18:12]  [218.142.56.1]

また質問です。

インテルのマニュアルにページング機構というものがあるんですが、ページングを有効にする方法は分かったんです。しかし、初心者ゆえに実際のアドレスの指定方法が分かりません。
普通にmovなどが使えるのでしょうか?
ご伝授よろしくお願いします。
澤口@一升金  [2003/09/27 Sat 12:54:35]  [219.162.81.253]

澤口@一升金です。

to Rativ さん:

Int 13h は BIOS ファンクションです。歴史的には FDD と
IDE HDD しか無かった頃に設計されてますので、CD-ROM ア
クセスは無理でしょう。
CD-ROM まわりは、Int 2Fh です。ネットで検索してみてく
ださい。
これは BIOS コールではなくて、 MSCDEX の API 呼び出し、
つまり、CD-ROM ドライバが導入されていることが必須です。

http://tech.millto.net/~morry/vwin32/rmint/mscdex.htm
ぐりぽん  [2003/09/27 Sat 12:29:13]  [210.224.217.70]

>Rastivさん
Int 13hではCD-ROMドライブにアクセスできないんじゃないですか?
手元の資料にはBootable CDの設定パケットが送れるみたいなこと
書いてありますが‥‥おしえてえらいひと。
CD-ROMドライブについてはど素人なのです。

>bonさん
そうみたいですね(私はここの資料見ないので判りませんでした
Rastiv  [2003/09/26 Fri 19:49:53]  [220.108.168.39]

ラスティブです。またまた突然の質問で申し訳ないです。

あの、CD-ROMドライブには、INT 0x13のBIOSファンクションコールでアクセスできるのでしょうか?CD-ROMの構造とあわせて解説して頂けるとうれしいのですが・・・。

よろしくお願いします^^
bon  [2003/09/26 Fri 15:44:48]  [218.222.44.48]

当サイトのニーモニック表の DIV のところは違ってんでないですか?

(現行)
AX ← AL ÷ オペランド、 AL ← 余り(符号無しの除算)

(正)
AL ← AL ÷ オペランド、 AH ← 余り(符号無しの除算)
bon  [2003/09/25 Thu 17:17:57]  [218.222.186.7]

澤口@一升金さん、ご返事有り難う御座います。

前の書き込みの時、以下のやすさんのMSGから今は問題なくMASM6.15が動作しています。

>やす  [2003/09/03 Wed 17:50:22]  [218.41.250.140]

-----------------------------------------

>MASM6はもともと英語版しかなかったと思いますので、
>アセンブラ自体は DOS/V マシンでそのまま動作する
>と思います。

うちのMASM6のパッケージには、動作ハードウェアに「PC-9801シリーズ」と明記されています。
自分もMASM 本体は、デバッカなどと違い9801独自ハードには影響されないであろうと思い、DOS/Vマシン購入当時に、数行のDOS Functionのみのソースをアセンブルした事ありますが、エラーでアセンブルできませんでした。
で、パッケージを確認して無念の涙を飲み幾年月というわけです(^^;

>ハードウェア構成は当然全く別物なので、グラフィッ
>クスとか割り込みを使用したソースプログラムは完全
>に作り替える必要があるでしょう

そうです、これにはチト二の足を踏んでます(^^;
でも、やすさんのMSGからHEROさんのHPに行って参考になる資料を落としてきましたので、簡単な物からやってみようと思ってます。
アセンブラの経験が9801環境でしかないので、DOS/Vでは分からない事が噴出するはずです。

その折は、質問をすると思いますので、御教授のほどを宜しくお願いします。

-------------------------------
p.s.
ちなみに、何故、PC9801用MASM6を動かそうと思ったかは、最近985エミュレータを導入いたしまして、これならMASM6も動作できるとやってみましたが、やはり9801です、画面の狭さには閉口してしまいます。それに、エミュレータでは動作がかなり遅いです。
そんなこんなんで、DOS/V上の動作しかないなと思ったしだいです。

今は、温故知新な、とてもハッピーな気分です(^_^)
澤口@一升金  [2003/09/24 Wed 00:31:49]  [220.111.173.122]

澤口@一升金です。

to bon さん:

MASM6はもともと英語版しかなかったと思いますので、
アセンブラ自体は DOS/V マシンでそのまま動作する
と思います。
ハードウェア構成は当然全く別物なので、グラフィッ
クスとか割り込みを使用したソースプログラムは完全
に作り替える必要があるでしょう。

bon  [2003/09/23 Tue 09:40:27]  [218.222.44.47]

こんちわ初めまして。
唐突に質問ですが、NEC PC98x1用の MASM6 をDOSVマシンで使用する時の留意点などお聞かせ願えたら嬉しいです。

当方はムチャクチャなアマチュアです(^^;
SYS32  [2003/09/22 Mon 20:26:11]  [218.142.56.1]

すばやいレスありがとうございます。
なるほど。。忙しい中、たくさん書いていただいてありがとうございます。
いろいろと応用できると思いますので、これからも活用させていただきます。
では。
力卜  [2003/09/22 Mon 20:19:47]  [192.51.44.43]

masmでのjmp/callの即値指定は、以下のようにするとできるようです(16bit)。
.COMであっても一旦16bitOMF(.OBJ)にする必要があります。うーむ、面倒…。
#「db 0EAh / dw offs,seg」とする方が、汚いけど楽ですよね。ではでは。

;[ソース: immseg1.asm]
assume cs:code, ds:code, es:code, ss:code

; 定義する
immseg1 segment at 0ABCDh ; 即値指定したいセグメント値
org 01234h ; 呼び出しに使いたいオフセット値 (#1)
immlab1 label far ; farラベルの定義 (#1)
org 06789h ; 呼び出しに使いたいオフセット値 (#2)
immlab2 label far ; farラベルの定義 (#2)
immseg1 ends

; 使う
code segment
org 100h
start:
mov ax,04C00h ; 16ビットDOSアプリの終了(安全のため)
int 21h ; 〃
call immlab1 ; call 0ABCDh:01234h (#1)を記述したい。
call immlab2 ; call 0ABCDh:06789h (#2)を記述したい。
jmp immlab1 ; jmp 0ABCDh:01234h (#1)を記述したい。
jmp immlab2 ; jmp 0ABCDh:06789h (#2)を記述したい。
nop
nop
code ends
end start
;[EOF]

ビルド(EXE/COM作成)および検証手順: (「x:\work> 」はプロンプト)
x:\work> ml -c immseg1.asm ← ml.exeは masmの起動コマンド。「-c」はアセンブルのみの指定。
x:\work> link immseg1.obj; ← 16ビット版リンカーを使用のこと!! 末尾のセミコロン(;)は必須。
x:\work> exe2bin immseg1.exe immseg1.com ← 16ビットEXEをCOMに変換。フリーのexe2comでも代用可能。
x:\work> ddeb immseg1.com ← 16ビットデバッガ (http://www.vector.co.jp/soft/dos/prog/se014328.html) で確認。immseg1.exeもテスト可能。
DOS Debug utility for 386. version 1.16b copyright(c)1993-1999 kata.
_u
36D7:0100 B8004C mov ax,4C00
36D7:0103 CD21 int 21
36D7:0105 9A3412CDAB call ABCD:1234
36D7:010A 9A8967CDAB call ABCD:6789
36D7:010F EA3412CDAB jmp ABCD:1234
36D7:0114 EA8967CDAB jmp ABCD:6789
36D7:0119 90 nop
36D7:011A 90 nop
_q

x:\work>

SYS32  [2003/09/21 Sun 17:52:33]  [218.142.56.1]

↓への追加です。

開発環境はMASMです。
なるべくMASMに沿った記述でよろしくお願いします。
何回も失礼しました。

SYS32  [2003/09/21 Sun 17:12:02]  [218.142.56.1]

はじめましてー。というか、昔一回書き込んだ覚えが・・・・。名前変わっちゃってるけどw
えと、質問なんですが。。メモリアドレスの場所(?)にジャンプしたいんです。即値は入れれないハズなんで。
遠まわしにやるんだと思いますが、いまいち分からなくて・・・w

コード等書いていただけるとありがたいです。
よろしくお願いいたします。
ぐりぽん  [2003/09/16 Tue 06:35:42]  [210.224.217.104]

OEM2さんはじめまして。

さてマウスのBIOSファンクションコールといえばInt 33hですが、
マウスドライバが組み込まれていないと機能しません。
ですから、リアルモードのDOS上で無理くり動かすOSもどきはともかく
プロテクトモードでは使用できないと思っていいでしょう。

良い回答が得られたでしょうか。それでは。
OEM2  [2003/09/15 Mon 15:18:19]  [218.142.56.1]

はじめまして。
いきなり質問ですが、マウスを制御するBIOSファンクションコールみたいなものはあるでしょうか?
OSもどきのようなものを作ろうと思うのですが・・・。
よろしくお願いします。
a  [2003/09/09 Tue 21:52:34]  [219.167.50.19]

. さん。
本当にありがとうございました。
自分の無知さを思い知らされました。
反省してこれから生きていきます。

.  [2003/09/08 Mon 11:34:21]  [218.225.123.151]

>抽出できる解凍ソフト持ってなかったので、

VCPP /?によるヘルプや本掲示板の過去ログ28にもありますが、
下記のオプションで解凍のみです。

VCPP /C /T:<path>
a  [2003/09/06 Sat 15:32:59]  [218.47.107.131]

こんにちは、やすさん
返事が遅くなりすみません。

「Visual C++ 6.0 Processor Pack」ダウンロードしましたが、
抽出できる解凍ソフト持ってなかったので、
これから探してやってみます。
本当にありがとうございました。
やす  [2003/09/03 Wed 17:50:22]  [218.41.250.140]

こんにちわ、aさん。

現在MicrosoftのMASMアセンブラは、
「Visual C++ 6.0 Processor Pack」に含まれています。
(MASM Ver 6.15)

http://www.microsoft.com/japan/msdn/vstudio/downloads/ppack/default.asp

そのままインストールせずに圧縮ファイル中のML.EXEとML.ERRを抽出し、
適当なディレクトリにおけば単独で使う事ができます。

ヘルプはIntelの資料の方が詳細な情報が載っていますが、
HEROさんのサイトのASM.CHMとX86CPU.CHMがわかりやすくて
お勧めです。
(googleで「HERO MASM」と入力すれば出てきます。)

a  [2003/09/03 Wed 01:14:07]  [219.167.51.196]

こんにちは。

masmのコンパイラは、microsoftから無料で配布って
もうされていないのでしょうか?

いろいろと探してみたのですが、なかなかいいコンパイラが
見つかりませんでした。

おすすめを是非教えていただきたいのです。お願いします。

カラーインデックス  [2003/09/02 Tue 02:24:03]  [211.131.208.244]

本間殿、詳しい解説ありがとうございます。
大変よく理解できました。
つまり、割り込みを使用するのは、BIOS や OS の機能を利用するためと解釈していいのでしょうか?
C言語のコードを、インラインアセンブラで書き換えるような場合には、割り込みは必要ないということなのでしょうか?

本間  [2003/09/02 Tue 00:48:14]  [210.159.254.86]

カラーインデックスさん、こんばんは。

結論から言うと、int 11h や int 21h では特殊なサブルーチン呼び出しが行われています。

割り込みとは、何かのイベント(キーが押された、指定した時間が経過したなど)が
発生した際に、 CPU が実行している処理を中断させ、別の処理をさせる仕組みです。
何番の割り込みが起きた時にどのサブルーチンを呼ぶかは割り込みベクタテーブルに
書かれています。(i386では IDT=Interrupt Descriptor Table というのが正式名称です)

たとえばキーボードの場合、エディタを実行中に
キーが押されると9番の割り込みが発生して
割り込みベクタテーブルの9番目にかかれているサブルーチンが呼び出され、
割り込み処理ルーチンの中で押されたキーのキーコードをキーバッファに読み込み、
割り込まれたエディタプログラムへ戻り、処理を続けます。
後になってエディタがキーボード読み込みルーチンを呼ぶと
BIOS または OS はキーバッファから取り出したキーコード返します。

割り込まれたプログラムでは割り込まれた事には気付きません。

ここまでで説明したのはハードウェア割り込みですが、
これに対してソフトウェア割り込みというものがあります。

割り込みベクタテーブルを利用すると割り込み番号を指定するだけで
サブルーチン呼び出しができて便利なので、ソフトウェアからも
割り込みを発生させる事ができるようにしたのがソフトウェア割り込みです。

BIOS や OS が提供するサブルーチンの番地はバージョンによって変わってしまうため、
割り込みベクタテーブルにサブルーチンの番地を書いておき、
アプリケーションから BIOS や OS のサブルーチンを呼び出す場合には
その割り込みを発生させるという方法でサブルーチン呼び出す事で
バージョンに依然せず BIOS や OS の機能が利用できます。

普通のサブルーチン呼び出しと割り込みのどこが違うかは
ここでは省きます。質問していただければ答えられると思います。

割り込み全般について知りたい場合は、アセンブラについての本ではなく
CPU についての本であれば書いてあると思います。

C言語で割り込みに似たものとしては signal があります。


参考文献 はじめて読む8086 村瀬康治 監修 菊池輝尚 著 アスキー

本間  [2003/09/01 Mon 23:31:10]  [210.159.254.86]

>> イメージ的には,大域で宣言されている値は取り出すことが可能であり
>> 局所変数は,解析が困難であるということでよろしんのでしょうか?
分かりにくい表現ですみません。
局所変数の場合は余計な手順が必要ではありますが、
探してる大域変数の番地や
探している局所変数を使っている関数の番地を
調べる方が何倍も手間がかかるので
困難さという点では同じであると思います。


カク  [2003/09/01 Mon 17:16:37]  [150.59.38.42]

お世話になています. カクです.

本間様 返答ありがとうございます.

仰られているとおり,ソースコードが入手できない状態で変数の初期値を得ることができないものか質問させて頂きました.

イメージ的には,大域で宣言されている値は取り出すことが可能であり
局所変数は,解析が困難であるということでよろしんのでしょうか?
大域変数はあまり使用されませんので,やはりexeファイルからソースコード内で宣言されている変数を取り出すことは,困難なようですね.

御返答ありがとうございました.
それでは失礼します.

カラーインデックス  [2003/09/01 Mon 00:13:26]  [211.131.208.244]

すみません、インラインアセンブラ初心者です。
よろしくお願いします。
int 11h
とか、
int 21h
のような割り込みとは何をしているのでしょうか?
テキストを読んでも、割り込みをするという説明しかなく、
なぜ必要で、何をしているのかが分からないのです。
c言語で割り込みというのは知らないのですが、
c言語ではいらないものなのですか?
よろしくお願いします。
本間  [2003/08/31 Sun 02:01:03]  [218.225.246.146]

はじめまして。dos 上の tasm が懐かしい、本間です。

>> VC++等で作成された.exeファイルを逆アセンブリし,その内容から
>> プログラム(ソースコード)で宣言されたint型などの変数値を取り
>> 出すことは可能なのでしょうか?

ソースコードが入手できない状態で、変数の初期値が知りたいという
事でしょうか? 質問を勘違いしている場合や説明が分からない場合は
指摘してください。

その場合、関数に入るたびに初期化される自動変数(以下の例の b)とそれ以外の変数(a, c)で変わってきます。
int a = 1;
void func(void){
int b = 2; /* */
static c = 3; /* */
}
a, c は exe ファイルのデータ領域に初期値が書き込まれているので
変数の存在する番地が分かれば初期値が取り出せます。
b は関数が実行されたときにスタック領域にプログラムで書き込まれるので
関数の先頭付近を逆アセンブルしてでアセンブリ言語を読んで
なにを実行しているか理解する事で、初期値が取り出せます。

ただ、ソースコードが無い状態だと変数の存在する番地や
関数の存在する番地が知るためには exe 全体を
逆アセンブルしてプログラムを追いかけることになり、
根気の要る作業になります。
なるべく楽に番地を知るためのノウハウやユーティリティーが
あると思いますが、実際にやってことがないので具体的な
事は分かりません。


カク  [2003/08/29 Fri 06:04:53]  [150.59.38.42]

はじめまして,アセンブラ初心者のカクといいます.
失礼します.

VC++等で作成された.exeファイルを逆アセンブリし,その内容から
プログラム(ソースコード)で宣言されたint型などの変数値を取り
出すことは可能なのでしょうか?
逆アセンブリには水巻 マチ氏のxdawinというソフトを使わせて頂
いております.
http://rd.vector.co.jp/soft/win95/prog/se119443.html

宜しければ御返答宜しくお願いします.
それでは失礼します.
カク  [2003/08/29 Fri 06:04:39]  [150.59.38.42]

はじめまして,アセンブラ初心者のカクといいます.
失礼します.

VC++等で作成された.exeファイルを逆アセンブリし,その内容から
プログラム(ソースコード)で宣言されたint型などの変数値を取り
出すことは可能なのでしょうか?
逆アセンブリには水巻 マチ氏のxdawinというソフトを使わせて頂
いております.
http://rd.vector.co.jp/soft/win95/prog/se119443.html

宜しければ御返答宜しくお願いします.
それでは失礼します.
やす  [2003/08/12 Tue 08:06:55]  [220.211.217.161]

はじめまして、やすといいます。

Win上でCとアセンブラでのプログラミングで
ナノ秒単位のハードウェアカウンタのエミュレートのために
正確なタイマー又はカウンタを必要としています。

標準系関数や、QueryPerformanceCounter()は
Winが噛んでるので、使う気になれません。
また、Win上でのプログラミングですので、
BIOSやIOを直接叩くわけにはいかきません。
そこで目を付けたのがPentium互換命令のRDTSCでの
TimeStumpCounter読み込みですが、これを使用するには、
(エミュるカウント)=(TimeStumpCounterの差) * (エミュる周波数) / (CPU動作クロック)式等で
CPUの動作クロックを元にエミュる周波数に変換するしかなく、この動作クロックを取得するにはRSTSCで実測しなければならいようで、マルチスレッドのWin上では不可能・・・
となり、いきづまっています。

どなたか、Win上での精度の高い動作クロックの実測方法をご存知ありませんか?

ぜひ、よろしくお願いします。
Rastiv  [2003/08/07 Thu 22:04:41]  [219.167.158.173]

Rastivです。

ぬおーー!スゴイ貴重な情報です!
く、くりぼんさん、どうも有り難うございます。

お返事まで、ちょっと時間かかりそうなので(自分とろいから・・・)、
とりあえず、・・・「有り難うございました」。

-----
> Rastivさん、そんなに感謝されると恐縮です(苦笑
> あんまり情報らしい情報流してないんで・・・。。

いえいえ、自分気が小さいもんで。
出来損ないの質問を投稿してしまって、書き直そうかと
思いつつも勇気が出なかったところを後押ししてくれた感じです。

お返事していただけるだけで、精神的に助かりましたよ。
ぐりぽん  [2003/08/07 Thu 21:34:54]  [210.224.217.75]

Rastivさん、そんなに感謝されると恐縮です(苦笑
あんまり情報らしい情報流してないんで・・・。。

> くりぼんさんの仰るように、Ralph Brownの割り込みリスト
> 以外にも、いろいろ資料集めしてますけど、・・・言われてみれば、
> メモリー構成情報取得関係のBIOSコールについては、そういうの
> 見たことないです、はい。探してみます。

参考までにいくつか自分の見つけたサイトを挙げておきます。
http://zslash.s5.xrea.com/os/wiki/index.php?%5B%5B%28AT%29memorymap%5D%5D
http://diary.imou.to/~AoiMoe/2000.09/early.html

PhoenixBIOS v4.0のユーザーマニュアルにも一覧があります。
英語で"userman.pdf"などと指定してぐぐると良いかもです。

> そもそも、メモリーホールがなぜできるのかすら知らないので、
> なかなか解決には向かいません(関係ないかも知れませんが)。

謎はこの場合、できるだけ少ないに越したことはありませんね。
ISAデバイスを利用する際、ISAアドレス幅は24bit(?)しかないので
1M〜16Mのどこかに使用しないメモリ空間を設定しておき、そこを
DMAによるISA->メモリ間のデータ転送に利用いたします。
ISAデバイスがない場合は設定しなくても良いですが、ある場合は
必ずどこかに用意する必要があります。これがメモリホールです。

ちなみに今Int 15 - AX=0xE801を試してみたんですが、
Configured memoryのほうにしか値が返されませんでした。
いまいち、Extended memoryのほうの意味がわかりません。。

参考になりましたでしょうか。それでは。

Rastiv  [2003/08/05 Tue 17:37:34]  [219.165.249.159]

Rastiv です。

くりぼんさん、どうもレスありがとうございます。感謝です(涙。

くりぼんさんの仰るように、Ralph Brownの割り込みリスト
以外にも、いろいろ資料集めしてますけど、・・・言われてみれば、
メモリー構成情報取得関係のBIOSコールについては、そういうの
見たことないです、はい。探してみます。

質問を投稿後、時間を置いて再びそれを読んでみて、
「なんとも、しょぼい質問だな・・・」なんて、我ながらにして
思ってました。質問したいことがうまく表現できてないことに
も気づいて、・・・かなり反省しています。

> 構成メモリが本当に実装されて
> いるメモリだとしたら、拡張メモリって、何なん
> でしょうか?

これは・・・、質問の意図が読み取れませんね。

以前から、PC/AT互換機のメモリーマップとして自分の
頭の中に描いているものは・・・

00000h-003FFh 割り込みベクトル
000400h-0004FFh BIOSデータ領域
000500h-09FFFFh 空
0A0000h-0BFFFFh グラフィックス(BIOSが利用)
0C0000h-0EFFFFh アダプタROM領域
0F0000h-0FFFFFh システムROM領域
100000h-以降 空
(とことんこだわる CONFIG.SYS DOS/V編 エーアイ出版 より)

なんですが、例の件に関するBIOSコールによると、どうやら、
100000h以降のイメージが違っているようなんですね。
特に、1MBから16MBまでが明らかに怪しいんです。

最近になって、DMAアクセスとかに興味を持ち始めていろいろ
調べてたりすることがあるんですけど、そのときにメモリーと
バスと周辺機器との具体的なつながりが、この事と絡んで
引っかかるんです。

そもそも、メモリーホールがなぜできるのかすら知らないので、
なかなか解決には向かいません(関係ないかも知れませんが)。

質問したかったことは、こんなところです・・・。
井原です  [2003/08/04 Mon 19:37:50]  [203.205.110.241]

すみません。
全部書いてないのに間違えまして、書き込んでしまいました。

それで、InfoCASL Ver2.0.10は、WinXPの環境にインストールしたけど、起動時にアプリエラーになって使えなかったのです。
Ver2.0.8もデバッグ実行のときに、途中で止まらずに一気に最後まで動いてしまうのです。
WinXPのプログラム互換ウィザードを使って、もう一度 Ver2.0.10 を試してみます。
井原です  [2003/08/04 Mon 19:31:23]  [203.205.110.241]

InfoCASL Ver2.0.10
.  [2003/08/04 Mon 11:23:33]  [218.225.123.151]

google 検索でInfoCASLのキーワード検索をかけて出てくる
サイトじゃダメなんですか?

http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/infocasl/
井原です  [2003/08/02 Sat 19:05:45]  [203.205.110.241]

始めまして。井原と言います。
InfoCASLの最新版って何処からダウンロードすれば良いんでしょう?
また、DDKの日本語版で無いんでしょうか?
ぐりぽん  [2003/08/01 Fri 22:41:55]  [210.224.217.161]

レスしようレスしようと思いつつ過ぎてました。遅れながら。

>Rastivさん
Ralph Brownの割り込みリストだけでは絶対判らないハズです。
Phoenixからもそこら辺の拡張BIOSコールについて書いた資料が
出ているはずなので、同時に参照されると吉かなーと。
お松  [2003/07/30 Wed 02:27:11]  [150.59.66.91]

to 澤口@一升金へ
御親切に教えていただいてありがとうございます。
さっそく試してみたいと思います。

澤口@一升金  [2003/07/29 Tue 22:41:53]  [219.165.206.7]

澤口@一升金です。

to お松さん:

google 検索で free pic compiler などのキーワード検索を
かければたくさん出てくると思います。
例えば

http://www.htsoft.com/products/piclite/piclite.html
お松  [2003/07/25 Fri 09:58:10]  [150.59.66.91]

どなたか知りませんか。
現在C言語を用いてPICを動かそうとしているのですが、C言語からアセンブラに変換するフリーソフトを探しています。BCCなどでもアセンブラに変換できますが、PIC用の命令までCで書くのは大変ですから...。
お願いします。
Rastiv  [2003/06/29 Sun 08:34:20]  [219.167.159.252]

おはようございます。Rastivです。

今回は質問を持って参上しました^^

アセンブラでメモリ総量を取得するため、
INT 0x15 AX=0xE801 を使おうと、
例のごとくに Ralf Brown さんの 割り込み表を
読んでいるんですが、
extended memory と configured memory の
区別がつかなくて困っています。

訳すと、それぞれ、拡張メモリ、構成メモリ、と
なるのだとは思います。おそらく、メモリホールを
発見するために2つ用意されたメモリ情報だと
思うんですが、構成メモリが本当に実装されて
いるメモリだとしたら、拡張メモリって、何なん
でしょうか?
ta-taki  [2003/06/16 Mon 15:59:55]  [211.8.126.67]

こんにちは。アセンブラ初心者です。
ちょっと場違いな気もしましたが、質問させてください。

只今CPUのFSBとか倍率とかを取得したいのですが、
VC++(C言語)の中でインラインアセンブラで書くことで
取得出来るらしいと効いたのですが、方法が分かりません。

どういう記述にすればよいのでしょうか?
また、本当にアセンブラでFSBの値とかは取得出来るのでしょうか?

  [2003/06/14 Sat 19:16:49]  [203.141.156.195]

連続ですいません^^。フロッピー読んでジャンプすることに
成功しましたよぅ(嬉

だめだったのは、連続でデータを書き込んだ場合、まずシリンダ内のトラックをすべて書き込んでいた、ってことでした。
つまり、先ほど書き込んだプログラムは
HEADを1、シリンダを0とすればよい話でした(笑

はぅ。これに気づくのに1週間かかってしまいました*^^*
誰かの役に立てれば幸いです^^
  [2003/06/14 Sat 19:16:45]  [203.141.156.195]

連続ですいません^^。フロッピー読んでジャンプすることに
成功しましたよぅ(嬉

だめだったのは、連続でデータを書き込んだ場合、まずシリンダ内のトラックをすべて書き込んでいた、ってことでした。
つまり、先ほど書き込んだプログラムは
HEADを1、シリンダを0とすればよい話でした(笑

はぅ。これに気づくのに1週間かかってしまいました*^^*
誰かの役に立てれば幸いです^^
  [2003/06/14 Sat 16:23:56]  [203.141.156.195]

Rastivさん、敬称を忘れてしまいました。失礼しました。
  [2003/06/14 Sat 16:22:21]  [203.141.156.195]

Rastiv,AFさん、ありがとうございます^^。
読み込みセクタ数を減らしてみたところ、読み込みで
エラーとなることがなくなりました。そこにジャンプするのがまだうまくいきませんが、なんとかいけそうです^^。
bochsで動作テストを行っているのですが、
あれは、どうやらセクタをまたいでもOKなようです。
どちらにせよ、助かりました。ありがとうございます^^
Rastiv  [2003/06/13 Fri 00:33:12]  [219.164.39.168]

Rastiv です。

> このコードを見る限りでは、HEAD NUM が
> 指定されていないような気がします。

そのような気がするだけでした。
HEAD NUM = 0 となっていますね。(^^;
Rastiv  [2003/06/13 Fri 00:26:44]  [219.164.39.168]

Rastiv です。

電さんへ。

> xor dx,dx ;;DRIVE NUM
> mov ch,0x01 ;;SYLINDER NUM
> mov cl,0x10 ;;SECTOR NUM
> mov ax,SYSSEG ;;転送先seg
> mov es,ax
> xor bx,bx
> mov ah,02h
> mov al,40 ;;NUM OF SECTOR TO READ
> int 13h

このコードを見る限りでは、HEAD NUM が
指定されていないような気がします。
AF  [2003/06/13 Fri 00:24:33]  [210.234.61.30]

>> 電
一度に読み込むセクタ数を、1 シリンダの範囲に限定してみては
どうでしょう(40セクタは多すぎでは?)、Ralf Brown's の解説
に色々と制限事項が示してあります。
のま  [2003/06/10 Tue 12:56:17]  [133.37.254.25]
おしえて下さい

68000の機械語プログラムができる方、下の二つのプログラム教えて下さい!

(1)N=0〜$FFについて、($5000+N)番地のメモリ内容から($6000+N)番地の内容をバイト単位で減算し、結果を($1000+N)番地に格納するプログラム。

(2)メモリアドレス$1000番地から$10FF番地のメモリからstingで指定される文字列を探し、そのアドレスをA0レジスタに格納して終了するプログラム。ただし、文字列が見つからなかった場合は、A0レジスタには$0がはいるようにする。
  [2003/06/08 Sun 12:07:04]  [203.141.156.195]

お久しぶりです^^
いま、bootloaderをつくっているのですが、
少しこまったことになってしましました^^
DOSのシステムコールのアブソリュートRWでBOOTDISKのイメージを
先頭から順々に書き込んで、それをブートプログラムにてint 13(ah=0x02)で読み込もうと思っているのですが、
なぜかコード4でエラーになってしまいます。
読みこみたいセクタは34番目のセクタのはずなので、
以下のようにしてみました。
xor dx,dx ;;DRIVE NUM
mov ch,0x01 ;;SYLINDER NUM
mov cl,0x10 ;;SECTOR NUM
mov ax,SYSSEG ;;転送先seg
mov es,ax
xor bx,bx
mov ah,02h
mov al,40 ;;NUM OF SECTOR TO READ
int 13h
二つのシステムコールの間に互換性がない?のでしょうか・・・
ノッチ  [2003/06/06 Fri 18:59:21]  [210.143.35.15]

はじめまして、ノッチといいます。
いきなりで申し訳ないのですが分からないことがあるので質問させて下さい。
今アセンブラでWindowsアプリを作っているのですが、あるアドレスを
構造体のアドレスとして使用するにはどうすれば良いのでしょうか?
具体的には、WM_GETMINMAXINFOのlParamをMINMAXINFO構造体として
値を変更したいのです。

;----- コールバック -----
.if message==WM_GETMINMAXINFO
mov eax,lParam
;mov dword ptr [eax]+24,400 ;これで変更すると
;mov dword ptr [eax]+28,265 ;成功する
invoke SetWndGetMinMaxInfo,400,265,[eax]
ret

;----- ファンクション -----
SetWndGetMinMaxInfo proc x:DWORD,y:DWORD,mmi:MINMAXINFO
m2m mmi.ptMinTrackSize.x,x
m2m mmi.ptMinTrackSize.y,y
mov eax,0
ret
SetWndGetMinMaxInfo endp

上ではeaxの値をアドレスとして渡してSetWndGetMinMaxInfoで構造体
として受け取っているつもりなのですが、eaxの値とmmiのアドレスが
違う値になっておりうまくいきません。
関数にアドレスを渡す方法、もしくはアドレスを構造体として使用する方法
(こっちの方が知りたいです)を教えて頂きたいです。
長くなってしまいましたがよろしくお願いします。

F-86  [2003/05/26 Mon 22:35:38]  [218.226.72.115]

>> kei

インテルの ソフトウェア・デベロッパーズ・マニュアルに書いてるよ。
kei  [2003/05/23 Fri 01:45:56]  [218.222.182.126]

sinとcosを扱いたくて浮動小数点命令の使い方を
勉強したいのですが、ここでは扱っていないのでしょうか?
「城」  [2003/04/29 Tue 11:47:33]  [219.110.89.71]

>セクター毎に、4バイトのアドレスフィールドが存在すると読み取れるのですが

そうです。
セクタごとに本来のデータ領域とは別にID部として確保されています。
Rastiv  [2003/04/28 Mon 20:47:24]  [219.165.249.13]

訂正:下の書き込みに間違いが・・・
・・・・
もし足したら −> もしかしたら
・・・・
Rastiv  [2003/04/28 Mon 20:44:51]  [219.165.249.13]

Rastivです。

早速のお返事をありがとうございます。

下の表を見ますと、どうも、フロッピーディスクの
セクター毎に、4バイトのアドレスフィールドが
存在すると読み取れるのですが、もしそうだとした
ら、ブートコードが書き込まれるところは、その
コードが512バイトのセクタサイズ全部を占領して
しまうので、アドレスフィールドが存在できない
ということになるのじゃないか?!、と思うのです。

この疑問は、正しいのでしょうか・・・。
もし足したら、根本的概念を取り違えているかも
しれないのですが・・・。
「城」  [2003/04/28 Mon 09:19:46]  [219.110.89.99]

アドレスフィールドは、こんなところです

ES:BX -> address field buffer (see #00235)

Format of floppy format address field buffer entry (one per sector in track):
Offset Size Description (Table 00235)
00h BYTE track number
01h BYTE head number (0-based)
02h BYTE sector number
03h BYTE sector size (00h=128 bytes, 01h=256 bytes, 02h=512, 03h=1024)
Rastiv  [2003/04/27 Sun 16:58:51]  [219.164.112.89]

Rastivです。

フロッピーディスクのフォーマットの作業がどうなって
いるのか知りたくて調べていたところ、ネット(オープン
アーキテクチャデベロッパーズグループ(OADG)より)から
落としてきた「BIOSインターフェイス技術解説書」に書い
ていることに、

INT 13h / AH = 05h 'トラックのフォーマット'
・・・・
トラック上のセクター毎に、アドレスフィールドがなけれ
ばなりません。・・・・

てな事を書いてありました。この辺りがよくわからなくて、
戸惑っているのですが、どなたか解る人、教えていただけ
ませんでしょうか。
「城」  [2003/04/21 Mon 09:15:08]  [219.110.89.39]

8086の(ニモニック/機械語)対応表ですか
昔は参考書がいろいろありましたが・・・
どこか大きい書店または検索機能付きのWEB書店で捜したらどうですか
8086,80386,80486,80x86 とプログラミング、ハンドブック、アセンブリ などをキーワードにして
こけもも  [2003/04/20 Sun 01:14:29]  [218.216.160.251]
8086の(ニモニック/機械語)対応表が欲しい

debug.exeでアセンブラ、機械語を学び始めて1日の素人です。

8086の、ニモニックと機械語(出来れば2進数によるもの)の対応表を探しています。

どうすれば手に入るかご存知でしたら教えて下さい。
鷹 (Windows上のPICについて)  [2003/04/19 Sat 16:38:57]  [211.130.133.223]

はじめまして鷹ともうします

現在、AT互換機のPICについて、難儀しております

Windows上で作動するHW割り込みを扱うとあるボードを作っているのですが、PICの初期値(具体的には割り込みベースアドレス)が機種毎に違うため、割り込みベクタの特定が出来ません
ある資料によると、WindowsNT系は30hで、98系は50hと記されていたのですが、Windows2000ではどうもこの限りではないようです
いろいろ試したのですが、30hのマシンが多いのですが、70hだったり、50hだったりと、ほんとにまちまちで懲りています

どうか、御存知の方お教えください

ぐりぽん  [2003/04/02 Wed 00:29:17]  [211.134.134.3]

>>IA-32に苦しむ人
> (中略)
> という認識で良いのでしょうか?
たぶん混乱されておられると思いますので、簡単に説明します。

まず「物理メモリ」がいちばん下にあります。
その上で「ページング機構」が、与えられた仮想メモリアドレスを
存在する物理メモリアドレスに変換しています。
さらにその上で「セグメント機構」が、メモリ空間を適切な
セグメント領域に分割して管理しています。

ページングがOFFであれば、セグメントに指定できるアドレスは
物理アドレスの範囲内に収めねばなりません。ページングをONに
すると、仮想メモリアドレスの範囲内でセグメントのアドレス指定
ができるようになり、ページング機構は物理メモリアドレスと対応
するページの対応付けを行なうようになります。

このへんは、インテルの出しているIA32のマニュアルを読んだほうが
勉強になるので、一度概説だけでも目を通されてはどうでしょう?
#なにも全部読む必要はありません



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