トップページ⇒tech
1001コメント251KB

懐かしのMS-DOSプログラミング

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/04/21(水) 12:42:23
mov dx,offset msg
mov ah,9
int 21h
mov ax,4c00h
int 21h

msg db '懐かしのDOS時代のプログラミングについて語ろうぜ',0dh,0ah,'$'
0153デフォルトの名無しさん2010/10/17(日) 00:55:40
>>152
ググったら一番上に来たよ…?
ttp://home.impress.co.jp/catalog/impress/bk4615/c0302.htm

変なサイトの方が気になる。これ?
ttp://int21h.jp/
0154デフォルトの名無しさん2010/10/17(日) 01:10:11
こっちのが詳しいかな。
http://www.ctyme.com/intr/int-21.htm
つっても、殆どは使われないものばかりか。
0155デフォルトの名無しさん2010/10/17(日) 09:48:22
>>153
そのページ
OllyDbgの画面に似てるしアクセスカウンターみたいなのもついてる

>>153,154
INT 21hの動作じゃなくて
DOSのなかにある機械語のこと
0156デフォルトの名無しさん2010/10/17(日) 10:30:53
新しい概念: DOSのなかにある機械語
0157デフォルトの名無しさん2010/10/17(日) 11:15:17
INT 21hってカーネルとかプログラムの中にあるんじゃないの
0158デフォルトの名無しさん2010/10/17(日) 11:45:58
floppy disk の中にある
0159デフォルトの名無しさん2010/10/17(日) 11:48:14
INT 21hがどのファイルのどこからどこまでがah=??のファンクションかを知りたい
0160デフォルトの名無しさん2010/10/17(日) 11:50:05
>>156
155じゃないけど、割り込みベクターも知らないなら黙ってりゃいいのに。
馬鹿丸出しだな
0161デフォルトの名無しさん2010/10/17(日) 12:11:39
debug使え
0162デフォルトの名無しさん2010/10/17(日) 12:26:27
いい年こいて説明の下手な奴が怒ってるな
0163デフォルトの名無しさん2010/10/17(日) 12:31:19
なんかトンデモ本作者と同じ論理だな。
相対性理論は俺に理解できないから間違ってる!、って奴だけどw
0164デフォルトの名無しさん2010/10/17(日) 15:39:15
いや、機械語ってのはDOSの中にあるとかないとかってもんじゃないだろ。
それとも何か? お前等の中には日本語が入っているのか?
0165デフォルトの名無しさん2010/10/17(日) 16:01:37
ベクタテーブル知ってるならそのアドレスからメモリダンプすれば
きっとDOSのなかにある機械語取れるよ
0166デフォルトの名無しさん2010/10/17(日) 21:02:05
漏れの中の人はきっと日本語よりも細かいマイクロコードで動いてる希ガス
0167デフォルトの名無しさん2010/10/18(月) 06:11:38
intはBIOS Interrupt Callsの略。実装は基本的にBIOSの中にある。
21HはDOSへ制御を移す、いわばスーパーバーザコールやAPIコールに相当する。
今はFreeBIOSなんてのもあるから、気になる人はソース見るとよろし。
そのコード量の多さに驚くと思う。
0168デフォルトの名無しさん2010/10/18(月) 06:32:48
intに「BIOSの」なんて意味はねーよ。

intはただの割り込み。
ハードウェア割り込みの処理先として想定されていたものを
ソフト的に呼び出すことも可能にした、というだけ。

もちろん、Z80のRSTなんかもそうだが
それをソフト的に呼び出して特殊機能を実現する、というのは
かなり以前から行われていて
8086のintもその用途に使われることを前提に
割り込み番号の予約等を行っているのは確か。
0169デフォルトの名無しさん2010/10/18(月) 07:04:02
でっていう
0170デフォルトの名無しさん2010/10/18(月) 08:12:04
intに「BIOSの」なんて意味はねーよ。
0171デフォルトの名無しさん2010/10/18(月) 18:48:32
FreeDOSのソースとか見ればわかるの?
0172デフォルトの名無しさん2010/10/18(月) 18:56:27
MS-DOS ver6 のソースが流出した、
って本当なの?
0173デフォルトの名無しさん2010/10/18(月) 22:55:24
暇なときはdebugでDOSの内部を探検したもんだ。
0174デフォルトの名無しさん2010/10/19(火) 20:44:25
最新のMASMってDOSに対応してるのかな
0175デフォルトの名無しさん2010/10/19(火) 20:55:39
VC++ expressについてるmlでコンパイルできるが、linkが対応してない。
dos用のlinkを用意するとこんな感じでコンパイルできる。

