アセンブラを勉強しよ ..
[2ch|▼Menu]
511:デフォルトの名無しさん
08/11/26 23:02:29
GSって自由に使ってもいいの?

512:デフォルトの名無しさん
08/11/26 23:15:13
何をしたいのか環境によるっしょ

513:デフォルトの名無しさん
08/11/27 01:51:03
486から後のセグメントの意味と、386から前のセグメントの意味を混同している奴は恥ずかしいぞ。

514:デフォルトの名無しさん
08/11/27 02:11:51
すまん386と486の間のセグメントの違いはわからん。
リアルモードとプロテクトモードの違いのことじゃないよね?

515:デフォルトの名無しさん
08/11/27 02:34:49
それって、386以降のプロテクトモードでのメモリー空間マッピング機能とか領域保護機能のためのレジスタになったってやつ?

516:デフォルトの名無しさん
08/11/27 05:48:17
513は恥ずかしい奴。

517:デフォルトの名無しさん
08/11/27 11:02:24
513は386と286と言いたかったのだと思われ。

リアルモードとプロテクトモードと言い換えてもいいか。

518:デフォルトの名無しさん
08/11/27 11:15:39
286にも16bitプロテクトモードなんていうものがあって、186と286の間ではないかと。


519:デフォルトの名無しさん
08/11/27 11:24:28
GS, FSセグメントレジスタの使用、アドレッシングを目的を除く32Bitレジスタの使用は、
386以降ならリアルモードでも仮想86でも可能。
もちろんこのモードでのセグメントレジスタは伝統的な4ビットシフト型となる。


520:デフォルトの名無しさん
08/11/27 12:01:43
リアルモードに戻った直後のセグメントレジスタ更新前なら
プロテクトモード時に設定されたアドレスにアクセス可能

521:デフォルトの名無しさん
08/11/27 12:51:31
4Gリアルモードとか呼ばれてる奴ですな

522:デフォルトの名無しさん
08/11/27 14:18:52
いい加減、モード大杉

523:デフォルトの名無しさん
08/11/27 15:54:15
今でもSSとCSを別にしているOSがあると聞いたことがある。セキュリティ上の理由で。
詳細は知らんが。



524:デフォルトの名無しさん
08/11/27 21:10:15
Windowsがアプリケーションのメモリ空間の拡張にAWEなんてやっていたけど、
そんなことするくらいならセレクタ復活させたらいいのにと思っていた。

525:デフォルトの名無しさん
08/11/27 21:52:51
>>523
Windowsのカーネルモード時のセグメントセレクタの基本値
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000

CS!=SSですね。

>>524
それじゃAWEのかわりにならんだろ。

526:デフォルトの名無しさん
08/11/27 22:03:31
>>525
セレクタが違ってもディスクプリタが同じ領域をポイントしてる可能性もあるのでは。

527:デフォルトの名無しさん
08/11/27 22:41:20
>>523
Linuxとかそこらへん向けにそういう実装があったな、名前忘れたが。
4G全域でなく、必要な部分だけにきっちりセグメント範囲を限定することで
想定外のアクセスでフォルト起こすようにするんだったか。

528:デフォルトの名無しさん
08/11/28 01:36:24
>>522
だって互換性が・・・。

529:デフォルトの名無しさん
08/11/28 03:06:03
互換を言うならx64のロングモードに仮想86を復活汁

530: ◆0uxK91AxII
08/11/28 05:02:04
>>525
>>526
手元にあるW2kのkernelModeだと、同じ場所を示していた。

CS:0008 SS:0010 DS:0023 ES:0023 FS:0030 GS:0000
GDT base:80036000 limit:03ff
0: 00 00 00 00 00 00 00 00
1: 00 cf 9b 00 00 00 ff ff
2: 00 cf 93 00 00 00 ff ff
3: 00 cf fb 00 00 00 ff ff
4: 00 cf f3 00 00 00 ff ff
5: 80 00 8b 2c 10 00 20 ab
6: ff c0 93 df f0 00 00 01

どうでも良い事だけどね。

531:デフォルトの名無しさん
08/11/28 09:50:53
アセンブリの入門書を2冊持っているのですが、どちらも実数定数に
ついては、簡略・割愛しているのですが、実数定数は初心者には
複雑なのでしょうか?
実数の計算できないとお話にならない気もしますが…

532:デフォルトの名無しさん
08/11/28 10:01:44
複雑です
浮動小数点が必要な場面でアセンブラを使うような人なら
そのあたりの情報はだいたい見つけられます

