懐かしのMS-DOSプログラミング [sc](★0)
-
- 1
- 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,'$'
-
- 203
- 2011/02/04(金) 22:54:57
-
うちにくればpack13000があるのに、残念
neko.comって何のプログラムだっけ?
-
- 204
- 2011/02/04(金) 23:02:48
-
nekoなつかしす
-
- 205
- 2011/02/05(土) 01:09:35
-
TSR
-
- 206
- 2011/02/20(日) 22:51:21.40
-
全サーバ全板10ms単位の表示になったな。
PC-98では1/100秒の計測ができなかったっけ。
後の方のmateとかになってようやく。
それまではタイマ割り込みで辛うじて計測した。
-
- 207
- 2011/03/09(水) 22:37:32.79
-
-
- 208
- 2011/03/10(木) 18:58:01.30
-
ある昔の本を読んでいて出くわしたのだが、PLink86って何だ?
BIOSで有名なPhoenix社の製品らしいが、
ぐぐってもオーバーレイリンカくらいにしか書かれてないし、
MS-Linkと具体的にどう違ったの?
-
- 209
- 2011/03/10(木) 21:31:54.18
-
オーバーレイモジュールと言う過去の技術が使えたのです。
-
- 210
- 2011/03/11(金) 09:08:02.60
-
.OVL
-
- 211
- 2011/03/11(金) 12:55:44.41
-
mslinkはオーバーレイ使ってもファイルは1つなんだよな。
1つのファイルの中に複数のexeが入ってる。
-
- 212
- 2011/03/11(金) 22:56:25.90
-
阪神大震災の頃はまだDOSが主流だったぬ
-
- 213
- 2011/03/11(金) 23:24:33.12
-
win95が出たのは何月だっけ?
win3.1のマシンを買って、使いにくかったから
DOSマシンとして使ってた。
インターネットにつなげるときだけwinを立ち上げてたよ。
-
- 214
- 2011/03/11(金) 23:46:36.37
-
11月くらいでなかったかのう
-
- 215
- ◆0uxK91AxII
- 2011/03/11(金) 23:46:49.05
-
DOSだと、TEENっていうTCP stackがあったね。
-
- 216
- 2011/03/15(火) 18:41:29.10
-
へえ
-
- 217
- 2011/03/15(火) 20:09:44.49
-
NE2000とNOVELLのコンボ
あとカメレオンくらい
-
- 218
- 2011/03/29(火) 22:25:02.49
-
PACK13000の後に
PACK19000goldなんてのが出てたんだな。
そういえば買ったような覚えがあるよ。
-
- 219
- 2011/04/11(月) 22:52:54.14
-
保守
-
- 220
- 2011/04/12(火) 13:46:13.85
-
Windows SDK使えばコマンドラインソフト簡単に作れるぞ
MASMも付属(コマンドはml.exe)
cl.exeに/FAオプション与えればアセンブラソースを出力してくれる
デバッガはWinDBGというデバッガが付属している
MS-DOSに戻らなくてもWindows上で似たようなプログラミングは可能
Windowsのコマンドプロンプトソフトは
MS-DOSと違い32bitコードになるので64KBのセグメントの壁も気にしなくてよい
-
- 221
- 2011/04/12(火) 13:53:44.04
-
空気が読めないひと
-
- 222
- 2011/04/12(火) 14:53:38.05
-
ここ見て懐かしくてまたやりたくなる人もいるだろうと思ってね
#include <stdio.h>
void main(int argc, char ** argv){
printf("Hellow World\n");
}
こんなCのソースをcl.exeでコンパイルしてそのままコマンドラインで実行できるしね
ここの住人には常識かもしれないけど
-
- 223
- 2011/04/12(火) 15:07:15.18
-
お客さん、お部屋をお間違えでは?
-
- 224
- 2011/04/13(水) 05:49:42.56
-
戻り値voidにしてるくらいだからネタだろ
-
- 225
- 2011/04/13(水) 11:10:06.51
-
UNIXだと戻り値intが必要だがMS-DOSやWindowsならvoidでOK
-
- 226
- 2011/04/13(水) 11:28:45.10
-
Windowsのコマンドプロンプトって
昔のTSRみたいなこと出来ないの?
-
- 227
- 2011/04/13(水) 11:49:50.75
-
>>225
>UNIXだと戻り値intが必要だがMS-DOSやWindowsならvoidでOK
いや、その理屈はおかしい。
-
- 228
- 2011/04/13(水) 11:52:17.64
-
厳密にはコンパイラの仕様なんだがMS-DOSやWindowsでよく使われる
コンパイラではvoidでも問題ないものが多くMS-DOSの解説では
mainをvoidにしてるケースは多い
GCCはintにしてないとたしか怒られたはず
-
- 229
- 2011/04/13(水) 12:07:49.61
-
MS-DOS は void だと AX が戻り値になるんだろ
-
- 230
- 2011/04/13(水) 12:22:28.78
-
exit(n)を使ってれば、voidだろうが問題なし。
-
- 231
- 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() を使っています)。
-
- 232
- 2011/04/13(水) 12:37:47.02
-
exit(n)なりmainのreturn値なりがどういう意味を持つのか
分かってない奴が、混じってるように見える。
-
- 233
- 2011/04/13(水) 12:42:10.33
-
>>232
そのへんはコンパイラが吐き出すコード見れば問題ないことがわかる
voidを指定あってもコンパイラはちゃんと0を返すコードを吐き出してる
-
- 235
- 2011/04/13(水) 12:42:37.14
-
OSの違いとコンパイラの違いの区別がつかないのもいるな
-
- 236
- 2011/04/13(水) 12:43:14.56
-
>>229
AXじゃなくてALだよ
-
- 237
- 2011/04/13(水) 12:52:21.59
-
つまりこういうことですねわかります
#include <stdio.h>
int main(int, char **){
return printf("Hello Work!\n");
}
-
- 238
- 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++ユーザです。(^^;
-
- 239
- 2011/04/13(水) 13:48:01.32
-
>>234
小学生みたいで微笑ましいが、まさか突っ込んだつもり?
-
- 240
- 2011/04/13(水) 18:02:38.45
-
DOS3.1時代FDD環境でお世話になったLattice C パーソナル。
int mainのreturnでなにを返してもリターンコードは0になってたな。
-
- 241
- ◆0uxK91AxII
- 2011/04/13(水) 19:14:46.75
-
>>226
OSにメモリ割り当てを任せた上で割込駆動するようなのは行えない。
>>236
ahに4cでalに戻り値だね。
-
- 242
- 2011/04/13(水) 19:51:50.04
-
ERRORLEVEL
-
- 243
- 2011/04/14(木) 00:08:37.65
-
comファイルならバイナリエディタでも作れるね
-
- 244
- 2011/04/14(木) 00:28:21.31
-
>>225
make が使えなくなるのですが?
-
- 245
- 2011/04/14(木) 22:12:33.86
-
DOSプログラムを終了させる方法を4つまで覚えてるけど、
まだ他にあったかな。もう思い出せない。
int 21h ah=4ch al=(ExitCode)
int 21h ah=00h
jmp 0
ret
-
- 246
- 2011/04/14(木) 22:41:21.68
-
int 20h
csはpspを指していること。
-
- 247
- 2011/04/15(金) 00:08:40.80
-
psp:0にあるのはcdh, 20h。つまりint 20h。
ret命令やjmp 0はint 20hを実行して終わる。
-
- 248
- 2011/04/16(土) 21:45:40.90
-
psp:0へのfar jmpなら、exeファイルであっても
csはpspを指さなければならないという制約をクリアできる。
-
- 249
- ◆0uxK91AxII
- 2011/04/17(日) 00:44:56.79
-
jmp farよりも、xor ax,ax; int 21Hの方が短い気がするする。
-
- 250
- 2011/04/17(日) 17:36:05.08
-
comファイルなら。
exeでもコードセグメントが64kB 1つしかないスモールかコンパクトなら可能
-
- 251
- 2011/04/17(日) 22:25:49.77
-
スモールやコンパクトモデルでもCSはコードセグメントを指してる。
初期値がPSPなのはDS。
-
- 252
- 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
このページを共有する