- ベストアンサー
32ビットレジスタで64ビット空間をアクセスする
char *buf; _asm mov esi,buf _asm mov [esi],0x77 bufの先頭アドレスが32ビットを超える位置にある場合に 32ビットしか扱わないコンパイラで可能にする記述を教えてください。 セグメントレジスタとは何でしょうか? VC++でインラインアセンブラで記述します、よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> >・・・OSの役割を、・・・ > パソコンの基礎を学んでいない素人ですので、よろしくお願いします。 いや、逆ですよ。 やりたい事なために自分で学ばないといけないんです。 環境や人の性にしてはいけません。 そもそも、こんな所の基礎を教えてくれるところなんて情報工学系の大学くらいです。 ※ それでも情報工学系の大学生の多くの人は、優秀な人を除いてちゃんと理解できているか怪しいですが。 基礎をすっとばすから訳が分からなくなるんです。 言い訳じゃなく、自分でやるべき事(OSとCPU動作を基礎から勉強)をやってください。
その他の回答 (5)
- zwi
- ベストアンサー率56% (730/1282)
前から思っていたけど仮想記憶メモリ空間とかOSの役割を、まったく理解していないじゃないかなぁ。
お礼
>・・・OSの役割を、・・・ パソコンの基礎を学んでいない素人ですので、よろしくお願いします。
- wormhole
- ベストアンサー率28% (1626/5665)
>32bit用のレジスタの組み合わせで64bitのスコープを捕らえることはできないでしょうか? アドレス空間が32bitしかないモードで動いてるのなら、何をどうやってもそれを超える空間にはアクセスできません(そんな空間あること自体わからないんだし)
お礼
回答ありがとうございます。 32bit環境で開発したアプリを64bit環境で動作させる場合を想定していましたが、他の方回答でよくわかりました。
- zwi
- ベストアンサー率56% (730/1282)
Windows64bitOSで32bitアプリケーションが動く場合は、WoW64配下で動きます。 この場合は、4GB分の仮想メモリしか割り当てられませんので、32bitの外と言うメモリ自体が割り当てられていません。 なので、想定が変なのです。
お礼
再度ありがとうございます。 専門的なことはわかりませんが、余計な事を考える必要はなかったようです。 ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
32bitのモードで動く場合は機械語命令もアドレスが32bit空間に制限されます。 つまり前提に問題有り。
お礼
回答ありがとうございました。 >32bit空間に制限 32bitアプリケーションが動作する場合はOSが判断して割り当てる変数アドレスは32bit以内の空間になると判断していいでしょうか?
- wormhole
- ベストアンサー率28% (1626/5665)
32ビットしか扱えないコンパイラが64ビットに関するもの(命令やレジスタ)を理解できるとは思えませんが。 >セグメントレジスタとは何でしょうか? 調べればわかること。
お礼
回答ありがとうございます。 >調べればわかること 検索しましたが、内容がわかりません。 32bit用のレジスタの組み合わせで64bitのスコープを捕らえることはできないでしょうか? 例えば __int64 II = offset *buf int i = II / 2; _asm mov esi,i _asm mov ebx,esi _asm mov eax,[esi+ebx] 変数割り当てのアラインで偶数番地となり、除算で端数はまずでないと思います。 この例で問題点があればご指摘ください。
お礼
厳しいお言葉厳粛に受け止めさせて頂きます。 暇があればそうしたいのですが、あっと言う間もない人生の終りに近づくと焦ってしまい、かえって逆効果のようですね・・・ハイ。