Monday, July 13, 2015

กระบวนการ Compile ของโปรแกรม GCC

ตัวอย่าง Source Code โปรแกรมภาษา C บันทึกเป็นชื่อไฟล์ HiBKK.c
Source File <HiBKK.c>
หลังจากที่เขียนโปรแกรมและบันทึกไฟล์เรียบร้อยแล้ว กระบวนการในการ Compile ของโปรแกรม GCC จาก Source File เป็น Executable File ประกอบด้วยกระบวนการหลัก ๆ ดังนี้
  • Preprocessing
  • Syntax Check & Compilation
  • Assembly
  • Linking

1. ขั้น Preprocessing
โปรแกรม GCC จะทำการรวม header file และ Defined Macros ต่างๆ ที่ถูกระบุเข้ากับ Source Code เดิม

ในตัวอย่างระบุ #include<stdio.h> ดังนั้น stdio.h ซึ่งเป็น header file จะถูกรวมเข้ากับ Source Code เดิม กลายเป็นไฟล์ใหม่ที่เรียกว่า Preprocessed Source File ซึ่งมีนามสกุล ( .i )

คำสั่งในการสร้างไฟล์ Preprocessed Source File คือ gcc -E [file_name.c] -o [file_name.i] ในตัวอย่างใช้คำสั่ง gcc -E HiBKK.c -o HiBKK.i และภาพด้านล่างคือลักษณะของ Preprocessed Source File ที่ได้

Preprocessed Source File <HiBKK.i>
2. ขั้น Syntax Check & Compilation
โปรแกรม GCC จะทำการตรวจสอบความถูกต้องของโครงสร้างภาษา ว่าถูกต้องหรือไม่ ถ้าถูกต้องโปรแกรมจะทำการเปลี่ยน Preprocessed Source File ไปเป็นภาษา Assembly โดยไฟล์ใหม่นี้จะมีนามสกุล ( .s ) ซึ่งเป็นภาษาสุดท้ายที่มนุษย์ยังสามารถเข้าใจได้ (The Last Human Exit)

การเปลี่ยนไฟล์จาก Preprocessed Source File ไปเป็นภาษา Assembly จะใช้คำสั่ง gcc  -Wall  -S [file.i]  -o  [file.s] ในตัวอย่างใช้คำสั่ง gcc  -Wall  -S HiBKK.i  -o  HiBKK.s ภาพด้านล่างเป็นตัวอย่างของไฟล์ Assembly

Assembly File <HiBKK.s>
3. ขั้น Assembly
โปรแกรมฯ จะเปลี่ยนไฟล์ Assembly ให้กลายเป็น Machine Code ซึ่งมนุษย์ไม่สามารถอ่านออกได้ ไฟล์ใหม่นี้เรียกว่า Object File มีนามสกุล ( .o ) ถึงแม้ว่า Object File จะเป็น Machine Code แต่ก็ยังไม่สามารถทำงานได้เนื่องจากยังขาด Object Files จากระบบอีกหลายไฟล์

สำหรับคำสั่งในการเปลี่ยน Assemble Code ไปเป็น Machine Code คือ as [file.s]  -o  [file.o] ในตัวอย่างนี้ใช้คำสั่ง as HiBKK.s  -o  HiBKK.o

4. ขั้น Linking
โปรแกรมฯ จะรวม Object File ที่ได้จากขั้นตอนที่แล้ว เข้ากับ Object Files ต่างๆ ในระบบที่จำเป็นเพื่อสร้าง Executable File ที่สามารถนำไปใช้งานได้ บนระบบปฏิบัติการนั้นๆ

สำหรับคำสั่งในการรวม Object File ที่ได้เข้ากับ Object Files หรือไฟล์ระบบอื่นๆ ที่จำเป็น คือ gcc [file.o]  -o  [file] ในตัวอย่างนี้ใช้คำสั่ง gcc HiBKK.o -o HiBKK

ในการรันโปรแกรม Executable File ใช้คำสั้ง ./file ในตัวอย่างใช้ ./HiBKK

Sunday, July 12, 2015

เขียนโปรแกรม Assembly บนระบบปฏิบัติการ Linux (Assembler and Linker)

บทความด้านล่างเป็นการอธิบายการเขียนโปรแกรม Assembly และวิธีการทำ Assembler and Linker ด้วยโปรแกรม NASM
 
1. ตรวจสอบว่ามีโปรแกรม The Netwide Assembler (NASM) ติดตั้งบนระบบปฏิบัติการ Linux หรือยัง โดยการพิมพ์คำสั่ง whereis nasm บน Terminal

whereis nasm

2. ถ้าโปรแกรม NASM ติดตั้งบนระบบปฏิบัติการเรียบร้อยแล้ว จะพบข้อความ nasm: /usr/bin/nasm ... ปรากฎขึ้นมาให้เห็น กรณีโปรแกรมยังไม่ได้ติดตั้ง ต้องดำเนินการติดตั้งโปรแกรมก่อน

