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

ここまで見た
  • 684
  •  
  • 2013/12/13(金) 04:28:58.24
マルチスレッドに対応したDOSってあるの

ここまで見た
  • 685
  •  
  • 2013/12/13(金) 04:44:10.74
アプリが独力でマルチスレッドしてた

DOSじゃないけど同時代だと、
コンカレントCP/MやOS/9-68000とか対応してたな

ここまで見た
  • 686
  •  
  • 2013/12/13(金) 05:06:43.70
マルチスレッドはないけど、マルチタスクはできた
ユーザーが明示的に切り替えないといけなくて裏で勝手に動けたりはしない

ここまで見た
  • 687
  •  
  • 2013/12/13(金) 05:48:28.43
http://ideone.com/2Tx0rw
こんな感じ

ここまで見た
  • 688
  •  
  • 2013/12/13(金) 08:37:09.05
>>687
このソース、どう読めばマルチスレッドになるの

ここまで見た
  • 689
  •  
  • 2013/12/13(金) 09:17:29.82
f_1(); // 温度センサ値取得/表示
がいっぺんに
[温度センサの値取得]→[値表示]→[ウェイト]
をせずに小さい処理単位で返ってきて、次の
f_2(); // 圧力センサ 〃
に処理を渡せるから、人間からは
f_1(); // 温度センサ値取得/表示
f_2(); // 圧力センサ 〃
f_3(); // 加速度   〃
が同時に動作しているように見える。

マルチスレッドではなくマルチタスクだな。

ここまで見た
  • 690
  •  
  • 2013/12/13(金) 09:19:28.48
俺には単なるサブルーチンの逐次処理に見える

ここまで見た
  • 691
  •  
  • 2013/12/13(金) 09:26:07.13
まるちさぶるーちん

ここまで見た
  • 692
  •  
  • 2013/12/13(金) 10:15:19.75
これはMS-DOS時代の組み込みでよく使われた手法。
MS-DOSの常駐プログラムとかはもっとマシな方法だと思う。

ここまで見た
  • 693
  •  
  • 2013/12/13(金) 10:28:48.03
マルチスレッドのない環境で、処理を小分けにするっていう実装テクニックか。それなら分かる。

ここまで見た
  • 694
  •  
  • 2013/12/13(金) 15:26:30.61
タイマー割り込みでバックグランド処理を実装してたな。
InDOSフラグ見てファンクションリクエストを呼び出し中なら
次の割り込みを待ってたけど、
逆にバックグランドがファンクションリクエストを呼び出し中なら
処理を譲れないから、フォアグランドの処理がカクカクになる。
DOSのPRINTコマンドの使えなさを覚えているなら
どんなものかわかるだろう。

ここまで見た
  • 695
  •  
  • 2013/12/13(金) 15:36:20.82
print.sys と置き換えて使ってた気がする

ここまで見た
  • 696
  •  
  • 2013/12/30(月) 04:42:00.17
Undocumented DOSっていう洋書には随分世話になったな

ここまで見た
  • 697
  •  
  • 2013/12/30(月) 05:47:42.89
Interrupt Listもな

ここまで見た
  • 698
  •  
  • 2013/12/30(月) 06:59:57.33
Undocumented DOSはもうずいぶん前に売ってしまったが、
Interrupt Listは場所も取らないことだし、今でも記念に取ってある。
あと、「MS-DOS完全活用法」とか「IBM PC & 80286のすべて」なんかも
ついつい捨てられなくて今でも目の前にあるよ。

ここまで見た
  • 699
  •  
  • 2013/12/30(月) 12:42:28.59
ピーターノートン&ポールヤオ著のコレ持ってた

http://www.amazon.co.jp/gp/aw/d/4915673278/ref=redir_mdp_mobile

ここまで見た
  • 700
  •  
  • 2013/12/30(月) 12:48:31.60
https://i.imgur.com/p2Jun40.jpg

やっぱ絵になるなあ、カッコいい

