忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/03/28 (Thu) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2008/08/25 (Mon) / 編集
[OS-Wiki]メモリマップ
どうやらメモリにもIPアドレスのように利用区分があるそうで、上記ページから一部抜粋すると

  • 0x00000000 - 0x0009ffff : RAM
    • 0x00000000 - 0x000003ff : リアルモード用INTベクタ
    • 0x00000300 - 0x000003ffはBIOS用スタック?
    • 0x00000400 - 0x000004ff : BIOS用ワークエリア?
    • 0x00007c00 - 0x00007dff : ブートセクタが読み込まれるアドレス
    • 0x0009fc00 - 0x0009ffff : ACPI用ワークエリア(の場合がある)
  • 0x000a0000 - 0x000bffff : ビデオアクセス用アドレス空間
  • 000c0000 - 0x000c7fff : ビデオBIOS?
  • 0x000c8000 - 0x000dffff : 各種カードのROMがあったりなかったり?
  • 0x000d0000 - 0x000dffffはたいてい空いている
  • 0x000e0000 - 0x000effff : 拡張BIOS(ここが空いている場合もある?)
  • 0x000f0000 - 0x000fffff : BIOS
  • 0x00100000 - 0x00efffff : RAM (これに満たない可能性もある)
  • 0x00f00000 - 0x00ffffff : RAMもしくはISAホール(どちらになるかはBIOSの設定などによる)
  • 0x01000000 - メモリが尽きるまで : RAM
  • メモリが尽きたところ - 0xffffffef : PCIデバイスなどのメモリマップトI/Oに利用可能な領域
  • 0xfffffff0 - 0xffffffff : 386以降ではここにリセットジャンプ命令がある
つまり、ブートセクタをつかったプログラムを書くには開始番地を(「ORG 0x7c00 」とかで)0x00007c00にするといいらしい、マジか!



ちなみに、[OS-Wiki]OSを作るときによく使うBIOSファンクション (AT互換機)

一文字表示
AH = 0x0e;
AL = キャラクターコード;
BH = 0;
BL = カラーコード;
戻り値:なし
註:ビープ、バックスペース、CR、LFは制御コードとして認識される
このページだけ見てもなんのことだかさっぱりなのでサンプルコードから抜粋
(前略)
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1; SIに1を足す
CMP AL,0
JE fin
MOV AH,0x0e; 一文字表示ファンクション
MOV BX,15; カラーコード
INT 0x10 ; ビデオBIOS呼び出し
JMP putloop msg:
DB 0x0a, 0x0a ; 改行を2つ
DB "hello, world"
DB 0x0a ; 改行
DB 0
(後略)
なかんじらしい、C言語的には
#include //INT 0x10 (ビデオBIOS呼び出し)の代わり
main(){
char *SI;//レジスタ
char AL;//レジスタ

char msg[] = "\n\nhello,world\n";
SI = msg;

while(1){
SI++;
AL=*SI;
if(AL == '\0') break;
printf("%c",*SI);//AH(一文字表示)のかわり
}
}
って感じなのかな?よくわからないけど、、、
むりやり似せたから大分冗長コードw ちなみにカラーは俺には無理だった(笑)

さてと、窓でqemuが動かないどうしよう、、、たすけて美鎖さん(笑)

拍手[0回]

PR
忍者ブログ [PR]