q_and_aの過去ログ(0008)

  • (by K, 2007.04.16)

ログ

  • p55(harib00c)のソースコードの最後の行でreadloopに飛び『MOV SI ,0』をした後,次はどこの行に移るのでしょうか?。アセンブラの命令の説明はしてあるのに,文法そのもの説明が少ないような気がしてアセンブラ未経験者には辛いです。 -- GRAND 2006-12-31 (日) 13:58:53
  • GRANDさんへ。次はどの命令にいくのかといえば、その次の行になります。つまり、その「MOV SI,0」の次は「MOV AH,0x02」です。・・・このようにジャンプしたあとでそれ以降をまた順番に実行していくのはアセンブラ(というか機械語)に限らずほぼすべてのプログラム言語に共通しているので、何らかのプログラミング言語の経験さえあれば特に難しいということはないと私は思います。 -- K 2006-12-31 (日) 14:52:08
  • 理解できました。CばかりやっていたせいでラベルというものをCでいう(自作)関数だと勘違いしていました。例えばCの場合は「main(){}の中でとある関数を呼び出すと,その関数の処理が終わると必ずmain(){}中での関数呼出し後のスタックアドレスに戻る」といった風に。 -- GRND 2006-12-31 (日) 18:32:42
  • GRANDさんへ。JBE命令はJMP命令の一種で、指定したラベルへジャンプします。スタックに、戻りアドレスは記録しません。それに対して、C言語の関数の様に、ある処理が終わったら元の位置に戻りたいときは、処理の最後にRET命令を書き、JMPではなくCALLでラベルを指定します。つまり、「ラベルというものをCでいう(自作)関数だ」とする認識は、ある意味合っています。 -- uchan 2007-01-01 (月) 16:55:57
  • はじめまして質問です。P57のCLYS EQU 10の部分が説明がしてありながら同ページのソースに記述されていない気がするのですが…。見落としでしたら記載されている場所を教えていただけますでしょうか。 -- Giude 2007-01-15 (月) 01:00:39
  • Giudeさんへ。この本全体にいえることですが、本文で説明されている変更点が全てコードとして印刷されているわけではありません。本に印刷されているコードは、変更点の中の主要な場所だけです。P10にもきちんと書かれている通り、「本文を読むだけではなくて、ちゃんとプログラムを見てください。」「この本の主役は本文ではなくて、付録のプログラムなのです。」本文はあくまで補助として読むと良いと思います。 -- uchan 2007-01-15 (月) 19:24:57
  • P178のmemtest関数について質問です。この関数でEFLAGSレジスタのACビットを1にしてチェック後、0に戻しています。これは、486以降のACビットは初期値が必ず0であるため、と考えてよいでしょうか。(起動時にBIOS等によりACビットを書き換えられる可能性があるなら勝手に0にしてはいけないのでは、と考えました) -- いぬきち 2007-01-26 (金) 21:32:16
  • ご質問ありがとうございます。本文を最後まで読んだと仮定してお返事いたします。ACビットを1にすると、アプリケーションが4の倍数ではない番地に対してintの読み書きをしたときに例外が発生するようになります(他にもshortが2の倍数でないときも例外になります)。これはなんのためかというと、4の倍数ではない番地にintで読み書きすると処理速度が落ちるためです。そういう個所を発見したい場合にのみACを1にします。BIOSでAC=1にしている可能性はまずありませんが、仮にあったとしても、AC=1のままではアプリケーションが作りにくいかもしれません。こういう制御ビットなのでOSが勝手にAC=0にしてしまっても問題はありません。 -- K 2007-01-27 (土) 09:25:44
  • 回答ありがとうございます。納得できました。 -- いぬきち 2007-01-27 (土) 14:18:36
  • 誤字指摘はここでよいでしょうか? -- 名無しさん 2007-02-05 (月) 13:09:00
  • 失礼しました。上の名無しです。楽しく学習させていただいております。初版第4刷、P.213の2段落目「第三のパターンとして、〜」の2行目で、「左」と書いてありますが、右ですよね?左ならばbxはプラスになると思います。 -- Rolly 2007-02-05 (月) 13:13:49
  • 誤字指摘はmistakesへどうぞ〜。 -- Akkie 2007-02-05 (月) 20:34:51
  • 失礼しました。しかも、間違ってませんでした。意味を取り違えていただけです。お邪魔しました。 -- Rolly 2007-02-05 (月) 21:35:37
  • 02_day\helloos5\ipl.nas について質問です。AH=0x0e で INT 0x10 を呼び出して文字表示していますが、この部分をこのファンクション以外(AH=0x09 や 0x0a)に変えるとうまく表示しません(画面がクリアされ、左上にアドレスの様な数値が出る)。恐れ入りますがどなたかご返答頂けると助かります。 -- ぼよよん 2007-02-06 (火) 11:20:12
  • ぼよよんさんへ。なぜあなたがAH=0x09 や 0x0aに変えて見たのかよく分からないのですが、「AH=0x09 や 0x0aに変えても何か文字が表示できる」と思ったのでしょうか?AHに入れる値によってBIOSの機能を選択するわけですが、OS-W:(AT)BIOSを見る限り、AH=0x09 や 0x0aに対応する機能が無いようです。したがって、AH=0x09 や 0x0aの状態でINT 0x10をやっても無意味です。だからBIOSも困っておかしな状態になったと考えられます。 -- uchan 2007-02-06 (火) 17:18:52
  • uchanさん、早速のご返答ありがとうございます。OS-W:(AT)BIOSの下の方に「もっと詳しいのはこっちかな。」というリンクがあり、そこには AH=0x09 や 0x0a でも文字表示が出来る様に書かれています。QEMUが対応していないというのも考えにくいし。いかがなものでしょうか? -- ぼよよん 2007-02-06 (火) 18:29:14
  • すみませんでした。「もっと詳しいのはこっちかな。」というリンクには気づいていませんでした。僕もそのページを見させてもらって、自分でahに0x0aを入れたモードでプログラムを作ってみましたが、うまく表示する様です。ここに僕が作ったソースをおいておきますので、試して見てください。 -- uchan 2007-02-06 (火) 19:10:41
  • uchanさんへ、プログラムまで作って頂いてありがとうございます(感激してちょっと涙出ました…)。早速差し替えて実行してみたのですが、やはりQEMU上では動かないですねえ。画面が100桁×36行ぐらいのサイズに拡大して、左上に「A00090A68 00000000」と表示されます。ちなみにこのイメージをFDに焼いてFDブートしてみますと、正常に動作しました。という訳で、どうやらQEMU(VGABIOS?)が対応していないみたいです。 -- ぼよよん 2007-02-07 (水) 12:36:45
  • 僕もQEMUで実行してみたんですよねぇ。もしかして、バージョンの問題かもしれません。最新版がこちらにあるので、試してみると良いかもしれませんね。 -- uchan 2007-02-07 (水) 21:49:42
  • uchanさんへ。解決しました。教えて頂いたリンクから qemu-0.9.0-windows.zip を落としてきて、順次差し替えると vgabios.bin が原因だったことが分かりました。本の CD に入っていたこのファイルは、サイズがとても小さく(9651バイト)、また川合さんの署名も入っていますことから、川合さんオリジナルの機能縮小版だったみたいです。今回は色々とお世話になりまして、大変ありがとうございました。またよろしくお願い致します。 -- ぼよよん 2007-02-08 (木) 10:36:24
  • はじめまして。質問なのですが、本書P.25の8行目に『「asm」でimgファイルを作って、そのあとに「run」とすれば、先ほどと同じ結果になります。』と書いてありますよね。ですが、「asm」を行う前(つまりhelloos1フォルダ内にhelloos.imgが無い状態)で「run」を行っても「hello, world」が表示されました。なぜなのでしょうか?他のフォルダにあるhelloos.imgを読み込んだんでしょうか? -- たかし 2007-02-22 (木) 11:32:11
  • お答えします。本文中で紹介したrun.batの内容ですと、helloos.imgが存在しなかった場合ディスクイメージのコピーに失敗します。しかしバッチファイルは原則としてエラーが起きても実行を継続するので、そのままQEMUがスタートします。tolsetでのQEMUは、直前に実行したディスクイメージを保持しているので、おそらくそれが実行されたのでしょう。したがって、helloos1フォルダの内容は反映されていないと思います。ためしに表示するメッセージを変更してみれば確認できるのではないでしょうか。 -- K 2007-02-22 (木) 18:22:21
  • 回答ありがとうございます。返事が遅れてしまいましたが、無事理解できました! -- たかし 2007-03-01 (木) 23:57:41
  • 初版第9刷のP.38内にある記述についての質問です。〜DXのメモリ番地の内容をALに代入したいなー、と思ったら MOV BX, DX MOV -- 名無しさん 2007-03-29 (木) 19:41:30
  • はじめまして。初版第9刷のP.38内にある記述についての質問です。〜DXのメモリ番地の内容をALに代入したいなー、と思ったら MOV BX, DX MOV AL, BYTE [BX] 〜とあるのですが、これはMOV BX, [DX] MOV AL, BYTE BX の誤記なのでしょうか。私の理解が足りないこともあり悩んでいます。 -- あげもの 2007-03-29 (木) 19:46:54
  • はじめまして。初版第9刷のP.38内にある記述についての質問です。〜DXのメモリ番地の内容をALに代入したいなー、と思ったら MOV BX, DX MOV AL, BYTE [BX] 〜とあるのですが、これはMOV BX, [DX] MOV AL, BYTE BX の誤記なのでしょうか。私の理解が足りないこともあり悩んでいます。 -- あげもの 2007-03-29 (木) 20:28:47
  • はじめまして。初版第9刷のP.38内にある記述についての質問です。〜DXのメモリ番地の内容をALに代入したいなー、と思ったら MOV BX, DX MOV AL, BYTE [BX] 〜とあるのですが、これはMOV BX, [DX] MOV AL, BYTE BX の誤記なのでしょうか。私の理解が足りないこともあり悩んでいます。 -- あげもの 2007-03-29 (木) 20:28:56
  • あげものです。ごめんなさい、ページ内にちゃんと書いてありますね・・失礼しました。解決です。 -- あげもの 2007-03-29 (木) 22:09:45
  • 初版P15バイナリーエディタの作者のURLが見当たりません。変更されたのでしょうか? --すみません見つかりました(後日)-- ひろぼう 2007-04-16 (月) 18:07:59
  • そういうことは、目次にありますとおり、是非updatesをご覧ください。・・・と思ったらupdatesにも書いてありませんでした・・・。どうなっているのでしょうか、調べてみます。 -- K 2007-04-16 (月) 19:38:17
  • 今試してみたところ、本文中のURLできちんと目的のページにいけました。 -- K 2007-04-16 (月) 19:45:03

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2007-06-23 (土) 23:45:18 (4231d)