アセンブラ… (°Д°)ハァ?

このエントリーをはてなブックマークに追加
943デフォルトの名無しさん:04/11/23 16:19:48
セグメトアドレスってページングの後に決定じゃなかった?

だから
セグメントベース=リニアアドレス≠物理アドレス

ページングoffならリニアアドレス=物理アドレス
944デフォルトの名無しさん:04/11/23 17:12:33
>>942
ベースアドレスには物理アドレスをそのまま入れてやればいいですね。
その算出法というのが何を意図してるのかわからないのだが(リアルモードと混同してる?)、
ベースアドレスの値のままでいいでつ
945デフォルトの名無しさん:04/11/23 19:47:44
946デフォルトの名無しさん:04/11/24 03:58:16

947デフォルトの名無しさん:04/11/24 16:57:39
てかC++とか使いこなせる人がさらなるスピードアップのために使うものでないのか?
948デフォルトの名無しさん:04/11/24 21:11:27
今時アセンブラで書くにはそれなりの理由があるので、
単にさらなるスピードアップと言うだけで使うわけじゃないから、
C, C++を使いこなせるかどうかはあまり関係がない(相関はあるだろうが)。

言語処理系なんかでCじゃ書けないことを実現するとか。
SSEなんかのSIMD命令の利用も、まあ更なるスピードアップでもあるけれども、
意味合いとしてはCじゃ書けないことの部類に入るかな。

949デフォルトの名無しさん:04/11/24 23:08:10
>>942
セグメントベースには論理アドレスを入れるから>>943の言う通り。
ページングを利用する場合も0x0Eの割り込み処理(ページング機構といった方が早いか)がしっかり整っているなら、別に気にする必要ないと思う。

リアル/仮想8086モードでのセグメントとオフセットの話はその通り。

何してんのか知らないけど頑張ってね。
950デフォルトの名無しさん:04/11/24 23:48:20
プロテクトモード移行だからreal to prtectedなんだろな
2つデスクリプタ作って、うぞうぞやってればその内できるよ
951デフォルトの名無しさん:04/11/25 10:18:45
>>950
正直言って君の書いたプログラムを使いたいとは思わない。
952デフォルトの名無しさん:04/11/25 10:54:55
286の設計段階で、セグメントベースもリミットと同じように
4Kごとにしてしまえばよかったのに。なんでだめなの?
953デフォルトの名無しさん:04/11/25 11:31:20
あ、よく考えたらやっぱだめか。
286の段階ではディスクリプタ(8byte)の先頭から6バイト分しか
使われてなくて、リミットのオフセット4K(Gビット=1)ってのは
386から導入されたものだってことだね。286のOSは、64kの
セグメントを複数切り替えて動作する、純粋なリアルモード
のアプリケーションを複数走らせるものだったということなのね。。
954942:04/11/25 11:39:49
皆さんどうもありがとうございます。
real to Protectのコードを書いているのですが。どうにも3rd exceptionが発生してだめなんです…
Monaの旧スレを見ながらやっているのですが…

 もうちょっとがんばってやってみます
955デフォルトの名無しさん:04/11/25 11:58:31
286のOSだとプロセスごとにGDTを割り当てて、
タスク切り替え時にGDTRを、ちょうど386がCR3を
書き換えるみたいに、入れ替えるということなのね。
なるほど。。。

>>942
実際に手を動かした人にだけ技術力はつく!がんばれー
漏れも286のOS作ってみたくなってきたw
956デフォルトの名無しさん:04/11/25 12:12:41
>>942
>1000h * 16 + 0000h

8086ではセグメントレジスタの値は自動的に16倍されるけど、
286/386のプロテクトモードにおけるセグメントディスクリプタ内の
ベースアドレスは16倍されないはず。セグメントの開始アドレスは
バイト単位で指定できるようになってる。

286ではベースアドレスに24ビット = 16MB
386ではベースアドレスに32ビット = 4GB
のリニアアドレスの領域指定できる。
957デフォルトの名無しさん:04/11/25 12:25:08
http://www.google.co.jp/search?q=cache:Ns4C_6fcKCgJ:pc5.2ch.net/test/read.cgi/jisaku/1082357989/401-500+286+%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88%E3%80%80%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AB&hl=ja
このスレの470は大きな勘違いをしてるな。
>ただ、セグメントサイズそのままに16MBに広げた286はどうかと思うよ。

セグメントサイズはそのままって、これは当たり前。8086で動作していた16ビット
アプリケーションをプロテクトモードで同時に複数走らせることを目的としてるんだから。
ディスクリプタの7バイト目にDビットがあるが、これは286では有効ではなく、
32ビットオペランドや32ビットアドレスは386で初めて使えるようになったわけだし。

