• ベストアンサー

ジャンプ命令について

一つ教えて頂きたいことがあるのですが本で読んで気づいてのですがMSーDOSでジャンプ命令で例えばアセンブラなのですがjmp2000:000で2000の部分がMS-DOSが勝手に書き換えてしまうというとことなんですがこの勝手にとは何を基準に書き換えてるのでしょうか?拙いですが分かる方 いらしたらご教授よろしくお願いします。 環境はMS-DOSです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

昔のCPU(インテルの8080あたり)のJMP命令は絶対アドレス指定で あったため、プログラムをメモリの何処に置くかは重要でした。 つまり、「空いたメモリ空間に適当にロードすれば実行できる」という モノではなかったのです。これでは不便であるということで、命令 自体が相対アドレス指定になったり、セグメント+オフセットのような メモリアドレス構造をとることで、「アドレスの制約」から自由に なりました。(リロケータブルという) 現CPU(80386系)におけるリアルモード(MS-DOSはコレ)では メモリアドレスはセグメント+オフセットで表されています。 オフセットはプログラムの先頭からの相対位置を示し、セグメントは プログラムがOSによりロードされた実アドレスを示します。 オフセットを参照する限り、実アドレスが何処であっても正しい操作が 可能になります。セグメントはOSがプログラムをロードする時に空いて いるメモリを割り当てます。「勝手に書き換える」とはこの割り当てる 行為の事を指していると思います。プログラムにセグメントまで参照 する命令がある場合はexeヘッダにこの命令のセグメント部分が記録 されているので、OSはこの情報を元にプログラム内のセグメント参照を 解決します。一方、オフセットしか参照しない命令でプログラムを 作成してあれば、exeヘッダは不要になります。これがCOMモデルです。 ファイルの拡張子が.COMになっているのがソレです。

79562
質問者

お礼

空いているメモリを割り当てるのですね。わかりやすい説明ありがとうざいました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • baa756
  • ベストアンサー率43% (28/64)
回答No.1

MS-DOSは、仮想アドレスをサポートしていません。 CPUのi8086も仮想アドレスをサポートする、MMUを持っていません。 しかし、プログラムが実メモリにロードされる、実アドレスは固定されていません。プログラムが実メモリにロードされる時に、実アドレスが決まるのです。 プログラム・ローダー(MS-DOSではこの名称だったか記憶に無いのですが)が、プログラムを実アドレスにロードする時に、実アドレスに合わせて、変換しています。

79562
質問者

お礼