ml /c /omf hello.asm
link /tiny hello.obj, hello.com;
0176デフォルトの名無しさん2010/10/19(火) 22:57:22
NASMは直接COMファイルを吐けるよね。
0177デフォルトの名無しさん2010/10/20(水) 05:33:18
でもDOSで動かせないの
0178デフォルトの名無しさん2010/10/20(水) 06:37:44
リンカってLNK562かLNK563ってどっちを使えばいいの
0179デフォルトの名無しさん2010/10/20(水) 06:42:08
>>178は自己解決しましたすいません
0180デフォルトの名無しさん2010/10/20(水) 07:25:02
stubを抜くんだ
0181デフォルトの名無しさん2010/10/20(水) 08:43:42
>>152
これで何を知りたいのか分かる奴がいたらどうかしているぜw

>>160
怒ってないでdebug使え
0182デフォルトの名無しさん2010/10/21(木) 12:33:37
com作るのにexe2binはいらなくなったのか・・・
0183デフォルトの名無しさん2010/10/21(木) 23:07:21
え、普通にtinyモデルで作ればcomじゃない
0184デフォルトの名無しさん2010/10/22(金) 00:38:49
B社のコンパイラしか使ったことないひとは
そういう認識でいればいいんじゃない
0185デフォルトの名無しさん2010/10/22(金) 07:55:27
まあ、B社はある意味偉大だからな。
少なくともL社よりはw
0186デフォルトの名無しさん2010/10/22(金) 23:56:49
BCやTCは癖があったからMS系の俺は馴染めなかった。
0187デフォルトの名無しさん2010/10/23(土) 00:35:37
VCの方がもっと癖あったけどな
0188デフォルトの名無しさん2010/10/23(土) 04:50:12
>>186
はて、どんなくせが?
0189デフォルトの名無しさん2010/10/29(金) 23:28:25
最近C#に凝り始めたんだけど、
beepというメソッドも用意されていて、本体のスピーカーを直接鳴らせたりする。
低レベルな操作に、ちょっぴりDOS時代を思い出したのであった。
0190デフォルトの名無しさん2010/10/30(土) 02:51:41
print '\a'
0191デフォルトの名無しさん2010/10/30(土) 21:52:29
>>189
音の高さや長さを自由に制御できるの?
ただ決まった音でピッと鳴るだけ?
0192デフォルトの名無しさん2010/10/30(土) 22:08:00
>>191
Win32 API呼べば好きなようにできるよ
http://msdn.microsoft.com/ja-jp/library/cc428923.aspx
0193デフォルトの名無しさん2010/10/31(日) 15:34:35
>>192
スレ違い
0194デフォルトの名無しさん2011/01/10(月) 22:32:46
保守
0195デフォルトの名無しさん2011/01/18(火) 22:35:33
CDからDOS起動したいんだけど、ブータブルCDの作成がうまくいかん
FDの起動イメージ作成してそれをISOに変換して焼いても起動しない。
どうすりゃいいんだああああああああ
0196デフォルトの名無しさん2011/01/18(火) 23:30:15
古いふる〜い ms-dos のプログラムが置いてあるところって、vector 以外にないですかね。
昔お世話になった ftp サイト(kuis とか)も、archie サーバーとかも、みんな逝ってしまった‥‥‥。
neko.com がほしいのですが。
01971962011/01/19(水) 01:32:48
自己解決しました。
つ http://misdirection.oops.jp/2005/01/post_19.html

