1 / 76

วิชาการโปรแกรมภาษาแอสเซมบลี้ รหัส 3105-2015 3 คาบ / สัปดาห์ 2 หน่วยกิต

วิชาการโปรแกรมภาษาแอสเซมบลี้ รหัส 3105-2015 3 คาบ / สัปดาห์ 2 หน่วยกิต. ความรู้ทั่วไปเกี่ยวกับโปรแกรมแอสเซมบลี้. ลักษณะของภาษา ทำไมต้องเขียนด้วย Assembly ฟังก์ชันในภาษาระดับสูงไม่ตรงกับความต้องการ หรือ มีแต่ขาดประสิทธิภาพ

amato
Download Presentation

วิชาการโปรแกรมภาษาแอสเซมบลี้ รหัส 3105-2015 3 คาบ / สัปดาห์ 2 หน่วยกิต

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. วิชาการโปรแกรมภาษาแอสเซมบลี้วิชาการโปรแกรมภาษาแอสเซมบลี้ รหัส 3105-2015 3 คาบ / สัปดาห์ 2 หน่วยกิต

  2. ความรู้ทั่วไปเกี่ยวกับโปรแกรมแอสเซมบลี้ความรู้ทั่วไปเกี่ยวกับโปรแกรมแอสเซมบลี้ • ลักษณะของภาษา • ทำไมต้องเขียนด้วย Assembly • ฟังก์ชันในภาษาระดับสูงไม่ตรงกับความต้องการ หรือ มีแต่ขาดประสิทธิภาพ • ส่วนของโปรแกรมที่ที่ถูกเรียกใช้บ่อย มักถูกเขียนด้วย Assembly • การจัดการกับเหตุการณ์บางอย่างที่เกิดขึ้นบ่อย ๆ

  3. ลักษณะงานที่เขียนโดยโปรแกรม Assembly • เกี่ยวข้องกับ Hardware โดยตรง • Memory • Register

  4. ข้อดีของโปรแกรมแอสเซมบลี้ข้อดีของโปรแกรมแอสเซมบลี้ • ความเร็วการทำงานสูงสุด • ขนาดของโปรแกรมเมื่อ Assembler แล้วเล็กมากๆ • ประสิทธิภาพในการควบคุมการทำงานของโปรแกรม

  5. ข้อเสียของโปรแกรมแอสเซมบลี้ข้อเสียของโปรแกรมแอสเซมบลี้ • ความยุ่งยากในการเขียนโปรแกรม • เครื่องมือในการทำงานมีมาก

  6. สิ่งที่เราต้องทราบก่อนที่จะเขียน Assembly • ความรู้เกี่ยวกับระบบคอมพิวเตอร์ที่เราจะเขียน • สถาปัตยกรรมของ CPU ที่ใช้ในระบบ • Software ที่ใช้ในการพัฒนาโปรแกรม • Editor • Assember • linker • Debugger

  7. ลักษณะโครงสร้างของหน่วยความจำลักษณะโครงสร้างของหน่วยความจำ 8 บิต 0001 0002 0003

  8. ลักษณะโครงสร้างของหน่วยความจำ MP 16 บิต 8 บิต • หน่วยความจำจะถูกแบ่งเป็น Block ละเท่าๆ กัน • กำหนดชนิดของข้อมูลที่จะเก็บ • Code • Data 0000:0000 1 Segment XXXX:YYYY 1 Segment 1 Segment

  9. สถาปัตยกรรมของ CPU 16 บิต 80486 80386 80286 ชุดคำสั่ง 8088

  10. สถาปัตยกรรมของ CPU 16 บิต • รีจิสเตอร์ (Register) • รีจิสเตอร์ทั่วไป (General purpose register) ชื่อรีจิสเตอร์ ขนาด การแบ่งครึ่ง 8 bit AX 16 Ah Al BX 16 Bh Bl CX 16 Ch Cl DX 16 Dh Dl SI 16 - - DI 16 - - BP 16 - - SP 16 - -

  11. รีจิสเตอร์ทั่วไป • AX (Accumulator) เก็บข้อมูลทั่วไป ทำคำสั่งคูณ หาร I/O • BX (Base Register) ชี้ Offset address ข้อมูลใน Data Segment • CX (Counter Register) ตัวนับรอบในคำสั่งที่ทำงานเป็น Loop • DX (Data Register) เก็บข้อมูลทั่วไป ทำคำสั่งคูณ หาร I/O ในบางกรณี ใช้ร่วมกับ AX เพื่อเก็บผลลัพธ์

  12. รีจิสเตอร์ทั่วไป • SI (Source Index) ชี้ Offset address ข้อมูลใน Data Segment ที่เกี่ยวข้องกับคำสั่ง String • DI (Destination Index) เหมือน SI แต่ DI ใช้ชี้ตำแหน่งปลายทาง • SP (Stack pointer) ชี้ Offset address บนสุด ของข้อมูลใน Stack • BP (Base pointer) ชี้ Offset address ล่างสุด ของข้อมูลใน Stack

  13. สถาปัตยกรรมของ CPU 16 บิต • รีจิสเตอร์ (Register) • เซกเมนต์รีจิสเตอร์ (Segment register) ชื่อรีจิสเตอร์ ขนาด การแบ่งครึ่ง 8 bit CS 16 - - DS 16 - - SS 16 - - ES 16 - -

  14. เซกเมนต์รีจิสเตอร์ • CS (Code segment) ชี้ Segment address ที่เก็บกลุ่มคำสั่ง ที่ซีพียูจะทำการ Execute) • DS (Data segment) ชี้ Segment address ที่เก็บกลุ่มข้อมูล ที่จะถูกประมวลผลด้วยชุดคำสั่ง • SS (Stack segment) ชี้ Segment address ที่เก็บข้อมูล Stack • ES (Extra segment) ชี้ Segment address ที่เก็บกลุ่มข้อมูล ที่จะถูกประมวลผลด้วยชุดคำสั่ง เพื่อช่วย DS ในคำสั่งที่เกี่ยวข้องกับ String

  15. สถาปัตยกรรมของ CPU 16 บิต • รีจิสเตอร์ (Register) • รีจิสเตอร์พิเศษ (Special purpose register) ชื่อรีจิสเตอร์ ขนาด การแบ่งครึ่ง 8 bit IP 16 - - Flag 16 - -

  16. รีจิสเตอร์พิเศษ • IP (Instruction pointer) ชี้ Offset address ของคำสั่งใน Code segment ที่เป็นคำสั่งต่อไปที่จะถูก Execute (CS:IP) • FLAG แสดงสถานะ (status) ของซีพียูในขณะนั้น ที่เป็นผลมาจากการ Execute แต่ละคำสั่ง โดยแต่ละบิตจะแทนสถานะของซีพียู ซึ่งคำสั่งแต่ละคำสั่งจะมีผลไม่มากก็น้อย

  17. b15 b13 b11 b9 b7 b5 b3 b1 b14 b12 b10 b8 b6 b4 b2 b0 - - - - O D T S Z - A - P - C I แฟลกรีจิสเตอร์ (FLAG) • C (Carry flag) แฟลกตัวทด แสดงสถานะของการทดหรือการยืม • P (Parity flag) แฟลกพาริตี้ แสดงสถานะของจำนวนบิตที่เป็น “1” ใน Low order bit ว่าเป็นคู่หรือคี่ (จำนวนคู่ P=1) • A (Auxilary flag) แฟลกทดช่วย แสดงสถานะของการทดหรือการยืมหมือนกับ Carry แต่เป็นคำสั่งเกี่ยวกับ BCD • Z (Zero flag) แฟลกศูนย์ แสดงสถานะเมื่อซีพียูทำคำสั่งแล้วได้ผลลัพธ์เท่ากับ ศูนย์

  18. b15 b13 b11 b9 b7 b5 b3 b1 b14 b12 b10 b8 b6 b4 b2 b0 - - - - O D T S Z - A - P - C I แฟลกรีจิสเตอร์ (FLAG) • S (Sign flag) แฟลกเครื่องหมาย แสดงสถานะเมื่อผลลัพธ์เป็นลบ • T (Trap flag) ใช้กำหนดให้ซีพียูทำงานเป็นแบบ Single step • I (Interrupt flag) แฟลกอินเตอร์รัพท์ กำหนดให้ซีพียูยอมรับการขัดจังหวะหรือไม่ (ยอมรับ I=1) • D (Direction flag) แฟลกทิศทาง กำหนดทิศทางการทำงานของคำสั่ง String (ทิศทางจากน้อยไปมาก D=0) • O (Overflow flag) แฟลกค่าเกิน

  19. ลำดับขั้นการเขียนโปรแกรมลำดับขั้นการเขียนโปรแกรม Start Editor *.ASM Assembler *.OBJ Error yes No *.EXE Linker Debugger Stop

  20. รูปแบบการเขียนโปรแกรมแอสเซมบลี้รูปแบบการเขียนโปรแกรมแอสเซมบลี้ DOSSEG .MODEL Small .STACK 128 .DATA .CODE MOV Ah,4CH INT 21H END พี้นที่ในการเขียนจองหน่วยความจำ พี้นที่ในการเขียนโปรแกรม

  21. รายละเอียด • DOSSEG เป็นคำสั่งเทียมใช้บอกโปรแกรมแอสเซมเบลอ ว่า เขียนโปรแกรมตามรูปแบบของบริษัทไมโครซอฟ • .MODEL Small เป็นการระบุขนาดของโปรแกรมที่เราจะเขียนซึ่งจะมีผลต่อ Data Segment และ Code Segment

  22. คำสั่งที่ใช้แทน Small ได้ Data Segment Code Segment คำสั่ง • Tiny Data และ Code อยู่ใน Segment เดียวกัน • Small ไม่เกิน 1 Segment ไม่เกิน 1 Segment • Mediumไม่เกิน 1 Segment เกิน 1 Segment ได้ • Compact เกิน 1 Segment ได้ ไม่เกิน 1 Segment • Large เกิน 1 เกิน 1

  23. รายละเอียด • .STACK 128 เป็นคำสั่งเทียมบอกจุดเริ่มต้นบริเวณที่เป็น Stack segment ตัวเลข 128 คือขนาดที่จองมีหน่วยเป็น Byte • .DATA เป็นคำสั่งเทียมใช้บอกจุดเริ่มต้นบริเวณที่เป็น Data segment • .CODE เป็นคำสั่งเทียมใช้บอกจุดเริ่มต้นบริเวณที่เป็น Code segment • END เป็นคำสั่งเทียมบอกว่าโปรแกรมจบเพียงเท่านี้

  24. การทำงานของโปรแกรม Application OS BIOS Hardware

  25. โครงสร้างโปรแกรมในแต่ละบรรทัดโครงสร้างโปรแกรมในแต่ละบรรทัด [name] [operation] [operand] [;comment] • name หรือ label เป็นการตั้งชื่อให้กับคำสั่งในบรรทัดนั้น ๆ • ตัวอย่าง start: xxx xxx goto start

  26. โครงสร้างโปรแกรมในแต่ละบรรทัดโครงสร้างโปรแกรมในแต่ละบรรทัด [name] [operation] [operand] [;comment] • operation เป็นคำที่ใช้บอกลักษณะการกระทำของบรรทัดนั้น ๆ ว่าให้ทำอะไร ปกติจะเป็นคำสั่งจริงของไมโครโปรฯ • ตัวอย่าง MOV xxx ADD xxx

  27. โครงสร้างโปรแกรมในแต่ละบรรทัดโครงสร้างโปรแกรมในแต่ละบรรทัด [name] [operation] [operand] [;comment] • operand เป็นข้อมูลที่ถูกกระทำโดย operation ที่เขียนข้างหน้า • ตัวอย่าง MOV AX,BX ADD Bh NOP

  28. โครงสร้างโปรแกรมในแต่ละบรรทัดโครงสร้างโปรแกรมในแต่ละบรรทัด [name] [operation] [operand] [;comment] • Comment จะเป็นส่วนอธิบายความหมายของบรรทัด ว่าคำสั่งนั้นใช้ทำอะไร • ตัวอย่าง MOV CX,10 ;กำหนดให้โปรแกรมทำงาน 10 ครั้ง xxx xxx

  29. กติกาในการตั้งชื่อ ตัวแปร ,label , โปรแกรมย่อย • ต้องขึ้นต้นด้วยตัวอักษรเท่านั้น • ความยาวของชื่อต้องไม่เกิน 31 ตัวอักษร • ต้องไม่เป็น Reserve word • อนุญาตให้ใช้เครื่องหมายเหล่านี้ในชื่อได้ ‘ _ ’ , ‘ @ ’ , ‘ ? ‘ , ‘ $ ‘ • ตัวอักษรเล็กหรือใหญ่ถือว่าเป็นตัวเดียวกัน (no case sensitive)

  30. กฎการใช้ค่าคงที่ต่าง ๆ • ค่าคงที่ที่เป็นจำนวนเต็ม • ปิดท้ายด้วยตัว B เมื่อเป็นเลขฐาน 2 เช่น 1000B • ปิดท้ายด้วยตัว Q เมื่อเป็นเลขฐาน 8 เช่น 1000Q • ปิดท้ายด้วยตัว D หรือไม่เขียนเมื่อเป็นเลขฐาน 10 เช่น 1000 , 1000D • ปิดท้ายด้วยตัว H เมื่อเป็นเลขฐาน 16 เช่น 1000H และตัวเลขที่ขึ้นต้นด้วยตัวอักษรต้องเขียนเลข 0 นำหน้าเสมอ เช่น 0A5H • ค่าคงที่ที่เป็น string จะต้องเขียนอยู่ภายใต้เครื่องหมายคำพูดเปิดและปิด ‘_____’ , “_____”

  31. การจองพื้นที่เพื่อเก็บข้อมูลและการตั้งค่าเริ่มต้นการจองพื้นที่เพื่อเก็บข้อมูลและการตั้งค่าเริ่มต้น .DATA .CODE การจองพี้นที่ตรงนี้

  32. การจองพื้นที่เพื่อเก็บข้อมูลและการตั้งค่าเริ่มต้นการจองพื้นที่เพื่อเก็บข้อมูลและการตั้งค่าเริ่มต้น .DATA [name] [directive] [initialize] [;comment] • Name: ชื่อประจำบรรทัด หรือ ชื่อของตัวแปร • directive : เป็นคำสั่งเทียมใช้ระบุขนาดของหน่วยความจำ • DB (Defined byte) เก็บข้อมูล 8 บิต • DW (Defined word) เก็บข้อมูล 16 บิต • DD (Defined double word) เก็บข้อมูล 32 บิต

  33. การจองพื้นที่เพื่อเก็บข้อมูลและการตั้งค่าเริ่มต้นการจองพื้นที่เพื่อเก็บข้อมูลและการตั้งค่าเริ่มต้น .DATA [name] [directive] [initialize] [;comment] • initialize : เป็นการระบุค่าเริ่มต้นที่เราจะจอง • comment : คำอธิบาย

  34. ไปลองใช้โปรแกรมกันเถอะไปลองใช้โปรแกรมกันเถอะ Editor Assembler Link debugger

  35. กลุ่มคำสั่ง Data Transfer MOV {Register | Memory} , {Register | Memory | immediate} • ตัวอย่าง MOV CX,0125H MOV Al,05H MOV AX,BX MOV Ah,Bl MOV Bl,[Data_1] MOV [Data_2],Ah MOV Byte PTR[data_2],50

  36. กลุ่มคำสั่ง Data Transfer XCHG {Register | Memory} , {Register | Memory } • ตัวอย่าง XCHG AX,BX XCHG Ah,Bl XCHG Bl,[Data_1] XCHG [Data_2],Ah

  37. กลุ่มคำสั่ง Data Tranfer LEA Register word , Variable • ตัวอย่าง LEA SI,Data_1 LEA DI,Data_2 MOV Al,[SI] MOV Bh,[DI]

  38. ตัวอย่างโจทย์ เขียนโปรแกรมกำหนดค่าให้กับรีจิสเตอร์ดังนี้AX = 100 , Bl = 70 , CX = 300 , DX = AX MOV AX,100 MOV Bl,70 MOV CX,300 MOV DX,AX MOV Ah,4CH INT 21H END DOSSEG .MODEL Small .STACK 128 .DATA .CODE MOV AX,@data MOV DS,AX

  39. ตัวอย่างโจทย์ เขียนโปรแกรมกำหนดค่าให้กับรีจิสเตอร์ดังนี้AX = 100 , Bl = 70 , CX = 300 , DX = AX เก็บค่า Bl ลงที่ Data_1เก็บค่า CX ลงที่ Data_2สำเนาข้อมูลจาก Data_2 ไปยัง Data_3 DOSSEG .MODEL Small .STACK 128 .DATA Data_1 DB 00 Data_2 DW 0000 Data_3 DW 0000 .CODE MOV [Data_1],Bl MOV [Data_2],CX MOV AX,[Data_2] MOV [Data_3],AX MOV Ah,4CH INT 21H END

  40. ป้อนโปรแกรมลงเครื่อง เพื่อดูว่าผลได้ผล ตามที่เราต้องการหรือไม่

  41. กลุ่มคำสั่ง ควบคุมลำดับการทำงาน • แบบไม่มีเงื่อนไข • JMPlabel • แบบมีเงื่อนไข • Jconditiontrue label • Jflag_nametrue label

  42. กลุ่มคำสั่ง ควบคุมลำดับการทำงาน • แบบไม่มีเงื่อนไข • JMPlabel • ตัวอย่าง • start: MOV AX,100 • MOV CX,20 • JMP start

  43. คำสั่งเกี่ยวกับการเปรียบเทียบคำสั่งเกี่ยวกับการเปรียบเทียบ CMP {Register | Memory} , {Register | Memory | immediate} (ใช้เปรียบเทียบเพื่อผลของคำสั่งใช้ตัดสินใจในคำสั่ง jump) • ผลการเปรียบเทียบ - flag Z = 1 ถ้าผลการเปรียบเทียบแล้วเท่ากัน - flag Cy = 1 ถ้าผลการเปรียบเทียบแล้ว opr1 < opr2 - flag Cy = 0 , Z = 0 ถ้าผลการเปรียบเทียบแล้ว opr1 > opr2

  44. ใช้ N เพื่อให้ ตรงข้ามได้ กลุ่มคำสั่ง ควบคุมลำดับการทำงาน • แบบมีเงื่อนไข (เงื่อนไขเป็นจริงกระโดดไป true label) • Jconditiontrue label • condition : • G >>>Greater than <<< A (Above) • L >>>Lass than <<< B (Below) • E >>>Equal

  45. กลุ่มคำสั่ง ควบคุมลำดับการทำงาน xxx CMP Ah,05H JG greater yyy yyy JMP cont greater: yyy yyy cont: xxx xxx ตัวอย่าง เงื่อนไขเป็นเท็จ เงื่อนไขเป็นจริง

  46. กลุ่มคำสั่ง ควบคุมลำดับการทำงาน • แบบมีเงื่อนไข (เงื่อนไขเป็นจริงกระโดดไป true label) • Jflag_nametrue label • JCXZ true label • flag_name : • Z >>> z = 1 เมื่อผลลัพธ์เป็น 0 • Cy >>> Cy = 1 เมื่อมีตัวทดหรือตัวยืม

  47. กลุ่มคำสั่ง ควบคุมลำดับการทำงาน xxx CMP Ah,05H Jz equal yyy yyy JMP cont equal: yyy yyy cont: xxx xxx ตัวอย่าง เงื่อนไขเป็นเท็จ เงื่อนไขเป็นจริง

  48. ตัวอย่างโปรแกรม .DATA data_1 DB 09 data_2 DB 00 .CODE MOV Bh,[data_1] CMP Bh,10 JG Exit MOV byte PTR[data_2],05 Exit: MOV Ah,4CH INT 21H END start Bh <---- [data_1] yes Bh > 10 no [data_2] <--- 5 เงื่อนไขเป็นเท็จ เงื่อนไขเป็นจริง Exit

  49. เขียนโปรแกรมตรวจสอบข้อมูลในหน่วยความจำและใส่ค่าดังนี้เขียนโปรแกรมตรวจสอบข้อมูลในหน่วยความจำและใส่ค่าดังนี้ JOB 1 Data_1 < 10 ใส่ข้อมูล 05 ----> data_2 Data_1 > 10 ใส่ข้อมูล 15 ----> data_2 Data_1 = 10 ใส่ข้อมูล 10 ----> data_2 start Bh <---- [data_1] 1 yes no Bh > 10 Bh = 10 [data_2] <--- 15 no yes [data_2] <--- 5 [data_2] <--- 10 1 Exit

  50. ลองป้อนโปรแกรมลงเครื่องลองป้อนโปรแกรมลงเครื่อง เพื่อดูว่าผลได้ผล ตามที่เราต้องการหรือไม่

More Related