533:デフォルトの名無しさん
08/11/28 10:50:32
>>531
何のアセンブラかにも拠るからねぇ。定数ロードのインストラクションを持つチップもあることだし、大した話じゃないけどね。

>>532
それは、フォーマットが複雑だといっているのか?

534:デフォルトの名無しさん
08/11/28 11:15:53
>>533
入門書を読んでる人にとっちゃ、いろんな意味で複雑でしょ
一通り分かった人ならともかく

535:デフォルトの名無しさん
08/11/28 12:36:20
アセンブラ使いが実数?
何を頓珍漢な事言ってるんだ??

実数演算が必要な所では計算式も煩雑だろうに
素直に高級言語使ってろって話だと思うがな。

536:デフォルトの名無しさん
08/11/28 12:40:33
例えばこんなコードなら複雑でもなんでもないじゃん。
# 実在するかは兎も角
invPi: ld rf0, #1.0
 ldpi rf1
 div rf0, rf1
 ret

>>535
そうは言うがな大佐、読める能力はあるに越したことはないと思うぞ。

537: ◆0uxK91AxII
08/11/28 13:55:39
例えば、100.0を掛ける場合、この値をどう書くかとか、そういう辺りだろうね。

538:デフォルトの名無しさん
08/11/28 14:52:44
アセンブラが実数をサポートしていないなら諦める。

539:デフォルトの名無しさん
08/11/28 14:54:24
CPUやアセンブラを限定しないと答えようが無いうえ、定数が何を指してるかもあいまいかな。
1.実数計算機能が無いCPU
2.実数計算機能があり、直値のロードができないCPU
3.実数計算機能があり、直値のロードが可能なCPU
と分けるとx86系は2になるので、x86で定数は静的なデータとして定義する必要がある。
 .DATA
hoge  REAL8  10.12345
 .CODE
  FLD  hoge
  FLDPI ; 円周率の定数ロードは専用命令があったりする。

540:デフォルトの名無しさん
08/11/28 19:44:11
x86 の実数計算は、浮動小数点レジスタの扱いがすげー面倒なので覚えてないわ・・・。
SSEx 使った方が楽なんじゃないか。

541:デフォルトの名無しさん
08/11/28 23:39:33
>>539
ボクの486SXマシンじゃ実行出来ません ><

542:デフォルトの名無しさん
08/11/29 00:34:00
>>541
Win9xやNTのWin32アプリならx87のエミュレーションやってくれる。

>>540
XMMをスカラで使うと何か損した気分になる。

543:デフォルトの名無しさん
08/11/29 11:03:27
MS-DOSでアセンブラするには16ビット版リンカってのが必ずいるの?

544:デフォルトの名無しさん
08/11/29 11:17:51
いるよ〜。
アセンブラはVS2008についてくるWin32用のでいけるけどね。

545:デフォルトの名無しさん
08/11/29 11:50:46
どうもです。
lnk563.exeなるものを調達してきて、その中からlink.exeを取り出しました。
試しに実行ファイルを作ってみようと、ml ver9とそのlink.exeをasmファイルの
あるディレクトリにぶちこんで
ml /omf ???.asm
と打ち込んだら、アセンブルは完了したのにリンカが自動呼び出しさせません。
なぜでしょうか。

546:デフォルトの名無しさん
08/11/29 12:24:51
>>545
>リンカが自動呼び出しさせません
って、実行のことか?

547:デフォルトの名無しさん
08/11/29 12:40:35
32bit用と16bit用でLinkの引数の書式が違うから、呼び出す前に互換があるか確認してるのかも。

548:デフォルトの名無しさん
08/11/29 13:03:56
/omf オプション自体が /cと同じでlinkerの呼び出しを行わなくする作用がある。

549:545
08/11/29 13:10:02
確かに、32ビットリンカだと、mlコマンド打てば自動で呼び出されますね。
ただし、OMF形式でなくて、COFF形式でオブジェクトファイルを作成する
必要がありますが…。
16ビットの場合はOMF形式じゃないとだめらしいのですが、それで作っても
リンカは呼び出されません。自前で全部引数入れなきゃだめですかね。


550:デフォルトの名無しさん
08/11/29 18:37:46
ダメです。ちゃんとmakefileを作るか諦めてバッチでどうぞ。

551:545
08/11/30 00:52:02
そうですか、どうもです。

552:デフォルトの名無しさん
08/12/02 12:10:42
突然ですが、レガシーなDMAコントローラを使う場合、
CPUのキャッシュとDMAによる物理メモリへの書き込みとを同期させる
には、far jmp 命令を実行すれば良かったんでしょうか?

