懐かしの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,'$'
-
- 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バイトずつ出すといけたり。
-
- 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だったな
-
- 735
- 2014/01/31(金) 12:48:51.64
-
CPUID以前の互換CPUの見分け方は何かありましたっけ?
AMDとかCYLIXとか
-
- 736
- 2014/02/15(土) 04:35:50.10
-
>8086 push sp; pop ax; sp != ax
これって万が一、同じ数値がスタックに入っていたって事は無いの?
-
- 737
- 2014/02/15(土) 05:03:36.87
-
>>736
何言ってんの??
-
- 738
- 2014/02/15(土) 10:49:42.54
-
SP「俺の名前を言ってみろ」
-
- 739
- 片山博文MZ無能
- 2014/02/15(土) 12:37:34.24
-
スペシャルスタックポインタ
-
- 740
- 2014/02/15(土) 17:45:09.43
-
すっぽん
-
- 741
- 2014/02/15(土) 21:39:33.80
-
DOS用のForthおしえて
-
- 742
- 2014/02/15(土) 22:09:41.69
-
http://www.forth.org/compilers.html
-
- 743
- 2014/02/16(日) 23:18:39.26
-
Delphi始めたんですけど、複雑でわからないんで、Quickbasicに戻りたいんですけど、
もうないんですかねぇ。
-
- 744
- 2014/02/17(月) 00:08:16.64
-
Win32で動く互換品でよければ、
QB64(32bit版もある)でいいんとちゃう
このページを共有する