14 มกราคม 2559

แนะนำการใช้งานโปรแกรม QtSPIM เบื้องต้น

การติดตั้ง

เราจะใช้โปรแกรม SPIM ซึ่งเป็นตัวจำลองการทำงานของตัวประมวลผลแบบ MIPS (Microprocessor without Interlocked Pipeline Stages) สำหรับการเรียนรู้ภาษาแอสเซมบลีและการทำงานของตัวประมวลผล ปัจจุบันโปรแกรม SPIM รุ่นล่าสุดมีชื่อว่า "QtSPIM" ซึ่งเป็นโปรแกรม SPIM ที่ใช้การแสดงผลโดย Qt ซึ่งเป็น GUI framework ที่สามารถนำไปใช้ได้กับระบบปฏิบัติที่แตกต่างกัน


การติดตั้ง Qt framework โดยใช้คำสั่งต่อไปนี้:


unix>  sudo apt-get install qt4-dev-tools qt4-doc libqt4-help


ดาวน์โหลด pre-packaged version ของโปรแกรม SPIM สำหรับ Linux ที่ใช้ Qt GUI framework โดยใช้คำสั่งต่อไปนี้:  (ถ้าใช้ระบบปฏิบัติการ Linux รุ่นที่เก่า 32-bit ให้เปลี่ยนคำสั่งด้านล่างนี้จากเลข 64 เป็น 32)


unix>  wget http://sourceforge.net/projects/spimsimulator/files/qtspim_9.1.12_linux64.deb


ติดตั้งชุดโปรแกรม QtSPIM โดยใช้คำสั่งต่อไปนี้:


unix>  sudo dpkg -i qtspim_9.1.12_linux64.deb


การเรียกใช้งาน
เรียกโปรแกรม QtSPIM โดยใช้คำสั่งต่อไปนี้:
unix>  qtspim &


ภาพรวมของโปรแกรม

หลังจากเรียกโปรแกรม QtSPIM จะแสดงหน้าต่างหลักของโปรแกรมดังรูปด้านล่างนี้


0dafc7aa-9048-42de-9749-4bd71d72dd48.png


ซึ่งจะแสดงให้เห็นส่วนประกอบที่สำคัญ 3 ส่วนในหน้าต่างหลักนี้ ได้แก่ ส่วนแสดง Register, ส่วนแสดง Memory, และส่วนแสดง Messages


ส่วนแสดง Register

รูปด้านล่างนี้คือส่วนแสดง Register ซึ่งจะแสดงข้อมูล register ทั้งหมดในตัวประมวลผลแบบ MIPS ในส่วนนี้จะประกอบด้วย 2 แท็บ: แท็บแรกจะแสดงข้อมูล register สำหรับ floating point และอีกแท็บจะแสดงข้อมูล register สำหรับ integer โดยแท็บสำหรับ integer จะแสดงข้อมูล register สำหรับการใช้งานทั่วไป (R1-R31), และ register พิเศษต่างๆ เช่น Program Counter (PC) เป็นต้น


qtspim_register_window.png


ส่วนแสดง Memory

ส่วนแสดง Memory จะประกอบด้วย 2 แท็บคือ Data และ Text ซึ่งแท็บ Text จะแสดงข้อมูลของ program memory space โดยข้อมูลที่เรียงจากซ้ายไปขวามีดังนี้:
  1. ข้อมูล memory address ของ instruction ในรูปแบบตัวเลขฐาน 16 (อยู่ในเครื่องหมายวงเล็บเหลี่ยม)
  2. ข้อมูลที่ถูกเก็บอยู่ใน memory address ในรูปแบบตัวเลขฐาน 16 ซึ่งถ้าแปลงให้อยู่ในรูปแบบตัวเลขฐาน 2 คือ instruction ที่ทำงานจริงๆ ของตัวประมวลผล MIPS
  3. ข้อมูล instruction ของภาษาแอสเซมบลีที่คนสามารถอ่านได้ (human-readable) โดยใช้ hardware register number
  4. ภาษาแอสเซมบลีที่เราเขียนโดยใช้ symbolic register name และ memory address symbol (แสดงด้วยตัวเอียง)