553:デフォルトの名無しさん
08/12/02 14:56:45
x86でのDMA転送は、I/O Agent が勝手にsnoopして、物理メモリとキャッシュ
と同期する、という噂がありますが、正式な資料がどこかにありませんかね。

IA-32 Intel Architecture Software Developer's Manualの
Volume 3「System Programming Guide」 の 9.3.2節の以下の
部分に何となく書かれていますが、「できる(can performe)」ことと
「実際にそうなっている」事とは別ですから。

9.3.2. Choosing a Memory Type
The simplest system memory model does not use memory-mapped I/O with read or write side
effects, does not include a frame buffer, and uses the write-back memory type for all memory.
An I/O agent can perform direct memory access (DMA) to write-back memory and the cache
protocol maintains cache coherency.

554:a
08/12/02 15:06:54
age

555:デフォルトの名無しさん
08/12/03 00:04:07
>>553
ハードの実装次第

556:デフォルトの名無しさん
08/12/03 00:59:39
>>552
far jmpはパイプラインが捨てられるだけだ。
キャッシュきれいにしたけりゃwbinvdあたり使わねば。




557:デフォルトの名無しさん
08/12/03 01:47:07
>>556
自己書き換えコードの直後に jmp するというのはキャッシュ・クリア
ではなくパイプライン・クリアでしたっけ?

言われてみれば、データ用のキャッシュは、CPU自身の書き換えでは
整合するに決まってますね。

558:デフォルトの名無しさん
08/12/03 01:53:55
>>555
PCIは、あるデバイスがマスターになって、メモリに転送する機能が
定められている。Legacy DMAは、ISAバスに繋がっているが、ISAバスは
ISA-PCIブリッジによってPCIバスに繋がっている。

Legacy DMA転送は、PCIのこの転送機能を利用しているのだろうか?

559:デフォルトの名無しさん
08/12/04 02:16:42
>>558
そりゃブリッジがバスマスタになってごにょごにょしなけりゃ、
DMAにならんだろう。


560:デフォルトの名無しさん
08/12/04 07:53:34
>>559
PCIバスマスタ転送は、自動的にチップセットによってsnoopされ、
CPU内部のキャッシュと同期が取られるはずなので、
Legacy DMA 転送も、CPUの内部キャッシュと勝手に同期される
ということで正しいのだろうか。

561:デフォルトの名無しさん
08/12/04 09:34:17
されなきゃ8237直に叩くような行儀の悪いコードが
動かなくなってしまうのではないかと。

ISAのバスマスタなんてとんでもないモノは無理だと思うが。


562:デフォルトの名無しさん
08/12/04 10:03:45
>>561
てっきり、仮想8086モードでjmp far ptrを行うと、キャッシュや
パイプラインなどが実メモリと同期される性質(未確認)を使っているの
かと思ってますた。

チップセット内蔵の8237同等パーツは、今でも実メモリに直に繋がっている
ようにエミュレートされているのかと思ってましたが、そうではないの
かも知れませんね。

今は、絶対に、PCIのバスマスタ転送を利用していて、勝手にsnoopされて
いるんだという明確な証拠が欲しいですが。

563:デフォルトの名無しさん
08/12/04 22:02:23
少なくとも論理的にはPCIデバイスの先につながっているようになっている。
ちなみにキャッシュは気にする必要がない。そうでなければ既存のOSが動かなくなる。

564:デフォルトの名無しさん
08/12/09 06:21:42
>>563
便乗質問ですが、この場合CPUからの書き込みも何も気にする必要がないんでしょうか?
それともドライバーで何かの処理(DMAの領域はキャッシュ不可(ライトスルー)にする
等)が必要でしょうか?

ちなみにむかーし自分がm68kの乗ったマシンのドライバを書いた時はその手の処理を
したように記憶しています。今どき(?)のx86 & PCIのドライバに関してこの辺の知識を
得たいと思ったら何かお勧めの書籍等ありますかね?

565:デフォルトの名無しさん
08/12/10 14:18:11
ちょっと質問しまつ

使うアセンブラはyasm

汎用32ビットレジスタは eax,ebx,ecx,edx とかあるけど
汎用64ビットレジスタって rax,rbx,rcx.. .とか先頭にrを付けるのでいいのかな

566:デフォルトの名無しさん
08/12/10 14:43:38
ドキュメント読まないYUTORIか

567:デフォルトの名無しさん
08/12/10 20:59:37
>>566
読まないんじゃなくて読めない
ゆとりです

568:565・567
08/12/10 21:48:48
自己解決しますた
nasmのドキュメソトにレジスタ名載ってますた

