Sunday, August 8, 2021

ARM Assembly language ตอนที่ 3

 การเปรียบเทียบค่า CMP แบบที่ 3

1.) สร้าง Flow Chart 


2.) เขียนโปรแกรมด้วย VIM
    บันทึกไฟล์ชื่อ cmp3.s



3.) สร้างไฟล์

        $ as -g -o cmp3.o  cmp3.s
        $ ld -g -o cmp3  cmp3.o


4.) Debug ด้วย ddd

       $ ddd cmp3



5.) ตรวจสอบผล



ARM Assembly language ตอนที่ 2

 การเปรียบเทียบค่า CMP แบบที่ 2

1.) สร้าง Flow Chart 




2.) เขียนโปรแกรมด้วย VIM
    บันทึกไฟล์ชื่อ cmp2.s




3.) สร้างไฟล์

        $ as -g -o cmp2.o  cmp2.s
        $ ld -g -o cmp2  cmp2.o




4.) Debug ด้วย ddd

       $ ddd cmp2




5.) ตรวจสอบผล



เริ่มเขียน ARM Assembly language มือใหม่สุดๆ ตอนที่ 1

 การเปรียบเทียบค่า CMP

1.) สร้าง Flow Chart 


2.) เขียนโปรแกรมด้วย VIM
    บันทึกไฟล์ชื่อ 01.s


3.) สร้างไฟล์

        $ as -g -o 01.o  01.s
        $ ld -g -o 01 01.o
        $ ddd 01

Debug ด้วยโปรแกรม DDD เพื่อตรวจสอบ



 

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