スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

割り算りとシフト演算

仕事にかまけてブログの更新を行っておりませんでした。

本日は仕事にてチューニングしなければいけない状態になった際に、試しに割り算とシフト演算を逆アセンブルした結果を乗せたいと思います。

実行環境:Windows Vista
コンパイル:gcc(MinGW)

割り算
#include

void main() {
    int val = 512;

    val /= 2;

    printf( "%d\n", val );
}

main.o: file format pe-i386


Disassembly of section .text:

00000000 <_main>:
 0:  55              push   %ebp
 1:  89 e5            mov    %esp,%ebp
 3:  83 e4 f0          and    $0xfffffff0,%esp
 6:  83 ec 20          sub    $0x20,%esp
 9:  e8 00 00 00 00      call   e <_main+0xe>
 e:  c7 44 24 1c 00 02 00  movl   $0x200,0x1c(%esp)
 15:  00
 16:  8b 44 24 1c        mov    0x1c(%esp),%eax
 1a:  89 c2            mov    %eax,%edx
 1c:  c1 ea 1f          shr    $0x1f,%edx
 1f:  8d 04 02          lea    (%edx,%eax,1),%eax
 22:  d1 f8            sar    %eax
 24:  89 44 24 1c        mov    %eax,0x1c(%esp)
 28:  8b 44 24 1c        mov    0x1c(%esp),%eax
 2c:  89 44 24 04        mov    %eax,0x4(%esp)
 30:  c7 04 24 00 00 00 00  movl    $0x0,(%esp)
 37:  e8 00 00 00 00      call    3c <_main+0x3c>
 3c:  c9              leave
 3d:  c3              ret
 3e:  90              nop
 3f:  90              nop


シフト演算
#include

void main() {
    int val = 512;

    val >>= 1;

    printf( "%d\n", val );
}


main2.o: file format pe-i386

Disassembly of section .text:

00000000 <_main>:
 0:   55               push  %ebp
 1:   89 e5             mov   %esp,%ebp
 3:   83 e4 f0           and   $0xfffffff0,%esp
 6:   83 ec 20           sub   $0x20,%esp
 9:   e8 00 00 00 00       call  e <_main+0xe>
 e:   c7 44 24 1c 00 02 00   movl  $0x200,0x1c(%esp)
 15:   00
 16:   d1 7c 24 1c         sarl  0x1c(%esp)
 1a:   8b 44 24 1c         mov   0x1c(%esp),%eax
 1e:   89 44 24 04         mov   %eax,0x4(%esp)
 22:   c7 04 24 00 00 00 00   movl  $0x0,(%esp)
 29:   e8 00 00 00 00       call  2e <_main+0x2e>
 2e:   c9               leave
 2f:   c3               ret


アセンブラの実行命令数が減るようなので早くはなるようです。
しかし今回、逆アセンブルしたのがPC上であり、私が仕事でチューニングしなければいけないものは別環境となってしまうので、その場合にはまた違う結果が出るかと思います。

逆アセンブル方法のメモ
gcc -c main.c
objdump -d main.o >> main.txt


テーマ : プログラミング
ジャンル : コンピュータ

2011/07に買った書籍

アート・オブ・コミュニティ ―「貢献したい気持ち」を繋げて成果を導くにはアート・オブ・コミュニティ ―「貢献したい気持ち」を繋げて成果を導くには
(2011/05/26)
Jono Bacon

商品詳細を見る


2940円

Adaによるソフトウェア開発―ソフトウェア工学とAda導入のすすめかたAdaによるソフトウェア開発―ソフトウェア工学とAda導入のすすめかた
(1991/05)
イアン ゾンマヴィル、ロン モリソン 他

商品詳細を見る


6930円

Rails3レシピブック 190の技Rails3レシピブック 190の技
(2011/07/25)
高橋 征義、松田 明 他

商品詳細を見る


3129円

7つの言語 7つの世界7つの言語 7つの世界
(2011/07/23)
Bruce A. Tate

