Sunday, November 15, 2009

การโปรแกรม Disassembler เบื้องต้น

โปรแกรม Disassembler คือ ?
ตอบ โปรแกรมที่ใช้ในการแปลงโปรแกรมในภาษาเครื่องกลับมาเป็นโปรแกรมในภาษา Assembly

Concept กว้างๆ ในการเขียนโปรแกรม Disassembler (ในความรู้อันน้อยนิด)
1. รับข้อมูลทั้งหมด มาเก็บไว้ใน stack
2. pop ข้อมูล ออกมาทีละตัว เพื่อจะนำข้อมูลที่ pop ออกมา มาทำการแปลงข้อมูล
3. ทำการ check ข้อมูลที่ pop ออกมา ว่าเป็นข้อมูล ที่ถูกต้องหรือไม่
4. ถ้าข้อมูลถูกต้อง ก็ทำตามขั้นตอนต่อไป ถ้าไม่ก็ แสดงข้อความเตือน
5. แปลงข้อมูล ตาม ตารางชุดคำสั่ง

การจัดการกับ Stack ใน Java ไม่ค่อยยุ่งยากมากนัก เพราะ Java ได้เตรียม API เอาไว้ให้แล้ว
API ย่อมาจากคำว่า Application Programming Interface คือ เป็น library ที่สามารถเรียกใช้งานได้เลย

empty() - ดูว่า Stack ได้เก็บค่าอะไรไว้หรือไม่
peek() - ใช้ดูว่าค่าที่อยู่บนยอดบนสุดของ Stack คืออะไร
pop() - ดึงค่าที่อยู่บนยอดสุดของ Stack ออกมา
push() - นำค่าเข้าไปใส่ไว้ใน Stack

ซึ่งคำสั่งที่เรานำมาใช้ในการเขียน Disassembler ก็ใช้เพียง push() , pop() และ empty() เท่านั้น การใช้งานก็ไม่ได้ยุ่งยากอะไร

การเรียกใช้ stack มีอยู่ 2 ส่วน ที่สำคัญ คือ
1. import java.util.*;
2. Stack (Variable) = new Stack();

push() : ในการใช้งาน push() อาจดู งง อยู่บ้าง ตรงที่มัน เป็น Object ดังนั้น จะไม่สามารถใส่ข้อมูลลงไปได้โดยตรง ต้องทำการแปลงข้อมูลให้เป็น Object ก่อน

Stack A = new Stack(); --> สร้าง Stack
Object obj = new Integer(500); --> สร้าง object ที่เป็น Integer
A.push(obj); --> ใส่ข้อมูล ลงไปใน Stack

pop() : ในการใช้งาน pop() ไม่ได้ยุ่งยากอะไร
A.pop(); --> เอาข้อมูลที่อยู่ด้านบนของ Stack ออกมา

การ check ข้อมูลที่เก็บมาเป็นข้อมูลที่เราต้องการ หรือ ไม่นั้น เราจำเป็นต้องใช้การตรวจจับข้อผิดพลาด (Exception) ซึ่ง การ Exception นั้นมีประโยชน์ คือ จะไม่ทำให้โปรแกรมหยุดการทำงานเมื่อเกิดสิ่งผิดปกติขึ้น เพราะ สามารถตรวจสอบข้อผิดพลาดได้จึงสามารถสั่งให้โปรแกรมทำงานต่อไปได้ทัน

ในการใช้งาน Exception นั้น ใช้ในรูปแบบ ดังนี้

try
{
คำสั่งที่คาดว่าจะเกิดข้อผิดพลาด
}
catch( Exception ที่จะให้ตรวจสอบ <ตัวแปรมารับ> )
{
คำสั่ง
}

Exception ที่ น่าจะเกิดขึ้นระหว่างการเขียนโปรแกรม Disassembler

EmptyStackException (java.util)
อ้างถึง element ที่ไม่มีใน Stack

Exception (java.lang)
Root ของ exception hierarchy

FileNotFoundException (java.io)
ไม่พบชื่อ File ที่ระบุ

IOException (java.io)
I/O Operation ไม่สามารถทำงานได้เสร็จสมบูรณ์

NumberFormatException(java.lang)
ข้อมูลที่ไม่เป็นตัวเลข

ตัวอย่าง
try
{
คำสั่งที่คาดว่าจะเกิดข้อผิดพลาด
}
catch( NumberFormatException e )
{
System.out.println( "Error : " + e );
}

No comments:

Post a Comment