ここまで見た
  • 701
  •  
  • 2013/12/30(月) 13:01:12.13
DOS時代、テキスト画面制御するのにテキストVRAM直接アクセスは常識だった。
負け組Ansiエスケープシーケンスは論外として、画面BIOSでは4.7MHzの初代機でモッサリだったので。
テキストVRAMは、初代機MDAのVRAMアドレスと属性がCGA以降と違ってたので、実行時判断も必要だった。
同じ要領でNEC-9801にも応用出来た。

ここまで見た
  • 702
  •  
  • 2013/12/30(月) 15:23:05.11
DOSコールによる文字出力だと、2バイト半角文字が二重に出されたりしたのを覚えてる。
SJISと被る1バイト記号を出そうとしたら、まとめて出力すると漢字になるけど1バイトずつ出すといけたり。

ここまで見た
  • 703
  • 2014/01/01(水) 09:15:04.39
DOSプログラミングの運勢。

ここまで見た
  • 704
  • 2014/01/01(水) 09:27:46.76
>>703の運勢

ここまで見た
  • 705
  • 2014/01/01(水) 15:56:37.02
我が家のPCの消費電力

ここまで見た
  • 706
  •  
  • 2014/01/04(土) 00:31:30.85
以前X86のLDSやLES命令をあまり見かけないという話が出てたが、
制御系の命令を除いたら、ENTERじゃないかと思う。
元々はPASCALの様な関数のネストが出来る言語向けの機能なのだが、
Delphiでも使ってくれてない。

ここまで見た
  • 707
  •  
  • 2014/01/04(土) 23:11:37.92
enterは第2オペランドの意味がよく分からん。保護が効くわけじゃないのに。

ここまで見た
  • 708
  •  
  • 2014/01/05(日) 07:52:28.27
こんなふうにLevel2FuncはLevel1Funcの変数にアクセスできる。
Level1Funcのスタックフレームのベースポインタを
Level2Funcに渡しているのでそれが可能になる。

procedure Level1Func(x : Integer);
var
 z : Integer;
 procedure Level2Func(y : Integer);
 begin
  writeln(x, y, z)
 end;
begin
 z := 222;
 Level2Func 999;
end.

ここまで見た
  • 709
  •  
  • 2014/01/05(日) 09:05:42.96
<ローカル変数>
<level 2 bp>
<level 1 bp>
<bp 復元用> .. Level2FuncでBPの指す位置
[return address]
[y 引数]
<z ローカル変数>
<level 1 bp>
<bp 復元用> .. Level1FuncでBPの指す位置
[return address]
[x 引数]

スタックはこんな感じになるので、Level2Funcでは
mov bx, [bp-2]
mov ax, ss:[bx-4]
でaxにzの値を取得でき、
mov ax, ss:[bx+4]
でaxにxの値を取得できる。

ここまで見た
  • 710
  •  
  • 2014/01/05(日) 09:09:51.71
enter ローカル変数サイズ, 2
いっぱつで
<ローカル変数>
<level 2 bp>
<level 1 bp>
<bp 復元用> .. Level2FuncでBPの指す位置
の処理をやってくれる。

2番目のパラメータが0の場合は
push bp
mov bp, sp
sub sp, ローカル変数サイズ
の処理だけになるのだが、
この場合、push, movで処理したほうが速い。

ここまで見た
  • 711
  •  
  • 2014/01/05(日) 22:03:29.25
詳しい説明さんくす

ここまで見た
  • 712
  •  
  • 2014/01/15(水) 21:36:44.02
delphiは素直に関数の最後の引数で1レベル上のebp引き渡してるね

ここまで見た
  • 713
  •  
  • 2014/01/15(水) 22:30:47.07
LEAはx64から急に使い出した
MOV RBX, offset LABEL なんてやったら
64bitの即値を代入することになって大変だ

ここまで見た
  • 714
  •  
  • 2014/01/17(金) 22:25:55.20