商品詳細を見る


3360円

Rubyの絵本Rubyの絵本
(2008/09/04)
アンク

商品詳細を見る


1764円

30日でできる! OS自作入門30日でできる! OS自作入門
(2006/03)
川合 秀実

商品詳細を見る


3990円

プログラミング言語を作るプログラミング言語を作る
(2009/06/20)
前橋 和弥

商品詳細を見る


3129円

合計25242円

テーマ : 日記・日誌
ジャンル : コンピュータ

Rubyを触ってみた

先週の土曜日から月曜日に行われたRubykaigiに参加してきたので、ついにRubyを触ってみようと環境構築を行いました(ぇ
Rubykaigiに参加しながらRubyにほとんど触れたことがない人間は私ぐらいしかいなかったんじゃないでしょうか

とりあえず、初心者本のRubyの絵本を買ってきてポチポチ実行しています。
私や私の友人は言語の学習を始める場合はだいたい絵本シリーズを買います。
学校で最初にCの絵本からやり始めた名残でしょう、絵も多いですし、ソースコードの量も多くないので一冊目に買って踏み台にするには軽いレベルで良いと思います。

ちなみにRubyの絵本の中に

puts "変数aに変数bを代入"

と書かれている部分がありますが、下記のようなエラーが出ます。

test.rb:17: invalid multibyte char (US-ASCII)

どうやら、文字コードが違う雰囲気が出ています、US-ASCIIだと日本語が表示できないのでエラーが出ているのでしょう。

軽く調べてみると、1.9の最新バージョンから問題が発生しているよう
問題の原因としては多言語化仕様になって、初期設定が英語であるUS-ASCIIに設定されているため、明示的に日本語であることを記述しないといけないようです。
なので、下記のマジックコードをスクリプトの先頭に記述すればエラーは回避できるとのことでした。

# -*- encoding: Shift_JIS -*-

動的片付けはあまり触れないので、この機会に勉強しようと思います。

テーマ : プログラミング
ジャンル : コンピュータ

【書評】Being Geek【感想】

本書はソフトウェア開発者のキャリアを成功させるためのHackのための本である。
と書かれているために、高度な技術者の体系について書かれた本だと思って買うと火傷を負います。私は負いました。

中に書かれていることは実際にマネージャーや他のスーツ族とどのように関わっていくかが大部分の内容となります。
ギーグであり続けるためのと書かれておりますが、この本を読んでもギーグであり続けられるのかは疑問を持ちます。
アメリカならば問題はないのかもしれませんが、日本だとこの本に書かれている内容が実践できないのは新卒レベルじゃないのかなっと思うので、もう少し技術分野について書かれている本だったら良かったと感じました。

著者自身がマネージャーなためにマネージャー寄りの視点になるのは致し方がないと思いますが、それならば帯のコメントを変更するべきではないかと思います。

本の内容としては面白かっただけにタイトルや帯で損をしている内容でした。



Being Geek ―ギークであり続けるためのキャリア戦略Being Geek ―ギークであり続けるためのキャリア戦略
(2011/06/25)
Michael Lopp

商品詳細を見る

テーマ : 日記・日誌
ジャンル : コンピュータ

2011/06に買った書籍

Being Geek ―ギークであり続けるためのキャリア戦略Being Geek ―ギークであり続けるためのキャリア戦略
(2011/06/25)
Michael Lopp

商品詳細を見る


2415円


ハッカーのたのしみ―本物のプログラマはいかにして問題を解くかハッカーのたのしみ―本物のプログラマはいかにして問題を解くか
(2004/09)
ジュニア,ヘンリー・S. ウォーレン

商品詳細を見る



3570円



合計:5985円

テーマ : 日記・日誌
ジャンル : コンピュータ

プロフィール

Author:ハヤブサ@プログラマ
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
twitter
hayabusa333のtwitterを表示
検索フォーム
RSSリンクの表示
リンク
Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
カウンタ