リニアアドレス空間が16MBというのを小さいと見るなら、確かにそうかもしれないけど。。
958デフォルトの名無しさん:04/11/25 13:06:54
>>952だけど、やっぱりいろいろ考えると変だな。386のリミットの
4kオフセットはでかすぎにしても、ディスクリプタ内のベースとリミットは
8086のセグメントレジスタのように無条件に何倍かにしてもよさそうだ。
8086ですら、16バイトごとにセグメントっていうスコープを割り当てて
メモリ空間使ってたわけだし。286のOSの役割は16ビットアプリケーションに、
セグメントディスクリプタのPビットを386のページエントリのPビットと
同じようにして使って、連続した1MBの領域があるかのように見せるだけだしな。

そもそも286の段階でセグメントのリミットなんて必要だったのかな?8086の
アプリケーションは1MBの領域をアプリケーション内でセグメントレジスタ
という物差しを割り当てて使ってただけでしょ?リミットなんてない。
セグメント指定したら64kすっぽり読み書き可能。OS(特権モード)の
ために用意されたってことかいな。
959デフォルトの名無しさん:04/11/25 22:15:40
そろそろ次スレか?

アセンブラ… (´・ω・`)ショボ━━ン!!!

でおながいします
960デフォルトの名無しさん:04/11/25 22:27:29
キモい顔文字イラネ
961デフォルトの名無しさん:04/11/25 22:34:07
     アセンブラとかいうジジイ言語     
http://pc5.2ch.net/test/read.cgi/tech/1101329594/
962デフォルトの名無しさん:04/11/25 22:49:25
次スレ

アセンブラ… (´・∀・`)ヘー
http://pc5.2ch.net/test/read.cgi/tech/1101390110/
963デフォルトの名無しさん:04/11/25 23:54:41
◎店名 女性専用出張風俗店「LilyMotion」
◎営業時間 24時間 年中無休
◎利用できる場所 ホテルor貴女の自宅
◎利用できる方 女性のみ(カップルの方のコースも別にあります)
コースと料金(女性の方お1人でご利用の場合)
 60分(1時間) 10000円
120分(2時間) 20000円
180分(3時間) 30000円
240分(4時間) 40000円
300分(5時間) 50000円
指名料 2000円
◎お相手は全て当店の指導を受けた素敵な優しい女性ばかりです。
◎女性を満足させるためのテクニック+αがあるのは当店だけです。
◎ピンクローター、ローション、双頭バイブ等のオプション料や追加料金は頂きません。
◎年会費無料の会員登録をされますと全コース2000円オフになります。
◎会員様には男性を指名できる特別限定コースもご用意しております。
◎カップルでご利用の際は下記コースと料金になりますのでご注意下さい。
コースと料金(男性と女性もしくは女性と女性のカップルでご利用の場合)
120分(2時間) 23000円
180分(3時間) 33000円
240分(4時間) 43000円
300分(5時間) 53000円
指名料 2000円
964デフォルトの名無しさん:04/11/26 13:21:34
>>957
それ書いたの俺だわ。
今読むと読点が変だ。恥ずかしい。

8086との互換性のことまでは考えてなかったです。
16MBもの広大な空間を64KBに細切れにしたら使いにくいよ、ということが言いたかった。

8086を作った人達は、8080の16ビット版を作る気だったんだと思うよ。
当時のプログラムは1プロセスあたり64KBで十分で、
それを複数個同時に動かすために1MBのメモリ空間を用意し、
バンク切り替えよりも気が利いている程度のものとして作られたのだと思う。
セグメントレジスタを複数個用意するのはOSに必要だからいいとしても、
それをユーザモード(んなものはないわけだが)に解放したのが間違いだと思う。
965デフォルトの名無しさん:04/11/26 14:43:51
>>964
8085の16ビット版だろうね。
で、ユーザモードなんて概念がないんだから開放するしかないのだが。
966デフォルトの名無しさん:04/11/26 16:19:22
>>964
8086にだってプロテクトモードを設けることはできたでしょう。
1MBの領域を細切れにし、2,3のプログラムで分ける。
でもそれなら、セグメントレジスタには16bitも必要ないでしょうね。
もっと目の粗いものでも十分だった気がします。8bitで、純粋に
GDTのインデックスを指定するためのものという扱いです。
ディスクリプタも4byteぐらいに抑えておけばGDTのサイズもそれ程
膨れ上がりません。

やはり8086のセグメントは単一のアプリケーションに64k以上のメモリ空間を、
バンクの切り替えにより、自由に操作可能とするためのものだと思います。
またUNIXのようにプロセスをバンバン起動するような利用形態は8086では
考えられていなかったのではないでしょうか、どうでしょう。
当時の様子を知らない、素人の推測ですのであてになりませんが。
967964:04/11/26 16:57:23
どうなんでしょう、中の人じゃないので、本当のところはわかりません。

もし、セグメントレジスタを8ビットにして、4KB毎でしか区切れないようにしたら、
メモリがもったいない! と怒られていたと思う。
64KBや128KBしかRAMを積んでないマシンでの4KBは貴重ですから。