使わなかった命令No1はBOUNDだろ
登場したときはすでにINT5が使用済みだったという

ここまで見た
  • 715
  •  
  • 2014/01/17(金) 22:37:20.28
nop

ここまで見た
  • 716
  •  
  • 2014/01/17(金) 23:14:49.64
in/outのお供でnopは結構使ったかな
途中からjmp short $+2になって、
その次はなにやらどっかのI/O portにダミー出力してた記憶が

ここまで見た
  • 717
  •  
  • 2014/01/17(金) 23:24:40.81
fwait

ここまで見た
  • 718
  •  
  • 2014/01/17(金) 23:56:52.49
masmは全部の8087命令の前にfwaitを勝手につけてたけど、
いつの間にか付かなくなったな。いつからだろう。

ここまで見た
  • 719
  •  
  • 2014/01/18(土) 00:44:22.67
マルチプロセス?

ここまで見た
  • 720
  •  
  • 2014/01/18(土) 14:33:09.85
>>714
bound使うとプリンターからハードコピーが

ここまで見た
  • 721
  •  
  • 2014/01/18(土) 14:54:46.93
>>714
boundはwin9xで大活躍してるぞ

ここまで見た
  • 722
  •  
  • 2014/01/18(土) 16:46:11.76
64bit modeでは廃止になってるしなぁ

ここまで見た
  • 723
  •  
  • 2014/01/24(金) 14:42:37.62
fwaitは .8086指定で付く
8087はCPUから独立して直接バスとつながってた文字通りのコプロセッサだった
最近のMASMは .386がミニマムでデフォルトだからダメだな

ここまで見た
  • 724
  •  
  • 2014/01/24(金) 14:47:29.87
そういえば8086は微妙に動作が違ってたよね
cxがゼロのとき、loop や rep は 0xffff回ループしてたし

ここまで見た
  • 725
  •  
  • 2014/01/24(金) 15:31:15.89
>cxがゼロのとき、loop や rep は 0xffff回ループしてたし

CXが0のときと65535のときでループ回数が同じ? んなわけないと思うがなあ。

ここまで見た
  • 726
  •  
  • 2014/01/24(金) 15:43:27.70
ああごめん、0x1000回だな

ここまで見た
  • 727
  •  
  • 2014/01/24(金) 15:44:02.89
もいっこたりない、0x10000だ

ここまで見た
  • 728
  •  
  • 2014/01/29(水) 14:34:19.53
DOS時代はCPUの差し替えとかやりまくってたなぁ
CPUの判定はこんな感じだったっけ?
8086 push sp; pop ax; sp != ax
186 flags bit 15 == 1
286 MSW 4-15 bit == all 1
386 eflags bit 18 が書き換え不可
486 eflags bit 21 が書き換え不可
cpuid世代 eflags bit 21 が書き換え可能

ここまで見た
  • 729
  •  
  • 2014/01/29(水) 22:31:03.43
9801スーパーテクニックに詳しい判別法が載ってたね。
8086と186はpop csで見分けてたような。

ここまで見た
  • 730
  •  
  • 2014/01/30(木) 06:47:47.58
>>728
>8086 push sp; pop ax; sp != ax
!!!!なんでだ?

ここまで見た
  • 731
  •  
  • 2014/01/30(木) 10:04:10.04
sp+=2される前にスタックに入れられるかされた後に入れられるかの違い

ここまで見た
  • 732
  •  
  • 2014/01/30(木) 12:15:55.19
なんで sp+=2 されるんだ

ここまで見た
  • 733
  •  
  • 2014/01/30(木) 12:53:09.11
popの動作も sp <- [sp], sp += 2だから
push sp, pop spをペアで使えば大丈夫だ問題ない

ここまで見た
  • 734
  •  
  • 2014/01/30(木) 13:08:37.74
ああ、push時は-2だったな

砂時計アラームタイマー
フリックゾンビ
ここまで見た

★お気に入り追加

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