>>566
d

569:デフォルトの名無しさん
08/12/11 03:34:33
ARMなんですが,実行ファイル(ELF)を無理矢理で良いので
アセンブラの段階まで書き下してくれるようなソフトってすでにあったりしませんか?

FF DE FF E7 FF DE ・・・・・・

bx lr

なんていうかこんな感じで

570:デフォルトの名無しさん
08/12/11 03:50:02
>>569
あったな、あった。
昔はそんなの沢山あったな。

まあ、難しいもんでもないから自分で作ってみたら?

データとプログラムの区別とか、ジャンプテーブルの解釈がミソだぜ。

571:デフォルトの名無しさん
08/12/11 03:50:36
objdump -D

572:デフォルトの名無しさん
08/12/19 16:44:55
win32+VC++で、逆アセした関数をC++に組み込むのに安全で手っ取り早い方法を教えてケロ

573:デフォルトの名無しさん
08/12/19 17:02:33
MASMで書いてリンクじゃ駄目なの?

574:デフォルトの名無しさん
08/12/19 19:32:32
>>572
違法行為やめろ

575: ◆0uxK91AxII
08/12/19 19:48:25
途中でdisassembleしている辺りが、被効率的杉で、ハナシにならない。

576:デフォルトの名無しさん
08/12/19 20:28:38
>>574
なにがどう違法行為なんだかw

もうすぐ合法になって、契約による縛りも無意味になるご時世だというのに。

577: ◆0uxK91AxII
08/12/19 20:40:06
被 -> 非

VirtualAllocで確保して、書き込んで、呼べばokな気がするする。

578:デフォルトの名無しさん
08/12/20 01:18:10
それだと使いたい所が空いてなかったら困らんかい?

適当にもらってから頑張って再配置とか。


579:デフォルトの名無しさん
08/12/20 10:52:50
>>577
それじゃ命令内のアドレスが無茶苦茶だろ。

580: ◆0uxK91AxII
08/12/20 10:58:24
(゚Д゚)ハァ?
バカは死ね。

581:デフォルトの名無しさん
08/12/20 11:00:48
絶対ジャンプや静的変数の扱いをどうすんの。

582: ◆0uxK91AxII
08/12/20 11:04:14
関数に、そんなモノは無い。

583:デフォルトの名無しさん
08/12/20 11:05:50
゚o゚

584: ◆0uxK91AxII
08/12/20 11:14:57
572が想定している関数に、そんなモノは無い。
...と書くべきだったか。

585:デフォルトの名無しさん
08/12/20 11:22:07
もちろん無いなら問題ないんだが、
どうして何の情報も出してない572の想定が分かるのだろうか。

586: ◆0uxK91AxII
08/12/20 11:25:37
『手っ取り早い』という条件があるからね。
とにかく、バカは死ね。

587:デフォルトの名無しさん
08/12/20 13:22:16
・・・これはひどい。

588:デフォルトの名無しさん
08/12/21 11:56:49
取り敢えず、>572が諦めれば済むな。

589:デフォルトの名無しさん
08/12/21 20:09:21
アセンブラを安全に使うなんて、無理だろ。つうか使う意味が無い。
危険だけど好きな事が出来るのがアセンブラの醍醐味なんだからな。

590:デフォルトの名無しさん
08/12/22 08:24:12
危険つっても攻殻機動隊の世界みたく脳が焼かれるわけじゃなし

591:デフォルトの名無しさん
08/12/22 14:03:18
無茶すりゃOSに怒られるしなあ…


592:デフォルトの名無しさん
08/12/22 15:45:23
MS-DOS の時代に比べれば、みんな安全なプログラムだよなぁ。

593:デフォルトの名無しさん
08/12/23 10:31:13
そうだねえ。
ハード叩きまくりだったからなあ。

再起不能になって修理するハメになったり…


594:デフォルトの名無しさん
08/12/28 00:52:29
32ビットは対象外かな?

595:デフォルトの名無しさん
08/12/28 01:00:40
いくらでもOK

596:デフォルトの名無しさん
08/12/28 08:44:52
アセンブラ勉強ならmasm使うべき

597:デフォルトの名無しさん
08/12/29 01:21:28
x86が基本ってことはないと思うが・・。

598:デフォルトの名無しさん
08/12/29 07:11:30
目の前にあるじゃない

599:デフォルトの名無しさん
08/12/29 09:01:18
基本中の基本ということなら68000かな。

600:,,・´∀`・,,)っ-●◎○
08/12/29 09:11:44
そこはMMIXwareだろう



最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5189日前に更新/148 KB
担当:undef