セグメントによる恩恵は、64KB越えのメモリアクセスは後からの話で、
まずは、メモリのどこにロードしても絶対アドレスへのジャンプを
書き換えなくてよい、というのが大きいです。
968デフォルトの名無しさん:04/11/26 17:48:34
でも ヒ ュ ー ジ モ ー ド は 最 悪 に 遅 か っ た な
969デフォルトの名無しさん:04/11/26 18:03:56
huge mode? なにそれ?
970デフォルトの名無しさん:04/11/26 18:12:51
Cでセグメント境界を自動的に調節してくれるが、オーバーヘッドが大きい
諸刃の剣。
ってあれはhuge modelだな
971デフォルトの名無しさん:04/11/26 22:05:49
age
972デフォルトの名無しさん:04/11/26 22:13:06
>>966
重なっている部分は共有メモリとして使うつもりだったらしいよ
973デフォルトの名無しさん:04/11/27 03:01:43
ume
974デフォルトの名無しさん:04/11/27 04:23:49
もったいない
975デフォルトの名無しさん:04/11/27 04:28:33
8086の段階でも、セグメントレジスタのビットシフト数を特殊レジスタに
設定しておくことにすれば、ソフトもハードもそう過大なオーバヘッドを招くことなく、
スケーラブルにできたんだよ。
それをしなかったのは、その時点で1MBは使い切れない程広大な
メモリ空間だと思われていたのが1つ。
さらに、次(々)世代ぐらいでは完全な新設計になるので未来のことを
考慮しておくのはナンセンスだと思われていたのがもう1つ。
ところが現実は・・・
976デフォルトの名無しさん:04/11/27 04:42:01
いいじゃないか。386で対応できたんだから
977デフォルトの名無しさん:04/11/27 05:52:15
>>975
8086なんて、プログラムが難しい以前に、調達が難しいだろ。
978デフォルトの名無しさん:04/11/27 08:59:54
>>962
979デフォルトの名無しさん:04/11/27 10:12:11
>>975
集積度が足りなかったんだよ。それぐらい空気嫁。
それともお前は現在の基準で過去を裁く人間なのか?
980デフォルトの名無しさん:04/11/27 11:05:38
>それともお前は現在の基準で過去を裁く人間なのか?
それ程深くもない知識で歴史を眺める以上、ある程度は避けられないですね。

というか8086が出たのが78年。286が出たのが82年。
'71 4004 4bit
'74 8080 8bit
'78 8086 16bit
'82 80286
'85 80386 32bit
この4年の間にどれぐらいの製造技術の変化があったのでしょうかね。
8086から286への変化はCPUの仮想化と見てもいいような変化だと思います。
また32ビット化も考慮されて(Pagingは想定外だったかも)設計されてる。
凄いですね。

>>967
>もし、セグメントレジスタを8ビットにして、4KB毎でしか区切れないようにしたら、
考えていたのは、8bitというのは単純にGDTのインデックス値であり、
ディスクリプタ内で16bitのベースアドレスと属性フィールドを持つような形です。
OSへ新規セグメント要求システムコールを呼び出し、GDTの8bitのインデックスを
割り振ってもらう、そんなものをイメージしてました。システム内ではGDTは
共有されるので、同一の特権モードの保護はなされません。
まあ、その当時にそんな重たいメモリ管理ユニットを乗せられるわけもないですねw
981デフォルトの名無しさん:04/11/27 12:06:09
>>980
ものすごい勢いで集積度は上がりましたが。
ムーアの法則って聞いたことない?
982デフォルトの名無しさん:04/11/27 14:18:05
>>それ程深くもない知識で歴史を眺める以上、ある程度は避けられないですね。
ならだまってろ。だれにでも発言権があるわけではない
983デフォルトの名無しさん:04/11/27 14:24:35
>>982
何様のつもりだこの池沼。仕切り屋ふぜいが。
984デフォルトの名無しさん:04/11/27 14:30:47
俺様のつもりだ。わかったらとっとと退場しろ
985デフォルトの名無しさん:04/11/27 14:33:56
嫌だね。仕切るなら金払え。
986デフォルトの名無しさん:04/11/27 14:37:00
CPUアーキの後だしジャンケン論争って、8ビットのころからちっとも
変わってないな
987デフォルトの名無しさん:04/11/27 14:37:38
>8086の段階でも、セグメントレジスタのビットシフト数を特殊レジスタに
>設定しておくことにすれば、ソフトもハードもそう過大なオーバヘッドを招くことなく、

実際これのオーバーヘッドってどれぐらい?
アイディアとしては悪くなさそうだけど。
988デフォルトの名無しさん:04/11/27 14:38:13
次スレは?
989デフォルトの名無しさん:04/11/27 14:38:52
もう有るよ
990デフォルトの名無しさん:04/11/27 14:46:07
>>989
本当だサンクス
991デフォルトの名無しさん:04/11/27 15:19:19
今のエンジンは100馬力あるのに、昔のエンジンは10馬力しかないからクソ、
10倍大きくしてでも100馬力にするべきだったといってるような議論だな。
992デフォルトの名無しさん
池沼を追い込むなよ。刺されるぞ