匿名質問者

『はじめて読む486』という本を読み進めています。

その中でセグメントレジスタの値を確認する、という項目があるのですが、そこで出てくるCのプログラムで

#include <dos.h>
segread(&sreg);

という記述があります。しかしこのdos.hというのはMS-DOSでしか使用出来ないライブラリのようです。(手元の環境はLinux(x86_64))
ネットで調べるとLinuxでは上記のようなCのプログラムではセグメントレジスタの値は取得出来ないといった記述を見ました。
アセンブラ(nasm)等で実行するプログラムのセグメントレジスタの値を確認する方法はあるでしょうか。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2015/04/20 02:35:03

回答1件)

匿名回答2号 No.1

> アセンブラ(nasm)等で実行するプログラムのセグメントレジスタの値を確認する方法はあるでしょうか。
有ります。

gdb a.out
break main
run
info register

とかすると見ることができます。


本当は「セグメントレジスタの値を自作プログラムで確認する方法」を訊きたい
可能性も考えられますので、その際はその旨ご連絡ください。

匿名質問者

回答ありがとうございます。gdb自体使用したことはありませんでしたので調べてみます。

> 本当は「セグメントレジスタの値を自作プログラムで確認する方法」を訊きたい可能性も考えられますので、その際はその旨ご連絡ください。

教えて頂いた方法も調べますが、仰るとおりプログラムで確認する方法を求めておりました。アセンブラやCで実現する方法を教えて頂けたら幸いです。

2015/04/13 16:28:32
  • 匿名回答1号
    匿名回答1号 2015/04/13 10:45:27
    このへんがそれっぽい?
    http://www.nasm.us/doc/nasmdoc3.html#section-3.6

    こっちのページも参考にするといいと思う
    http://ja.wikibooks.org/wiki/X86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9/x86%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3
  • 匿名質問者
    匿名質問者 2015/04/13 13:37:52
    コメントありがとうございます。ただ、上記URLに従うと、mov ax,weird_seg で以下のようなエラーになり、実行出来ないようです。
    error: symbol `weird_seg' undefined
  • 匿名回答3号
    匿名回答3号 2015/04/13 16:43:44
    weird_segというのはシンボルで、上記はシンボルについて適用するセグメント等に関わる疑似命令の話であって、セグメントの話なのでセグメントレジスタは出てきますが、直接セグメントレジスタを扱う話ではありません。
    アセンブラでセグメントレジスタを扱うのは簡単なのですが、問題は画面に出すなりの方法の方だと思います。
    加えて16/32bitで違うところもある上に、OSは64bitです。

    色々方法はあり得るでしょうが、dosboxだとかエミュレーション環境でやるのが手っ取り早い気がします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません