アセンブラで”Hello! World”(動かしてみた編)

2018 年 1 月 16 日 by kera

こんにちは。今回はアセンブラを動かしてみた記事を書きます。

アセンブラ言語はCPUの1つの動きに対して、1つの命令を記述するので、
コンピュータの動きを理解するのににはよい言語である、と
言われることがあります。

CPUやメモリの世界を少しずつでも理解できればと思い、
今回、アセンブラを動かすことに挑戦してみました。


私を指導してくださる先輩は、
プログラムがどう動かされていくのか、メモリがどう使われるのか、など
コンピュータの中で何が起きているかをよく教えてくださいます。
先輩に教えていただくと、楽しくおもしろい世界のように思うのですが、
いざ、自分で勉強するとなると、
文系の私には敷居が高いように感じてしまいます。

アセンブラを勉強したら、先輩のようにメモリやCPUのことを考えながら
プログラムできるようになるかな、と思い、思い立ったが吉日、
アセンブラをに手を出してみました。

今回は、まずは動かしてみよう、ということで
ソースコードには触れず、実行してみた過程をここに残しておこうと思います。

環境と使用したツールです。
——————————————————————————–
Windows 10
VisualStudio2017付属のDeveloper Command Prompt for VS 2017
——————————————————————————–

0.nasm.exeをインストールします
http://www.nasm.us/
上記のURLからWindows用のZipをダウンロードして展開しておきます。

1.hello! worldを表示させるコードを記述し、
hello_world.asmとして保存。
場所は先程ダウンロードした、NASM.exeと同じ場所です。
(プログラムについては、またの機会に掲載しようと思います。)

2.リンカのlink.exeをnasm.exeと同じ場所に移動します。
link.exeの場所はコマンドプロンプト上で”where link”で検索できます。

3.nasm.exeのあるディレクトリまで移動します。
$cd C:\Users\userName\AppData\Local\bin\NASM

4.参考にしたソースが32ビット用だったので、以下のコマンドでオブジェクトファイルに変換します。
$nasm -fwin32 hello_world.asm
これで同じディレクトリにhello_world.objができます。

5.リンカを使ってhello_world.objを実行形式に変換します。
$link hello_world.obj /ENTRY:main /SUBSYSTEM:CONSOLE /defaultlib:kernel32.lib

実行結果は以下のようになりました。
Microsoft (R) Incremental Linker Version 14.11.25547.0
Copyright (C) Microsoft Corporation. All rights reserved.

ディレクトリ内にhello_world.exeができていることを確認します。

6.EXEを実行します。
$hello_world.exe

7.Hello, World
無事に世界にあいさつをすることができました!

今回はソースコードの中身まで深く学習することができなかったのですが
また機会があれば、どんな構文で書いているのかも勉強して
記事に残したいなと思っています。

TrackBack