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

ここまで見た
  • 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「俺の名前を言ってみろ」

ここまで見た
スペシャルスタックポインタ

ここまで見た
  • 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版もある)でいいんとちゃう

ここまで見た
  • 745
  •  
  • 2014/02/18(火) 20:01:20.24
>>744
ありがとうございます。
便利なものがあるんですねー。
>>744さんと制作者さんに感謝^^

ここまで見た
  • 746
  •  
  • 2014/02/21(金) 13:00:41.98
Cコンパイラを初めて使ったとき、その吐き出したコードの大きさに驚いた。
Hello, worldが2kBくらいになって出てきたから。
アセンブラなら
 mov dx,label
 mov ah,9
 int 21h
 ret
label:
 db 'hello, world.',13,10,'$'
たった24バイトで作れるのに。
当時まだFDD2台だったが、こりゃHDDが必要だなと感じたよ。

ここまで見た
  • 747
  •  
  • 2014/02/21(金) 22:00:15.53
スモールモデル: コード64kB データ64kB

(8bit環境から見ると)全然スモールじゃないやん・・・

ここまで見た
  • 748
  •  
  • 2014/02/21(金) 22:12:43.44
8080でもコードとデータでそれぞれ64KBのメモリ空間持てるし大したことではない

ここまで見た
>>747
お前タイニーモデルをしらんのか?

ここまで見た
>>748
8080 はコード・データ他スタックもみな共用での 64KB だ

ここまで見た
  • 751
  •  
  • 2014/02/22(土) 04:37:55.46
>>750
外から区別できるの知らんのねw

ここまで見た
>>751
8080にMMUのようなものは内蔵されていないからね
IOポート番号を16bit とれるようになったは Z80 からだね

ここまで見た
  • 753
  •  
  • 2014/02/22(土) 11:09:45.41
スモールにしろタイニーにしろ
それを超える範囲のメモリにアクセス出来ない訳じゃない
単にセグメントディスクリプタのデフォを適当に初期化してくれるだけ

ここまで見た
  • 754
  •  
  • 2014/02/22(土) 11:38:39.71
>>752
SYNC信号がHIGHのタイミングでデータバスを見れば、コード/データ等外部で判別可能。
http://www.classiccmp.org/dunfield/r/8080.pdf
http://en.wikipedia.org/wiki/Intel_8080

ここまで見た
>>754
それでどうやって >>748 のコードセグメントとデータセグメントをそれぞれ別に64KB確保できるようになるのか?

ここまで見た
  • 756
  •  
  • 2014/02/22(土) 15:28:13.23
スタックセグメントもデータセグメントとは別に64KB確保できるな

ここまで見た
  • 757
  •  
  • 2014/02/22(土) 16:03:56.04
8080にセグメントの概念などない

ここまで見た
  • 758
  •  
  • 2014/02/22(土) 16:12:48.73
アクセスの種別によってメモリ空間を分けることは可能だし、それをセグメントと呼んでも差し支えない。

ここまで見た
  • 759
  •  
  • 2014/02/22(土) 16:15:27.07
後期のZ80 BASICマシンのメモリレイアウトなんて
ほとんど曲芸状態だったよな

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

★お気に入り追加

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