最近無性にふるい MS-DOS のプログラムが欲しくなりました。
nifty-serve のアーカイブを片っ端からダウンロードしておいて、MD にでも保存しておけばよかった。つくづく残念です。
いや、今からでも遅くはないから vector の dos のアーカイブを片っ端からダウンロードするべきか‥‥‥。
0198デフォルトの名無しさん2011/01/19(水) 01:45:54
ああ
ねこじゃらしもあったぬ
0199デフォルトの名無しさん2011/01/19(水) 02:41:51
大切なものは失ってから気付く
0200デフォルトの名無しさん2011/01/19(水) 13:33:24
でもMDには保存しないほうが
0201デフォルトの名無しさん2011/01/19(水) 14:39:30
>>195の件、俺も前から気になっていたのでちょっと調べてみた。
http://www.google.co.jp/search?q=fd%83C%83%81%81[%83W%82%A9%82%E7%83u%81[%83^%83u%83%8BCD%82%F0%8D%EC%90%AC%82%B7%82%E9

しかし、今現在に実際に欲しいのは、bootableCDではなくbootableUSBメモリ。
bootable-isoをUSBメモリ起動可能にするといっても
常にunetbootinが使えるわけじゃないだろうし。

が、冷静に考えたら、
もしかしたら単純にrawwriteかなんか使えばよいのだろうか
という気もしてきた。
試してないが。
0202デフォルトの名無しさん2011/01/22(土) 23:19:41
PACK13000でも探したら?
0203デフォルトの名無しさん2011/02/04(金) 22:54:57
うちにくればpack13000があるのに、残念

neko.comって何のプログラムだっけ?
0204デフォルトの名無しさん2011/02/04(金) 23:02:48
nekoなつかしす
0205デフォルトの名無しさん2011/02/05(土) 01:09:35
TSR
0206デフォルトの名無しさん2011/02/20(日) 22:51:21.40
全サーバ全板10ms単位の表示になったな。
PC-98では1/100秒の計測ができなかったっけ。
後の方のmateとかになってようやく。
それまではタイマ割り込みで辛うじて計測した。
0207デフォルトの名無しさん2011/03/09(水) 22:37:32.79
0208デフォルトの名無しさん2011/03/10(木) 18:58:01.30
ある昔の本を読んでいて出くわしたのだが、PLink86って何だ?
BIOSで有名なPhoenix社の製品らしいが、
ぐぐってもオーバーレイリンカくらいにしか書かれてないし、
MS-Linkと具体的にどう違ったの?
0209デフォルトの名無しさん2011/03/10(木) 21:31:54.18
オーバーレイモジュールと言う過去の技術が使えたのです。
0210デフォルトの名無しさん2011/03/11(金) 09:08:02.60
.OVL
0211デフォルトの名無しさん2011/03/11(金) 12:55:44.41
mslinkはオーバーレイ使ってもファイルは1つなんだよな。
1つのファイルの中に複数のexeが入ってる。
0212デフォルトの名無しさん2011/03/11(金) 22:56:25.90
阪神大震災の頃はまだDOSが主流だったぬ
0213デフォルトの名無しさん2011/03/11(金) 23:24:33.12
win95が出たのは何月だっけ?

win3.1のマシンを買って、使いにくかったから
DOSマシンとして使ってた。
インターネットにつなげるときだけwinを立ち上げてたよ。
0214デフォルトの名無しさん2011/03/11(金) 23:46:36.37
11月くらいでなかったかのう
0215 ◆0uxK91AxII 2011/03/11(金) 23:46:49.05
DOSだと、TEENっていうTCP stackがあったね。
0216デフォルトの名無しさん2011/03/15(火) 18:41:29.10
へえ
0217デフォルトの名無しさん2011/03/15(火) 20:09:44.49
NE2000とNOVELLのコンボ
あとカメレオンくらい
0218デフォルトの名無しさん2011/03/29(火) 22:25:02.49
PACK13000の後に
PACK19000goldなんてのが出てたんだな。
そういえば買ったような覚えがあるよ。
0219デフォルトの名無しさん2011/04/11(月) 22:52:54.14
保守
0220デフォルトの名無しさん2011/04/12(火) 13:46:13.85
Windows SDK使えばコマンドラインソフト簡単に作れるぞ
MASMも付属(コマンドはml.exe)
cl.exeに/FAオプション与えればアセンブラソースを出力してくれる
デバッガはWinDBGというデバッガが付属している
MS-DOSに戻らなくてもWindows上で似たようなプログラミングは可能
Windowsのコマンドプロンプトソフトは
MS-DOSと違い32bitコードになるので64KBのセグメントの壁も気にしなくてよい
0221デフォルトの名無しさん2011/04/12(火) 13:53:44.04
空気が読めないひと
0222デフォルトの名無しさん2011/04/12(火) 14:53:38.05
ここ見て懐かしくてまたやりたくなる人もいるだろうと思ってね

