「OS自作入門 四日目」の編集履歴(バックアップ)一覧はこちら
OS自作入門 四日目 - (2007/07/09 (月) 01:12:08) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
*OS自作入門四日目のまとめ
自分のためのまとめなので、他の人には意味不かも。
**アセンブラ
[INSTRSET "i486p"] ; 486の命令まで使いたいという記述
**C言語
:&(AND) | かつ。and演算。それぞれの桁について比較して、両方が1だったら1、どちらかが0なら0。
0100 AND 1101 -> 0100
: (OR) | または。or演算。それぞれの桁について比較して、どちらかが1だったら1。
0100 OR 1101 -> 1101
:^(XOR) | xor演算。どちらかが0かつもう一方が1のとき1。0かつ0は0。1かつ1は0。ビット反転。
0100 XOR 1101 -> 1001
**C言語からメモリへの書き込み
C言語の関数上で与えられた引数は
1番目[ESP+ 4]
2番目[ESP+ 8]
3番目[ESP+12]
4番目[ESP+16]
...
に書いてある。
**ポインタ
int i;
char *p;
p = (char *) i;
*p = i & 0x0f;
変数iを宣言。
ポインタ用の変数pを宣言。
ポインタ用の変数pにポインタ変数にキャストしたiを代入。
p番地にiを0x0fでandをとった値を代入。
番地は以下の様に指定することが可能。
*(p + i)
*(i + p)
p[i]
i[p]
これらは全て番地の足し算。
----
*OS自作入門四日目のまとめ
自分のためのまとめなので、他の人には意味不かも。
**アセンブラ
[INSTRSET "i486p"] ; 486の命令まで使いたいという記述
**C言語
:&(AND) | かつ。and演算。それぞれの桁について比較して、両方が1だったら1、どちらかが0なら0。
0100 AND 1101 -> 0100
: (OR) | または。or演算。それぞれの桁について比較して、どちらかが1だったら1。
0100 OR 1101 -> 1101
:^(XOR) | xor演算。どちらかが0かつもう一方が1のとき1。0かつ0は0。1かつ1は0。ビット反転。
0100 XOR 1101 -> 1001
**C言語からメモリへの書き込み
C言語の関数上で与えられた引数は
1番目[ESP+ 4]
2番目[ESP+ 8]
3番目[ESP+12]
4番目[ESP+16]
...
に書いてある。
**ポインタ
int i;
char *p;
p = (char *) i;
*p = i & 0x0f;
変数iを宣言。
ポインタ用の変数pを宣言。
ポインタ用の変数pにポインタ変数にキャストしたiを代入。
p番地にiを0x0fでandをとった値を代入。
番地は以下の様に指定することが可能。
*(p + i)
*(i + p)
p[i]
i[p]
これらは全て番地の足し算。
**色
8bitカラーモードでは0〜255の色番号の色の内16色を使うことができる。色番号は0x000000-0xffffffで、その設定にはまずパレットを設定する。パレットの設定には16進数2桁(=8bit)を3つ用いる。
このようにパレットを設定する。
void init_palette(void)
{
static unsigned char table_rgd[16*3] = {
0x00, 0x00, 0x00, /*0;:黒*/
...
}
これを16個指定する。
**その他
static宣言
----