facebook twitter hatena line google mixi email
★お気に入り追加


■ このスレッドは過去ログ倉庫に格納されています

  • 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,'$'

ここまで見た
  • 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を返すコードを吐き出してる

ここまで見た
  • 234
  •  
  • 2011/04/13(水) 12:42:14.28
>>230
>>222 は exit(n) を使っているのか?

ここまで見た
  • 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になってたな。


ここまで見た
>>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を指さなければならないという制約をクリアできる。

ここまで見た
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


ここまで見た
  • 253
  •  
  • 2011/04/18(月) 19:55:13.72
BDOSエントリは0005hでなかったか?


ここまで見た
  • 254
  •  
  • 2011/04/18(月) 20:01:59.72
CPM-80ではそうだな。
こっちのはDOS独自のCPM互換機能で0x0050で正解。
CP/M-86には無い。
int 21, retfがあるだけ。

ここまで見た
  • 255
  •  
  • 2011/04/18(月) 22:49:59.27
>>251
あー、そうか。
Cの場合pspを指してるのはdsか。

ここまで見た
  • 256
  •  
  • 2011/04/18(月) 23:05:17.65
お前ら何語を話してるんだ?w

ここまで見た
  • 257
  •  
  • 2011/04/19(火) 05:58:51.81
爺共が久々に活性化w

ここまで見た
  • 258
  •  
  • 2011/04/19(火) 10:11:02.79
システムコール呼び出しでcall 50hなんて使ったことないな。

ここまで見た
  • 259
  •  
  • 2011/04/19(火) 23:59:57.68
親プロセス環境へのポインタ(非公開)がpsp:16h辺りにあったような気がする

ここまで見た
  • 260
  •  
  • 2011/04/21(木) 00:01:51.48
親プロセスのPSPのセグメントかな。
PSP:16-17hだったと思う。

ここまで見た
  • 261
  •  
  • 2011/04/28(木) 11:36:34.33
>>218
cd8枚組だっけか
買ったよ
次はDVDで出るかもなんて冊子に書かれてた

ここまで見た
  • 262
  •  
  • 2011/06/20(月) 22:08:52.71
LSI C-86は俺の青春。
何万円もしたCコンパイラが無料で手に入るなんて夢のようだった。

ここまで見た
  • 263
  •  
  • 2011/06/21(火) 12:43:24.37
でもパラメータのレジスタ受け渡しとかやってるのに
吐き出したコードの速度は遅いんだよな。

同じソースで吐き出したコードを比べると
Turbo-C > MS-C >> LSI-C
な感じ。

ここまで見た
  • 264
  •  
  • 2011/06/22(水) 08:26:38.88
LSI-Cの出力したアセンブリリストを加工するsedスクリプトを書いたなぁ。
それだけで数%は速くなった記憶が。

ここまで見た
  • 265
  •  
  • 2011/06/22(水) 21:09:03.72
この時代は何でも出来そうな気がしていた

ここまで見た
  • 266
  •  
  • 2011/06/26(日) 22:16:55.97
>>262
未だに使い続けてる俺

ここまで見た
  • 267
  •  
  • 2011/07/09(土) 09:57:32.88
問題
Turbo-C 2.0のメモリモデルの特徴を表にしてまとめなさい

ここまで見た
  • 268
  •  
  • 2011/07/09(土) 22:53:18.85
MS-Cとほぼ同じだけど、ラージだとスタックはDGROUPの外なのが目立ったな。
ヒュージだとDGROUPそのものが存在しない。

ここまで見た
  • 269
  •  
  • 2011/07/12(火) 22:14:03.78
その時代のMS-Cには、タイニーモデルはまだ存在してなかったね。

フリックゾンビ
フリックゾンビ
ここまで見た

★お気に入り追加

このページを共有する
facebook twitter hatena line google mixi email