#include <stdio.h>
void main(int argc, char ** argv){
printf("Hellow World\n");
}

こんなCのソースをcl.exeでコンパイルしてそのままコマンドラインで実行できるしね
ここの住人には常識かもしれないけど

0223デフォルトの名無しさん2011/04/12(火) 15:07:15.18
お客さん、お部屋をお間違えでは?
0224デフォルトの名無しさん2011/04/13(水) 05:49:42.56
戻り値voidにしてるくらいだからネタだろ
0225デフォルトの名無しさん2011/04/13(水) 11:10:06.51
UNIXだと戻り値intが必要だがMS-DOSやWindowsならvoidでOK
0226デフォルトの名無しさん2011/04/13(水) 11:28:45.10
Windowsのコマンドプロンプトって
昔のTSRみたいなこと出来ないの?
0227デフォルトの名無しさん2011/04/13(水) 11:49:50.75
>>225
>UNIXだと戻り値intが必要だがMS-DOSやWindowsならvoidでOK
いや、その理屈はおかしい。
0228デフォルトの名無しさん2011/04/13(水) 11:52:17.64
厳密にはコンパイラの仕様なんだがMS-DOSやWindowsでよく使われる
コンパイラではvoidでも問題ないものが多くMS-DOSの解説では
mainをvoidにしてるケースは多い
GCCはintにしてないとたしか怒られたはず
0229デフォルトの名無しさん2011/04/13(水) 12:07:49.61
MS-DOS は void だと AX が戻り値になるんだろ
0230デフォルトの名無しさん2011/04/13(水) 12:22:28.78
exit(n)を使ってれば、voidだろうが問題なし。
0231デフォルトの名無しさん2011/04/13(水) 12:31:23.18
gccだとexit(n)使っていようが警告出るけどな
C言語の仕様ではintが正しいらしいがMS-DOSならどっちでもいいのでは?

「void main MS-DOS」で検索したら2番目にこんなページが出てきた
http://homepage3.nifty.com/aokura/phoebe/minitips.html

> 3. void main() と int main()
>
> 古い参考書では void main() が多く、新しいものでは int main() が多いようです。
> 個人で学習する範囲においては、return する値に特に意味を持たせる
> (他のプログラムやバッチ処理で利用する)つもりがなく、
> コンパイラがエラーにならないのであれば、別にどっちでもよいように思います。
> ただし、void main() にしたときは値を返さず、int main() にしたときは必ず値(0でよい)を
> 返しましょう。それが理解できていれば支障はないでしょう
> (ちなみに、私は int main() を使っています)。
0232デフォルトの名無しさん2011/04/13(水) 12:37:47.02
exit(n)なりmainのreturn値なりがどういう意味を持つのか
分かってない奴が、混じってるように見える。
0233デフォルトの名無しさん2011/04/13(水) 12:42:10.33
>>232
そのへんはコンパイラが吐き出すコード見れば問題ないことがわかる
voidを指定あってもコンパイラはちゃんと0を返すコードを吐き出してる
0234デフォルトの名無しさん2011/04/13(水) 12:42:14.28
>>230
>>222 は exit(n) を使っているのか?
0235デフォルトの名無しさん2011/04/13(水) 12:42:37.14
OSの違いとコンパイラの違いの区別がつかないのもいるな
0236デフォルトの名無しさん2011/04/13(水) 12:43:14.56
>>229
AXじゃなくてALだよ
0237デフォルトの名無しさん2011/04/13(水) 12:52:21.59
つまりこういうことですねわかります
#include <stdio.h>
int main(int, char **){
    return printf("Hello Work!\n");
}
0238デフォルトの名無しさん2011/04/13(水) 12:52:59.69
「void main MS-DOS」の検索でこんなページも出てきた

