アセンブラを勉強しよ ..
[2ch|▼Menu]
446:デフォルトの名無しさん
08/11/12 22:02:56
>>445
> 8085でデジタル目覚まし時計の作成をせよ
> ・タイマ割り込みは必須
> ・設定した時間で音がなる
> ・複数のスイッチを入力する事で音が止まるようにする
回路図とかあるんかい?


447:デフォルトの名無しさん
08/11/12 22:04:36
>>446
無いです

フローチャートを作成して
それに乗っ取ったプログラミングをすることが課題となっています

448:デフォルトの名無しさん
08/11/12 22:12:02
>>446
うんじゃ、以下の質問に答えれ
o タイマり込みって何をどう叩いて割り込ませるの?
o 音って何をどう叩いて出てくるの?
o スイッチってどこを読めば ON/OFF 判定できるの?


449:445
08/11/12 22:20:05
>>448
ちょっと待っていてください
全部答えられるかわかりませんが
参考になるだろうプログラムがあるのでちょっとアップしてみます

450:445
08/11/12 22:43:22
>>448
パスはsageです
URLリンク(www.uploda.org)
中に説明も書いておきましたのでよろしくお願いします


中にも書いていますが今夜は徹夜でいる予定ですので何時でも質問してくださって大丈夫です

451:デフォルトの名無しさん
08/11/13 02:42:33
さっき起きたが、もう流れてる。とりあえず、手持ちのASMから使えそうなとこ拾ってあげる。
ファイルabs.asm=cのmainに飛ばすための初期化コードから:
  CSEG
  ORG  0000h
  LXI   SP,0A000h ; RAMの末尾番地
  JMP  MAIN    ; cのmainに飛ばすにはc_main_
  ORG  003Ch   ; RST7.5の割り込みベクタの番地
  JMP  TIMER   ; 8253という石をつなぎ、ここに割り込みを入れるよう設定する

452:デフォルトの名無しさん
08/11/13 02:51:00
P53_0 EQU 0F000h ; 8253がMAPされるアドレス空間
P53_1 EQU 0F001h
P53_2 EQU 0F002h
P53_3 EQU 0F003h
MAIN:     ; main loopの開始
/* 8253初期化 */
  P53_3 = 0x36; /* カウンタ0 Bin, mode3, ライトLSB,MSB */
  P53_3 = 0x76; /* カウンタ1 Bin, mode3, ライトLSB,MSB */
  P53_3 = 0xB6; /* カウンタ2 Bin, mode3, ライトLSB,MSB */
/* mode3だと方形波が出るだけなので、カウンタ2はmode0にして割込み
を使う方が正論だが、カウンタ2出力先の8085のRST7.5がエッジトリガ-
なのでmode3(方形波)でうまく行く。CPUによってはmode0を
使わなければならないが、その時は割込み処理でカウンタ2をリロード
しなければならない。 */
  P53_2 = 30720 & 0xFF; /* カウンタ 2 LSB */
  P53_2 = 30720 >> 8; /* カウンタ 2 MSB */
/* 3.072MHz/30720 = 100Hz ( 10mS毎 ) */
RST7.5割り込みを使う理由はコメントを読んでね。このcコードと同じ意味のASMは書ける?

453:455
08/11/13 02:52:13
>>451
ありです



とりあえず再うpしました
URLリンク(www.vipper.org)

454:デフォルトの名無しさん
08/11/13 02:54:42
メインループの概要:
  >>452のように8253を初期化
  時刻メモリを00:00:00に設定
loop:
  SWを読む
  SWの時刻とメモリが一致したら音を鳴らす/または止める
  loopへJMP

455:455
08/11/13 02:58:44
>>452
>このcコードと同じ意味のASMは書ける?
ちょっと辛いと思います・・・orz

456:455
08/11/13 03:00:27
>>454
ああ、非常にわかりやすいです
ありがとうございます

457:デフォルトの名無しさん
08/11/13 03:04:23
ざっと読んだ。ORGのアドレスとかは>>453の環境のように直せるよね?
CSEGは、リンカで再配置するための命令で、ASEGはASMが吐いたオブジェクトをそのまま
実行アドレスにするためなのは理解してる?
今回は音は単なる断続音でいいと思うから、MUSICのテーブルMUSIC:の所を、
音・休符のくり返しにしておけばいい。