回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アセンブラ言語がわかりません。

    初心者です。まとを得ていない質問でしたらすみません。 C言語は理解できる程度なのですが、アセンブラのコードを書く事ができません。 今アセンブラ言語を学び始めた所ですが、「jr」「jarl」「jmp」などの分岐命令の指定の方法がわかりません。 C言語でいうとどういうコードを書いた時に、このような命令を出力できますでしょうか。 本を読んでも、この上記の命令の意味は書いてあるのですが、実際出力が出来なかったもので。 またアセンブラ言語を学ぶためにいい方法などありましたらお教えく頂けないでしょうか。 よろしくお願いします。

  • アセンブラ初心者です。

    アセンブラ初心者です。 MacOs上のターミナルでgccをつかいアセンブラのソースコードを表示させてみたら .cstring LC0: .ascii "%d \0" .text .globl _main _main: pushl %ebp movl %esp, %ebp pushl %ebx subl $36, %esp call L9 "L00000000001$pb": L9: popl %ebx movl $1, -16(%ebp) jmp L2 L3: movl $1, -12(%ebp) jmp L4 L5: movl -16(%ebp), %eax imull -12(%ebp), %eax movl %eax, 4(%esp) このようになったのですが1つ疑問があります。それはjmp命令のところでjmp L2またはjmp L4とありますがL2とL4のソースコードは表示されていません....。この部分はどうして表示されないのでしょうか?またどのようになっているのでしょうか?教えてください><ちなみにfor文をつかった単純なかけ算のプログラムをCで書きました。

  • x86のJP命令について。

    いつもお世話になっております。 小生、現在CASIOのポケコンZ-1GRにて、 x86アセンブリを勉強中のアセンブリ初心者です。 今回、先輩方にご質問させて頂きたいのは、 JP命令についてです。 まず、以下のコードを見てください。 ORG 2000H START: MOV AX,08888H XOR BX,BX MOV DX,00888H MAIN: AND DX,AX JP SETBX JMP RETURN SETBX: MOV BX,0001H RETURN: IRET END と記述し、アセンブル→実行しますと、BXに1が格納されます。 JP命令というのは、演算後、1のビット数が偶数の時にセットされるもので、 上記のコードだと、DXは0888のままなので、1のビット数は奇数でRETURNにジャンプするはずだと思うのですが。。。 お忙しい中、大変申し訳ございませんが、先輩方、ご教授宜しくお願い致します。

  • MS-DOSが見つからない

    Javaをダウンロードしていざ使おうとしたら、MS-DOSの場所が見つかりません。windows2000を使用していて、本にはスタート→プログラム→アクセサリー→MSーDOSファイル(プロンプト)で出来ると書いてあったのですが、アクセサリーまでは出来たんですがそれ以降が見あたりません。もしかしてMS-DOSのソフトをインストールしなければなりませんか?その場合、いくらほどかかるかと、どのソフトがいいかも教えてください。度重なる質問して申し訳ございません。この似た質問全部見ましたが、あたしのは初歩的っすぎてありませんでした。

  • アセンブリ言語について教えて下さい。no.2

    ご覧いただきありがとうございます。 前回の質問に続き、アセンブラについてお聞きしたいと思います。 前回ご回答を下さった方には非常に感謝しております。またよろしくお願いいたします。 「page擬似命令」と「2つのファイルをリンクさせる方法」が知りたいのですが、参考書等を拝見してもよくわかりません。 どなたかご教授下さい。 ちなみにアセンブラは8086のMASMです。 よろしくお願いいたします。

  • MS DOSプロンプトがない

    Win98、Win95をお使いの方は「スタートメニュー」-「プログラム(P)」-「MS-DOSプロンプト」を選択して起動してください と、あるのですが指示された通りにしてもMS DOSプロンプトがありません。 どこにあるのでしょうか? Win98を使っています。

  • 初心者が読みやすい本(DOS経験者)

    Linuxをはじめたい人がいるのですが、お勧めの本を探しています。 その人はMS-DOSを普通に使うことができ.batなどを作成し使うこともできます。 このような状態でLinuxに移りたいのですが、DOSの知識を生かし、DOSのコマンドはLinuxのこのコマンド(dir=ls)などが載っている本はないでしょうか? 心当たりのある方がいましたら教えてください。 よろしくお願いします。

  • 差押と転付命令について

    例えば、債権者A(債権額120万円)と債権者B(債権額80万円)がいて、債務者をCとし、債務者の預金している銀行をDとします。 債権者Aが預金口座を差押えのみをし、差押え命令がDに送達されたときに、60万円の預金がありました。その後Aが取立て前に、債権者Bも同じ預金口座を差押命令と転付命令を申し立て、Dに送達されました。その時、預金口座はAの差押命令送達後に追加入金40万円があり預金残高は100万円となっていました。なお、転付命令は確定しました。 この場合、60万円は差押えが競合するので、Dは供託しなけれななりませんが、残りの40万円はどうなるのでしょうか。Dはその分も合わせて供託(権利供託)できるのでしょうか。もし供託できるとした場合、その40万円部分の払い戻しはどのような手順で行われるのでしょうか。 この点、個人的には、転付命令が確定すれば、40万円部分は債権譲渡と同じと考え、供託する理由が失われるので、供託自体認められないようにも思うのですが、、、。ひょっとして、あくまで同時に差押えをしている以上転付命令が確定しても、40万円部分は権利供託できるというふうに考えるのでしょか。 ご存知の方ご教授ください。

  • N88BASIC のファイルを Windows に持ってくるには?

    以前の質問で N88BASIC のプログラムを MS-DOS のディスクに持ってくるまでは出来たのですが、DOS から Windows に持ってくることが出来ません。 DOS でフォーマットした 3.5インチディスクを Windows で開こうとしてもフォーマットが違う性か開くことが出来ませんでした。 どなたかこの分野に詳しい方、おりましたらご教授ください。

  • MS-DOSで起動って?

    以前別の方が質問されていたのですが、XPのPCでMS-DOSで起動するには・・・という内容です。 回答には”FDをフォーマットするときに「MS-DOSの起動ディスクを作成する」にチェックを入れて行います。 次いで、そのFDで起動すれば、MS-DOSモードで起動できます。”とありました。 上記についてものすごく初歩的な質問で申し訳ありませんがお願いします。 回答どおりにMSーDOS起動ディスクを作成して、FDを開いたら10個のアイコンが表示されていました。これらの内どれを開くんでしょうか?それとも「FDで起動する」のやりかたが間違ってるのでしょうか?ご回答宜しくお願いします。