[ บทความ : ทดลอง Interface ภาษาแอสเซมบลี กับ Visual C++ 6 ] - หาค่าต่ำสุด

ห่างหายไปนานครับ กับตัวอย่างการเขียนโปรแกรมผ่าน PC หรือเน้นๆ เลยว่าเป็นพวก Intel 80x86/Pentium น่ะแหละครับ ... สัปดาห์นี้ เรามาลองเขียนโปรแกรมภาษาแอสเซมบลี เพื่อติดต่อกับ C++ ที่เขียนด้วย Visual C++ Version 6 .. ตัวอย่างโปรแกรมแรก จะเป็นการหาค่าต่ำสุดจากใน array ที่เราส่งจาก C++ ไปยัง ASM แล้ว ให้ภาษาแอสเซมบลี ส่งค่าต่ำสุดกลับมา ... ก่อนอื่น มาดูกันก่อนว่า จะเขียนโปรแกรมตามบทความนี้ได้ ควรจะมีเครื่องมืออะไรบ้าง ...

เครื่องมือที่จะต้องใช้

1. Microsoft Visual C++ version 6.0 (ผมใช้รุ่น Prefessional ซื้อมา 6000 บาท แน่ะ)
2. Microsoft Macro Assembler 6.x (ผมใช้ 6.15.x โหลดมาจาก www.microsoft.com อยู่ในชุด DDK .. ฟรีครับ รีบไปโหลดกันเถอะ)

มาดู code ส่วนของ ภาษา C++ กันก่อนครับ

จุดที่น่าสนใจก็คือ


	extern "C" long elem_min(long *array, long num_elm, long size_elm);

ซึ่งหมายความว่า เรากำลังบอกกับ Compiler ว่า เรามีฟังก์ชันชื่อว่า elem_min ที่ต้องการ argument จำนวน 3 ตัว คือ array ซึ่งเป็นตำแหน่งของข้อมูลแบบ อะเรย์ของ long, ต้องการ num_elm ซึ่ง ผมกำหนดว่า ค่านี้จะเป็นจำนวน สมาชิกในอะเรย์ (ค่าที่ส่งไปเป็นแบบ long) และ size_elm ศึ่งหมายความว่า เราต้องส่ง ขนาดของสมาชิกแต่ละตัวไปด้วย ... หลังจากนั้น มันก็จะคืนค่ากลับมาเป็นค่าแบบ long ... ส่วน extern "C" หมายความ จะทำการ link กันแบบ โครงสร้างของภาษา C (ขอไม่อธิบายล่ะกันครับ ค่อนข้างซับซ้อน ใครที่เรียน ภาษาแอสเซมบลีมาแล้วคงพอจะนึกภาพออกนะครับ)

เอาล่ะ มาดู code ที่เป็น assembly บ้าง

จะเห็นว่า ผมกำหนดใช้ code แบบ Pentium แบบ Protect mode ซะด้วย (.586P) ดังนั้น โปรแกรมนี้ จะทำงานแบบ 32 Bit บน Console Mode ครับ ... เอาล่ะ ... เรามาดูวิธีการ compile กันครับ ... ก่อนอื่น ให้เขียน make file ตามนี้เลยครับ

แล้วคราวนี้ก็มาลอง compile กันตามนี้ครับ

แล้วผลลัพธ์ก็ออกมาดังนี้ครับ

 
DOWNLOAD

source code : 2.19 KB

 


เขียนโดย : ศุภชัย บุศราทิจ
Author : Supachai Budsaratij
e-mail : raek@se-ed.net
วันที่ทำการปรับปรุง : ๒๗ ต.ค. ๒๕๔๕