458:デフォルトの名無しさん
08/11/13 03:10:21
>>455 しょ〜がねーなあ・・・
  P53_3 = 0x36; /* カウンタ0 Bin, mode3, ライトLSB,MSB */
  MVI A,036h
  STA P53_3
  P53_3 = 0x76; /* カウンタ1 Bin, mode3, ライトLSB,MSB */
  MVI A,076h
  STA P53_3
  P53_3 = 0xB6; /* カウンタ2 Bin, mode3, ライトLSB,MSB */
  MVI A,0B6h
  STA P53_3
  P53_2 = 30720 & 0xFF; /* カウンタ 2 LSB */
  MVI A,0FFh
  STA P53_2
  P53_2 = 30720 >> 8; /* カウンタ 2 MSB */
  MVI A,30720/256
  STA P53_2

459:デフォルトの名無しさん
08/11/13 03:17:02
>>457
>ORGのアドレスとかは>>453の環境のように直せるよね?
試行錯誤してみますが即時にはちょっと辛いかもしれません



>>458
あまりの優しさに。・゚・(ノД`)・゚・。

460:デフォルトの名無しさん
08/11/13 03:18:35
cのコメントを; にしてASMに振ってね。 なかなか本題に入れないな(w
TIMER:  ; 8253をつないで上のように初期化すると、10mSごとに割り込みが発生し、ここにジャンプしてくる
; 8253は___|~~~|___|~~~|___|~~~・・・という信号を出し、これの立ち下がりエッジを8085は割り込みと認識する訳。
  PUSH  H
  PUSH  D
  PUSH  B
  PUSH  PSW
(割り込み処理本体)
  POP  PSW
  POP  B
  POP  D
  POP  H  ; メインで使っているレジスタをこういうpush/popで保護する。順序は判るよね?
  EI      ; 割り込んだときいったんDI状態になるのでそれを回復(また割り込み可能に)
  RET    ; 割り込んだ次の番地(メインのどこか)に復帰
こういうのが割り込み処理プログラミングの基本的なお作法です。

461:445
08/11/13 03:22:32
>>460
了解しました

462:デフォルトの名無しさん
08/11/13 03:23:48
俺の環境は、プログラムのコード(実行命令部)はROMの0番地から、RAMは0A000番地〜
数`バイト、という物なのでORG 0000hになってるわけ。>>455の環境はASMの吐いたコードを
RAMにロードして実行させる環境なのではないかと思う。ORG 8000hとか書かれてるから。

463:445
08/11/13 03:28:02
>>462
>RAMにロードして実行させる環境なのではないかと思う
はい、その通りです

464:デフォルトの名無しさん
08/11/13 03:32:33
割り込み処理本体:
TIMER1: DS 1  ; soft couter 1 100回をカウントし、1秒を作る
SEC:   DS 1 ; 秒カウンタ
MIN:   DS 1 ; 分カウンタ
HOUR:  DS ; 時カウンタ
変数としては最低限、この位は必要だね。

CSEGは上でも書いたけどROMにロードさせるためのアセンブラ命令なので、
>>455はASEGで書き始めればいい。

465:445
08/11/13 03:42:01
>>464
了解です

466:デフォルトの名無しさん
08/11/13 03:51:44
割り込み処理本体の実行部:
  TIMER1を減算、0になったらまた100を入れる。(MAINの初期化時に100にしておくべき)
  0になったときが「1秒ごと」だから、その時に
   秒を加算、59を越えたら、0に戻し、
    分を加算、59を越えたら、0に戻し、
     時を加算、23を越えたら、0に戻す(日付までやるとえらいことになるぞ。)
   時分秒を(表示器があれば)表示器に表示。
    (これは割り込み中にやらずに、メインループに対しフラグで通知して、メインループで
     表示してもらう手法が一般的だ。こういう情報(割り込みからメインループに伝える情報)
     が「イベント」という概念で教えられているものだ。
     時刻そのものではなく、「表示が必要だよ」という情報ね。
     割り込み処理では時刻を変更する、メインではそれを読みとるのみで変更はしない。)
   音が鳴っている状態であれば、音用のポートのON/OFFを切り換える
    (これで、警報音の断続が制御できる)

段付け毎にcのif文=ASMならCPI 、JCかJZかJNZで分岐が必要なのは判るよね。
時分秒は00:00:00〜23:59:59だから、SW入力は8bitのDIPSWか何かが3器つながる必要がある。
その辺は455の環境に合わせてI/Oの番地を書いてね。
プログラムの基本構成はこれで伝わったとおもう。全部書いてあげるのじゃカンニングみたいだし、
そろそろ朝飯食って出勤なので、ここまでにしたい。

467:デフォルトの名無しさん
08/11/13 03:55:49
思い出した。毎年今頃に8085の質問投げてくるkitの学生か?

468:445
08/11/13 03:56:42
>>466
お疲れ様でした
大変、助かりました

これを元に頑張ってみます

本当にありがとうございました

469:445
08/11/13 03:58:14
>>467
kitは大当たりですw
前例いたんですねw

470:デフォルトの名無しさん
08/11/13 12:19:35
工芸繊維大!?

471:デフォルトの名無しさん
08/11/15 02:56:22
どこだ?九州工業大学か?

472:467
08/11/15 04:20:18
上の方で誰かがkitって書いてたんだが、俺もkitが何なのか知りたいな。

473:467
08/11/15 04:34:12
あ(*o*) Kyuusyuu Institute of Technology か

474:デフォルトの名無しさん
08/11/15 09:45:04
金馬鹿工業大学

475:デフォルトの名無しさん
08/11/15 11:30:34
Knight Industries Two Thousand

476:デフォルトの名無しさん
08/11/18 18:55:09
お邪魔します。基本情報処理試験(午後 アセンブラ)の問題集を解いているのですが
解らない問題で行き詰りました。
こちらで教えて頂ますでしょうか?
スレ違いでしたら申し訳ございません。(CASLU 福嶋宏訓 著)

477:467
08/11/19 17:54:40
スレチじゃないけど、俺は85得意だがCASL音痴なんでお役に立てない(m_ _m)

478:デフォルトの名無しさん
08/11/23 06:50:58
教えてください。
MASMを使用したいのですが、現在PCにインストールされている
Visual C++ 2008 Expressには、付属していないようですので
URLリンク(www.microsoft.com)
このMASMをDLしてインストールしようとしました。
しかし、インストールしようとすると「Visual C++ 2005 Express Edition required」
というメッセージが出てインストールできません。
どうすればMASMを使えるようになるのでしょうか。

479:デフォルトの名無しさん
08/11/23 07:18:25
ダウンロードしたzipを強制解凍してくと〜〜ml_exe〜〜というファイルが出てくる。
これがml.exe本体だから適宜リネーム。

480:478
08/11/23 07:23:50
ありがとうございます。
しかし、なぜこんな面倒なことせにゃならんのでしょうかね。
MSはアホなのでしょうか。

481:デフォルトの名無しさん
08/11/23 08:18:26
つーか、VC++2008EEならそんな面倒なコトしなくてもSP1あてれば ml ver9が勝手に入んないか?

482:478
08/11/23 08:51:08
with SP1なるものが出ていたんですね。今から入れ直します。どうもです。

483:デフォルトの名無しさん
08/11/23 18:04:37
c言語のscanfと同じようなことをアセンブラで実行したいんですけど
どういうプログラムを書いたらいいか分かりません
どなたかヒントください

484:デフォルトの名無しさん
08/11/23 18:49:42
Cのscanfをアセンブラから呼べばいい。

485:デフォルトの名無しさん
08/11/23 18:50:15
>>483
地道に解析するしかない。

486:デフォルトの名無しさん
08/11/23 23:04:55
アセンブラって、書くのは労力いりそうですが、習得するのは簡単
ですよね?C言語とかよりも。

487:デフォルトの名無しさん
08/11/23 23:07:18
プロセッサによる。IA64のアセンブラは死ぬるぞよ。

488:デフォルトの名無しさん
08/11/23 23:07:51
x86は?

489:デフォルトの名無しさん
08/11/24 04:54:02
>>483 「可変個の引数リスト」 を扱うってとこがミソかな。
引数リストの場所を覚えておくポインタを設ければいい。cではそのような書き方をしてるはず。

490:デフォルトの名無しさん
08/11/24 10:17:20
インラインアセンブラを使う場合に
_asm{}と__asm{}と2種類を見かけたのですが、どう違うのでしょうか。

491:デフォルトの名無しさん
08/11/24 13:47:53
>>488
IA64よりは簡単。VLIWのアセンブラは人間が書くものじゃねえ。
まあ32bitでRing3だけなら簡単な方じゃないかと思う。

>>490
書き方。


492:デフォルトの名無しさん
08/11/24 20:41:41
IA-64はバンドルに無理やり詰め込まなければ難しくない。

493:デフォルトの名無しさん
08/11/24 21:51:34
IA-64というかItaniumって、けっきょく商業的には失敗作なんでしょ?
消えゆく運命か?

494:デフォルトの名無しさん
08/11/25 00:09:38
HPC用途でもうしばらくは・・・

まあ、そもそもアセンブラでガリガリ書くようなプロセッサじゃないし

495:デフォルトの名無しさん
08/11/25 08:32:10
とりあえず漠然とアセンブリを学習する場合は、16ビットプログラミングが
初心者にはいいの?
32ビットでも変わらない?

496:デフォルトの名無しさん
08/11/25 09:30:17
実行環境を確保できるものにしとけ。


497:デフォルトの名無しさん
08/11/25 22:24:25
MS-DOS はアセンブリ言語勉強するのにいい環境だったな・・・。
割り込みとか簡単にできたし。

498:デフォルトの名無しさん
08/11/26 17:36:49
16ビットっていうと今では無用なセグメント方式とか思い出すな

499:デフォルトの名無しさん
08/11/26 18:26:22
Linuxとかだとアドレッシングにセグメント機能通してるし、方式自体は生きてるけどなあ・・
でもいつまで残るんだろね。
Intelがそれを望む限り続くんだろうけどさ。


500:デフォルトの名無しさん
08/11/26 19:17:20
Linuxってどこでセグメントレジスタ活用しているの?
4GBフラットアドレスに設定しているだけだと思うのだが。

501:デフォルトの名無しさん
08/11/26 19:19:41
>>500
>4GBフラットアドレスに設定しているだけだと思うのだが。

え?そこで使ってるじゃんセグメントレジスタ。

502:デフォルトの名無しさん
08/11/26 19:20:30
だったらWindowsもそだね

503:デフォルトの名無しさん
08/11/26 19:22:09
Win2Kまで使えたOS/2 1.x 互換モードが何気に変態ぽくて好きだったな。

504:デフォルトの名無しさん
08/11/26 19:25:05
フラットに使うだけだと「活用」してるとは言えないな。
32ビットCPUでメモリ空間を拡張するカーネルオプションとか
あったような気もするけど...

505:デフォルトの名無しさん
08/11/26 19:35:37
>>501
それいったら、どうやってセグメントレジスタ抜きでx86を使うの。
64ビットモードならセグメントレジスタ無視が基本だから、使っていないと言えるだろうけど。

そういえば、x86-64はAMD発だから、
Intelはセグメントレジスタ潰したいのだろうと言う根拠に使うのは苦しいな。

506:デフォルトの名無しさん
08/11/26 19:56:47
x86版のWindowsは構造化例外処理にセグメントを思いっきり使っているが

507:デフォルトの名無しさん
08/11/26 20:00:52
いつの間にか追加され忘れ去られてしまったFSとGSのこと、時々でいいから思い出してください。

508:デフォルトの名無しさん
08/11/26 20:32:34
FSは例外で使われてるね

509:デフォルトの名無しさん
08/11/26 22:02:34
FSとGSはほんとに気が付いたらあった感じだね
386以降だっけか

510:デフォルトの名無しさん
08/11/26 22:18:21
Windowsのカーネルで使用するKPCR構造体はx86ではFS、x64ではGSを使ってアクセスしているよ。


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

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