質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • アセンブリ言語

    107questions

    アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

ブートローダーのことで質問があります。

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 262

niko8437926

score 1

OSもどきを作るにあたり、ブートローダのことで質問です。

現在OSもどきを作っているのですが、その際にブートローダのはじめに0x7c00と指示しますが、「ORG 0x7c00」「mov ax, 0x07c0 mov ds, ax」は全く異なりますか?
素人なので意味不明な質問していたらごめんなさい。

 環境

OS : Ubuntu 18.04 LTS
アセンブラ : nasm 2.13.02

ソース1

; boot.asm
; 2018 5 26
; TAB = 4

    ORG 0x7c00

    mov ah, 0x0
    mov al, 0x3
    int 0x10

    mov si, msg
    mov ah, 0x0e

print:

    lodsb

    or al, al
    jz loop1

    int 0x10

    jmp print

msg:

    db "Kindows", 13, 10, 0

loop1:
    jmp loop1

    times 510 - ($ - $$) db 0

    db 0x55
    db 0xaa

ソース2

; boot.asm
; 2018 5 26
; TAB = 4

    mov ax, 0x07c0
    mov ds, ax

    mov ah, 0x0
    mov al, 0x3
    int 0x10

    mov si, msg
    mov ah, 0x0e

print:

    lodsb

    or al, al
    jz loop1

    int 0x10

    jmp print

msg:

    db "Kindows", 13, 10, 0

loop1:
    jmp loop1

    times 510 - ($ - $$) db 0

    db 0x55
    db 0xaa

両方共試した結果

両方共、「Kindows」と画面に出力されました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+2

ブートローダーと言うことですので、MBR用のコードで、PCのBIOSによってディスクのMBRが0x7c00番地にロードされることを前提としたものなのでしょう。

ソース1はORG 0x7c00擬似命令で始まっているので、その後のmov ah, 0x0から始まる命令は0x7c00番地から始まるアドレスでアセンブルされるかたちになります。

ソース2もfuzzballさんのご指摘のように、実行されるときにDS:SIも0x7c00番地を指すようになるので、結果的にソース1もソース2も"Kindows"と表示されます。

「ORG 0x7c00」「mov ax, 0x07c0 mov ds, ax」は全く異なりますか?

本来、目的としていることは異なります。実行結果は見た目、同じになっていますが、先に述べたようにORG 0x7c00は擬似命令で、その後に続くアセンブリコードのアドレスが変わります。

BIOSからディスクのMBRを0x7c00番地に読み込んだ後、CS:IPは 0:0x7c00でこのブートローダーを実行します。ですので、ソース1でのORG 0x7c00は実行開始時の CS:IPが 0:0x7c00であることを前提とするもので正しく動作します。

ソース2でORG 0x7c00が指定されていなくても動作するのは、使われているjzjmpらのジャンプ命令が相対ジャンプで済んでいるからです。もし、ソース2のコードがもっと大きく、jmp命令の飛び先がもっと離れていた場合は絶対アドレスになるので、その場合は正しく動作せず、暴走すると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

この質問の本質は、

ds=0x0000 のとき、ds:7c00 = 0x7c00
ds=0x07c0 のとき、ds:0000 = 0x7c00

ではないかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/28 21:00

    セグメントの件、気が付きませんでした。
    でもそうすると、その後のアドレス(オフセット)の意味が違ってきますね。

    キャンセル

+1

ORG命令は、開始アドレスを設定。
アセンブルする際のオプション設定でも設定可能なので、そちらで設定していませんか? どちらが優先かは、忘れました。(マニュアルとかにある筈)

ここで不適切な設定をすると全く動かないと思います。
まあ、デバッガ等で開始アドレス指定で実行すれば、別ですが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ORG命令で何をさせたいんでしょうか。
双方、デバッガで実行させれば何が違うかわかると思いますが

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • アセンブリ言語

    107questions

    アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。