05f7f999-9928-484c-a933-f6244d051116.png


แท็บ Data จะแสดงข้อมูลของ data memory space ซึ่งประกอบด้วย variable และข้อมูล array ที่เราสร้างขึ้นมาไปจนถึงข้อมูล stack


1744cfa7-b87c-4d82-9d8d-01b283660c5f.png


ส่วนแสดง Messages

ในส่วนนี้จะแสดงข้อความ (message) จากโปรแกรม QtSPIM ถึงผู้ใช้งาน


qtspim_message_window.png


โปรแกรมแรก

ตัวอย่างโปรแกรมสำหรับตัวประมวลผล MIPS สามารถดาวน์โหลดได้ที่นี่ เริ่มด้วยโปรแกรมแรก example1.asm โดยดาวน์โหลดและบันทึกเก็บไว้ในคอมพิวเตอร์


โหลดโปรแกรมแรกเข้าสู่ QtSPIM โดยเลือกเมนู File -> Reinitialize and Load File (สำหรับระบบปฏิบัติการ Ubuntu แบบใหม่ที่ใช้ "Unity" ข้อความเมนูจะไม่แสดงบนแถบเมนูที่อยู่บนสุดของหน้าจอ เราต้องเลื่อนเมาส์ไปอยู่บนสุดของหน้าจอก่อน ข้อความเมนูจึงจะปรากฏ) เป็นการล้างข้อมูลใน register space และรีเซ็ตการทำงานของ simulator (ไม่เช่นนั้น, เราอาจจะ load และ run หลายๆ โปรแกรมในแถวบน machine state เดียวกัน)


เราสามารถเลื่อนดูข้อมูลในแท็บ Text เราก็จะเห็นภาษาแอสเซมบลีถูกโหลดเข้าไปยัง Program memory space ในกรณีนี้, instruction แรกจะอยู่ที่ memory ตำแหน่ง 0x00400024 (ทำไมจึงไม่เริ่มที่ memory ตำแหน่ง 0x00000000 ถึงแม้ว่าโปรแกรมของเราเริ่มที่ function main(), แต่อันที่จริงแล้วมีบาง instruction ที่ทำงานก่อน main)


ตอนนี้โปรแกรมภาษาแอสเซมบลีถูกโหลดเรียบร้อยแล้ว, เราสามารถเลือกให้จำลองการทำงาน instruction ของภาษาแอสเซมบลีได้ 3 วิธีดังนี้:


  1. สั่งให้ run program จากต้นจนจบ (โดยใช้ปุ่ม "play" Run/Continue หรือ F5) กรณีนี้จะเหมาะสำหรับการดูผลลัพธ์สุดท้ายของโปรแกรม
  2. สั่งให้ run program ทีละบรรทัด (โดยใช้ปุ่ม "123" Single Step หรือ F10) กรณีนี้จะเหมาะสำหรับการดูผลลัพธ์ของแต่ละ instruction ว่ามีผลกับ machine state อย่างไร (ตัวอย่างเช่น memory และค่าของ register)
  3. สั่งให้ run program จนถึง breakpoint ที่เราต้องการ (ซึ่งสามารถกำหนดจุด breakpoint โดยการใช้เมาส์คลิ๊กขวาบรรทัดที่ต้องการในส่วนแสดงส่วนแสดง Memory
ทำตามขั้นตอนดังกล่าวจนจบโปรแกรม, ดูว่าเกิดอะไรขึ้นบ้าง, และเพื่อทำให้แน่ใจว่าเข้าใจการทำงานของโปรแกรม QtSPIM และสิ่งแวดล้อมต่างๆ ในโปรแกรม

ไม่มีความคิดเห็น:

แสดงความคิดเห็น