http://www.asahi-net.or.jp/~yf8k-kbys/int2.html
> 私の知る限りではMS-DOSとUNIXがプログラムの戻り値を
> バッチやシェルスクリプトで利用することができます。
>  ちなみにMS-DOSやUNIXでvoid main()とすると、
> まともなCコンパイラなら自動的にMS-DOSやUNIXに終了コードとして
> 0を返すコードを生成してくれます。
> つまりint main(){ return 0; }と同じことです。
>  でも、ANSIに極力準拠するよう作られているGCCなどはvoid main()にすると
> コンパイル時に警告エラーが表示されるはずです。
>
>  もともとC言語はUNIX環境での利用を非常に意識して作られた言語なので
> 戻り値がintである必然性もうなずけます。
> 何せUNIXのシェルスクリプトが強力なので複数のプログラム
> (ツール的なものが多いです。ファイルをソートしてマージして加工して...など)を
> 一括処理させることが多いのです。この様なシェルスクリプトにおいて、
> あるプログラム処理中にエラーが発生したときは、シェルの処理を中断したいことがあります。
> このトリガがmain()関数の戻り値と言うわけです。
>
>  そういえば、「main()関数の戻り値はintじゃなきゃ駄目だ!」と断言する方の多くは
> UNIX(Linux)ユーザですね。
> そして「別にvoidでもいいでしょ」と言う方の多くはWindowsのC++ユーザです。(^^;
0239デフォルトの名無しさん2011/04/13(水) 13:48:01.32
>>234
小学生みたいで微笑ましいが、まさか突っ込んだつもり?
0240デフォルトの名無しさん2011/04/13(水) 18:02:38.45
DOS3.1時代FDD環境でお世話になったLattice C パーソナル。
int mainのreturnでなにを返してもリターンコードは0になってたな。
0241 ◆0uxK91AxII 2011/04/13(水) 19:14:46.75
>>226
OSにメモリ割り当てを任せた上で割込駆動するようなのは行えない。

>>236
ahに4cでalに戻り値だね。
0242デフォルトの名無しさん2011/04/13(水) 19:51:50.04
ERRORLEVEL
0243デフォルトの名無しさん2011/04/14(木) 00:08:37.65
comファイルならバイナリエディタでも作れるね
0244デフォルトの名無しさん2011/04/14(木) 00:28:21.31
>>225
make が使えなくなるのですが?
0245デフォルトの名無しさん2011/04/14(木) 22:12:33.86
DOSプログラムを終了させる方法を4つまで覚えてるけど、
まだ他にあったかな。もう思い出せない。

int 21h ah=4ch al=(ExitCode)
int 21h ah=00h
jmp 0
ret
0246デフォルトの名無しさん2011/04/14(木) 22:41:21.68
int 20h
csはpspを指していること。
0247デフォルトの名無しさん2011/04/15(金) 00:08:40.80
psp:0にあるのはcdh, 20h。つまりint 20h。
ret命令やjmp 0はint 20hを実行して終わる。
0248デフォルトの名無しさん2011/04/16(土) 21:45:40.90
psp:0へのfar jmpなら、exeファイルであっても
csはpspを指さなければならないという制約をクリアできる。
0249 ◆0uxK91AxII 2011/04/17(日) 00:44:56.79
jmp farよりも、xor ax,ax; int 21Hの方が短い気がするする。
0250デフォルトの名無しさん2011/04/17(日) 17:36:05.08
comファイルなら。
exeでもコードセグメントが64kB 1つしかないスモールかコンパクトなら可能
0251デフォルトの名無しさん2011/04/17(日) 22:25:49.77
スモールやコンパクトモデルでもCSはコードセグメントを指してる。
初期値がPSPなのはDS。
0252デフォルトの名無しさん2011/04/18(月) 18:09:08.49
とりあえずこういうことか。CP/M臭い・・
 .MODEL SMALL,STDCALL,NEARSTACK
 .DATA
PEXIT dd 00000000h
BDOS dd 00000050h
msg   db 'hello world !', 0dh, 0ah, '$'
 .STACK
 .CODE
 .STARTUP
 mov ax, es
 mov word ptr PEXIT[2], ax
 mov word ptr BDOS[2], ax
 mov dx, offset msg
 mov ah, 09h
 call BDOS
 jmp PEXIT
 END
■ このスレッドは過去ログ倉庫に格納されています