3. เมื่อโปรแกรม NASM ติดตั้งบนระบบปฏิบัติการ Linux เรียบร้อยแล้ว ก็เปิดโปรแกรม Text Editor ตัวที่ท่านชอบ จากนั้นลองมาเขียนโปรแกรม Assembly ได้เลย ผมเขียนด้วย gedit

โปรแกรม Assembly นี้ จะพิมพ์คำว่า Hello, Bangkok !!! บนจอผ่านทาง Terminal

4.เมื่อเขียนโปรแกรม Assembly เรียบร้อยแล้วให้บันทึก (Save) โดยใช้นามสกุล .asm ผมบันทึกเป็นชื่อ sayhi.asm

5.เปิด Terminal แล้วเข้าไปยังไดเร็กทอรี่ ที่เราบันทึกโปรแกรม


6.ทำการ Assembler โดยการพิมพ์คำสั่ง nasm -f elf sayhi.asm จากนั้นกดปุ่ม Enter ถ้าทุกอย่างผ่านไปด้วยดีเราจะได้ Object file ที่มีนามสกุล .o

nasm -f elf [source_file.asm]

7. ทำการ Linker โดยการพิมพ์คำสั่ง ld -s -o sayhi  sayhi.o จากนั้นกดปุ่ม Enter จะได้ Executable file

ld -s -o [executable file] [object_file.o]

8. ถ้าไม่มีข้อความอะไรแจ้งเตือนออกมา แสดงว่าเราจะได้ Executable file ที่พร้อมจะทำงาน พิมพ์คำสั่ง ./sayhi แล้วกดปุ่ม Enter ได้เลย

./executable_file

9. โปรแกรมจะทำงาน โดยจะพิมพ์ Hello, Bangkok !!! บนจอผ่านทาง Terminal


Sunday, May 31, 2015

การสร้าง Executable file จาก Source file ของโปรแกรม C Compiler

การทำงานของโปรแกรม C Compiler

การสร้าง Executable file จาก Source file ของโปรแกรม C Compiler ประกอบด้วย 
  1. โปรแกรม C Compiler จะดึง Source file และ Header files ต่างๆ ที่ถูกระบุใน #include Directive เข้ามารวมกันเพื่อสร้าง Object file เรียกขั้นตอนนี้ว่าการ Compile
    • INPUT: Source file และ Header files
    • OUTPUT: Object file
  2. จากนั้นโปรแกรม C Compiler จะนำ Object file มารวมกับ C Library files และ Object files ที่เกี่ยวข้อง เพื่อสร้าง Executable file เรียกขั้นตอนนี้ว่าการ Linking
    • INPUT: Object file, Library files, และ Object files
    • OUTPUT: Executable file


Friday, May 15, 2015

การติดตั้ง C Compiler (GCC) บนระบบปฏิบัติการ Windows


1. ไปที่ http://www.mingw.org
  • คลิกปุ่ม Download Installer 
  • บราวเซอร์จะเริ่มดาวน์โหลดไฟล์ mingw-get-setup.exe


2. เมื่อไฟล์ถูกดาวน์โหลดเสร็จ
  • ดับเบิ้ลคลิกที่ไฟล์ mingw-get-setup.exe
  • โปรแกรม MinGW Installation Manager Setup Tool จะปรากฏขึ้น
  • คลิกปุ่ม Install



3. โปรแกรมจะถามตำแหน่งที่จะติดตั้งโปรแกรม MinGW (GCC) และค่าอื่น ๆ
  • ให้คลิกปุ่ม Continue ได้เลย


4. โปรแกรม MinGW Installation Manager จะถูกดาวน์โหลดและติดตั้งอัตโนมัติ


5.เมื่อโปรแกรม MinGW Installation Manager ติดตั้งแล้วเสร็จ
  • ให้คลิกปุ่ม Continue

6.โปรแกรม MinGW Installation Manager จะปรากฏขึ้น


7. คลิกเลือก Packages ที่ต้องการติดตั้ง (Mark for Installation)


8. เมื่อเลือก Packages เรียบร้อย
  • คลิกปุ่ม Installation 
  • คลิกปุ่ม Apply Changes


9.Schedule of Pending Actions จะปรากฏขึ้น
  • คลิกปุ่ม Apply



10. โปรแกรม MinGW Installation Manager จะเริ่มดาวน์โหลด Packages ต่างๆ ตามที่เราได้เลือก



11.เมื่อโปรแกรม MinGW ติดตั้งเรียบร้อย ให้เปิดโปรแกรม Command Prompt Window


12. พิมพ์ set PATH=C:\mingw\bin;%PATH% แล้วกดปุ่ม Enter หรือ พิมพ์ set PATH=[ตำแหน่งที่ติดตั้งโปรแกรม]\mingw\bin;%PATH% แล้วกดปุ่ม Enter


13. พิมพ์ gcc -v แล้วกดปุ่ม Enter


14. จะเห็นภาพด้านล่าง แสดงว่าโปรแกรม C Compiler พร้อมใช้งานแล้ว