投稿

5月, 2016の投稿を表示しています

OS自作入門 on Ubuntu 16.04 (2日目)

2日目の内容は, 1日目 で作成したアセンブラコード(helloos2.s)のプログラム本体をちゃんとアセンブラで実装するようです.プログラム本体は DB 命令でよくわからない16進数のデータを打ち込んでいますが,これは言わば機械語のプログラムです.この機械語のプログラムをちゃんとアセンブラコードとして書いていきましょう. ツールのインストール 1日目に使ったツール以外にインストールするものはありません. helloos5.s への書き換え 16ビットバイナリの生成 2日目のアセンブラの説明を読むと分かるのですが,ここで出てくるアセンブラコードは 16 ビットの命令を前提としています.AX レジスタが 16 ビットというところから分かると思います.ただ,Ubuntu 16.04 で x86_64 版は 64 ビット OS ですので,16 ビット命令として機械語を生成する必要があります.ですので,アセンブラコードの先頭に .code16 という行を追加する必要があります. レジスタの書き方 NASK(NASM)では AX レジスタは単に AX と記述すればよかったのですが,GAS では % をつける必要があります.AX レジスタであれば,%axという具合です. 数値の書き方 NASK(NASM)では単に 0 と書けばよかったのですが,GAS では $ をつけて $0 とします.16進数の場合も同じで,0x0e を GAS では $0x0e と書きます. ORG 命令 コードの最初に出てくる ORG 命令ですが,これに対応する GAS の命令ないようです.無いってどういうこと?と疑問が膨らみますが,どうやら NASK(NASM)と GAS は構文が異なるだけでなく,細かい違いもあるようです. NASK の ORG 命令はプログラムの本体がどこにあるかを指定しますが,GAS ではプログラム中に書くのではなく,アセンブラにオプションとして与える方針です.とりあえずスキップして先に進みましょう.後でこれに対応する方法を書きます. JMP 命令 ORG 命令の下には JMP 命令があります.これは GAS でも同じように jmp entry と書けばOKです.ところで, helloos2.s では JMP

Ubuntu 16.04 LTS に広告ブロックを実装した Opera 37 をインストール

2016年5月4日にリリースされた Opera 37 を Ubuntu 16.04 LTS にインストールします. Opera 37 は広告ブロック機能が内蔵されていて,表示が高速らしいのでインストールしてみることにしました. apt でインストールされるのは Opera 36 なので,Opera 37 を 公式ホームページ からダウンロードします. 現時点では opera-stable_37.0.2178.32_amd64.deb がダウンロードできます. インストールは簡単で,ダウンロードしたファイルのあるディレクトリで, $ sudo dpkg -i opera-stable_37.0.2178.32_amd64.deb とするだけです. ランチャーの一番上にある「コンピューターを検索」で Opera を検索するとアイコンが出てきますので,ランチャーに登録しておくと便利かもしれません. Opera を起動すると,初期設定が始まります. ここで広告ブロックを有効化(デフォルトでは無効化されているようです)すればOKです. 使ってみた感想は... 「は,はやいっ!」 です. これまでデフォルトでインストールされていた Firefox を使っていましたが,それと比べて速度向上が体感できました. 試してみる価値はあると思います. 今のところ, ブログ更新には問題がない Gmail にも問題がない ので,しばらく Opera を使ってみようと思います. Firefox の出番は随分減っちゃうと思います. ただ,Opera に未対応のウェブページを閲覧するために Firefox は残してあります. ディスクの肥やしになってくれれば...

OS自作入門 on Ubuntu 16.04 (1日目)

「30日でできる!OS自作入門」(川合秀実著)で OS の勉強を始めたのですが,Ubuntu 16.04 LTS 環境で試したいと思います. 1日目は バイナリエディタで直接 OS イメージを作成する 18万行のアセンブラコードを書いて OS イメージを作成する 22行のアセンブラコードを書いて OS イメージを作成する 50行の「かなりそれっぽいソースプログラム」(アセンブラ)を書いて OS イメージを作成する の4つがありますが,4.だけ試します. ツールのインストール GNU assembler と QEMU をインストールします. $ sudo apt install binutils qemu インストールされた GNU assembler のバージョンは 2.26,QEMU のバージョンは 2.5.0 です. NASKとGASとの違い 構文が違うようです. NASK は NASM をベースとしたアセンブラで,「インテル構文」と呼ばれる書き方です. 一方,GAS は「AT&T構文」と呼ばれる書き方です. 書き方は異なりますが,大きく違うわけでは無いようで,意味的にはさほど変わりません. helloos2.s の書き換え DB命令の意味は,「ファイルの内容を1バイトだけ直接書く」ですが,GAS のAT&T構文では,DBの代わりに .byte と書きます. つまり, DB 1 となっているところを GAS では .byte 1 とします. 見た目は若干違いますが,意味は同じです. ところが,DB命令の次が文字列の場合は .byte ではなく,.ascii を使います. つまり, DB "HELLOIPL" は .ascii "HELLOIPL" と書きます.ややこしいですね. DW命令とDD命令は .word と .long に置き換えるだけです. RESB命令は少しややこしいです. .org を使えばいいのですが,単純な置き換えではありません. RESB 18 は .org .+18 と書きます. RESB命令を .org に書き換えて,次の数字の前に .+ を加えています.