ธนาวินท์ รักธรรมานนท์

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างของภาษา C ในโปรแกรมที่พัฒนาด้วยภาษา C ทุกโปรแกรมจะมีโครงสร้างการพัฒนาไม่แตกต่างกัน ซึ่งประกอบด้วย 6 ส่วนหลัก ๆ โดยที่แต่ละส่วนจะมีหน้าที่แตกต่างกัน.
Advertisements

กระบวนการ (Process).
บทที่ 11 โปรแกรมย่อยขั้นต้น
ตัวแปรประเภทตัวชี้ (Pointer)
Lists Data Structure LAUKHWAN NGAMPRASIT LAUKHWAN NGAMPRASIT.
ตัวแปรชุด การเขียนโปรแกรมภาษาคอมพิวเตอร์ 1
2.2.3 การแก้ไขแอดเดรส โดยการใช้อินเด็กรีจิสเตอร์
Chapter 7 ขอบเขตของตัวแปร Variable Scope.
Register Allocation and Graph Coloring
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming Period 16.
คณิตศาสตร์และสถิติธุรกิจ
หน่วยที่ 2 วิธีการออกแบบโปรแกรม
Arrays.
Lab 2: การใช้ MATLAB สำหรับการสร้างแบบจำลองเพื่อวิเคราะห์
ขั้นตอนการแปลงไฟล์.
SCC : Suthida Chaichomchuen
Control Transfer Instructions
Addressing Modes Assembly Programming.
1 Structures & Records SCC : Suthida Chaichomchuen
ลำดับการทำงานหน่วยความจำ
Suthida Chaichomchuen
Network Layer Protocal:
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming Period 6.
CS Assembly Language Programming Period 30.
ชั้นมัธยมศึกษาตอนต้น
ดีบักเป็นเครื่องมืออันหนึ่งที่ให้ผู้ใช้ ตรวจสอบ และแก้ไขค่าใน หน่วยความจำ โหลด เก็บ ตรวจสอบค่าในเรจิสเตอร์ และสามารถ เขียนโปรแกรมแอสเซมบลีได้อย่าง สะดวก.
ASSIGN3-4. InstructionResult Z-FlagC-FlagP-FlagS-FlagO-Flag MOV AL,9Eh 9Eh H ????? ADDAL,9Eh 3C ADD AL,1Eh 5A
แบบฝึกหัด 24/12/09. เมื่อคอมพ์ทำคำสั่งต่อไปนี้ จงแสดง ผลลัพธ์และ ค่าแฟลกต่างๆ InstructionResult Z-FlagC-FlagP- Flag S- Flag O- Flag MOV AL,3h Inc AL Mov.
บทที่ 15 โปรแกรมย่อยและแสต็ก
บทที่ 17 คำสั่งตารางและการสร้างแมคโคร
ธนาวินท์ รักธรรมานนท์
ธนาวินท์ รักธรรมานนท์
โปรแกรมภาษาแอสเซมบลี้ (2)
ภาควิชาวิทยาศาสตร์ประยุกต์ คณะวิทยาศาสตร์เทคโนโลยีและการเกษตร
Debug #2 โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
เซกเมนต์ (Segment) โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
อินเทอร์รัพท์ (Interrupt)
GW-Basic Language มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
ค31211 คณิตศาสตร์สำหรับ คอมพิวเตอร์ 1
ปฏิบัติการแบบแยก Branch Operation.
อินเทอร์เน็ตInternet
Vm.odp. Detailed VM Example ตัวอย่างการทำงานของ page fault ISR ที่ จะสนับสนุนการทำงานของหน่วยความจำ เสมือน โดยการย้ายบิตที่ไม่จำเป็นออก จากหน้าเว็บ เนื่องจากว่ามันทำให้สับสน.
Week 2 Variables.
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
CS Assembly Language Programming
Computer Programming for Engineers
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
การกระโดดและการวนรอบ
หลักการเขียนโปรแกรม ( )
PHP: [8] การสร้างฟังก์ชั่นขึ้นใช้เอง (User-defined functions)
Lab.
บทที่ 9 พอยเตอร์. สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อ การศึกษาเท่านั้น พอยเตอร์ (Pointer) พอยเตอร์คือต้นฉบับของชนิดข้อมูล เป็นชนิด ข้อมูลที่สร้างจากข้อมูลมาตรฐานชนิดหนึ่ง.
อาจารย์ปิยศักดิ์ ถีอาสนา
A QUICK OVERVIEW OF PDP-8 ARCHITECTURE
หลักการเขียนโปรแกรม ( )
Addressing Modes ธนวัฒน์ แซ่เอียบ.
ซอฟต์แวร์ (software) จัดทำโดย นาย ยุทธพงศ์ คำยอง
หลักการโปรแกรมเบื้องต้น
ส่วนประกอบของคอมพิวเตอร์
ใบสำเนางานนำเสนอ:

ธนาวินท์ รักธรรมานนท์ fengtwr@ku.ac.th การโอนย้ายข้อมูล ธนาวินท์ รักธรรมานนท์ fengtwr@ku.ac.th

คำสั่งการโอนย้ายข้อมูล คำสั่ง MOV การโอนย้ายข้อมูลระหว่างรีจิสเตอร์กับรีจิสเตอร์ การโอนย้ายข้อมูลกับหน่วยความจำ การกำหนดค่าคงที่ให้กับหน่วยความจำ รูปแบบ MOV ปลายทาง , ต้นทาง MOV reg,reg MOV reg,mem MOV mem,reg MOV reg,imm MOV mem,imm reg : รีจิสเตอร์ mem : ตำแหน่งหน่วยความจำ imm : immediate (ค่าคงที่)

ข้อจำกัดของคำสั่ง MOV โอเปอร์แรนด์ทั้งสองตัวต้องมีขนาดเท่ากัน สิ่งไม่สามารถคัดลอก ข้อมูลจากหน่วยความจำไปยังหน่วยความจำโดยตรง ค่าคงที่ (immediate) ไปยังเซกเมนต์รีจิสเตอร์โดยตรง ในการคัดลอกค่าคงที่ไปยังหน่วยความจำต้องระบุขนาดของหน่วยความจำด้วย

ตัวอย่างการใช้คำสั่ง MOV MOV AX,100h MOV BX,AX MOV DX,BX MOV AX,1234h MOV DX,5678h MOV AL,DL MOV BH,DH MOV AX,1000h MOV [100h],AX MOV BX,[100h] กำหนดค่า 100h ให้กับ AX จากนั้นคัดลอกไปให้ BX และ DX กำหนดค่า 1234h ให้กับ AX และค่า 5678h ให้กับ DX จากนั้นคัดลอกค่าใน DLไปให้ AL และ DH ไปให้ BH กำหนดค่า 1000h ให้กับ AX จากนั้นคัดลอกข้อมูลจาก AX ไปยังหน่วยความจำตำแหน่งที่ DS:100h และคัดลอกข้อมูลกลับมายัง BX

ตัวอย่างการใช้คำสั่ง MOV กำหนดค่า 10h แบบไบต์ให้กับหน่วยความจำที่ DS:200h และแบบเวิร์ดที่ DS:300h MOV BYTE PTR [200h],10h MOV WORD PTR [300h],10h MOV AX,2300h MOV DS,AX กำหนดค่า 2300h ให้กับ DS โดยผ่านทาง AX

การโอนย้ายข้อมูลระหว่างรีจิสเตอร์ การโอนย้ายข้อมูลระหว่างรีจิสเตอร์สามารถทำได้ถ้าขนาดของรีจิสเตอร์ทั้งคู่เท่ากัน คู่รีจิสเตอร์ 16 บิต กับ 8 บิต MOV AX,1000h MOV AL,3Ah MOV AH,AL MOV AX,234h AX AH AL 1000h 10h 00h AX AH AL 103Ah 10h 3Ah AX AH AL 3A3Ah 3Ah AX AH AL 234h 02h 34h

การโอนย้ายข้อมูลกับหน่วยความจำ การระบุตำแหน่งในหน่วยความจำ โดยทั่วไป ในการระบุตำแหน่งในหน่วยความจำเราจะระบุเฉพาะออฟเซ็ตเท่านั้น โดยออฟเซ็ตที่ระบุจะถูกนำไปประกอบกับค่าในเซ็กเมนต์ รีจิสเตอร์ที่เหมาะสม เช่นในการอ้างถึงข้อมูลออฟเซ็ตจะถูกนำไปประกอบกับ DS เป็นต้น ตัวอย่าง MOV AX,6789h MOV DX,1234h MOV [100h],AX MOV [102h],DX MOV [104h],AH MOV [105h],DL MOV BX,[104h] MOV CX,[103h] MOV [106h],CL DS:100h DS:101h DS:102h

MOV [100h],AX 89h MOV [102h],DX 67h 34h MOV AX,6789h MOV DX,1234h DS:100h DS:101h DS:102h 89h 67h MOV [102h],DX 12 34 34h 12h MOV AX,6789h MOV DX,1234h MOV [100h],AX MOV [102h],DX MOV [104h],AH MOV [105h],DL MOV BX,[104h] MOV CX,[103h] MOV [106h],CL MOV [104h],AH 67 MOV CX,[103h] 67 12 67h MOV BX,[104h] 34 67 34h MOV [105h],DL 34

การโอนย้ายข้อมูลกับหน่วยความจำ ข้อสังเกตในการจัดเรียงลำดับไบต์ของข้อมูล สังเกตว่าในการเก็บค่าในหน่วยความจำเมื่อเราเก็บค่าเป็น 16 บิต การเรียงไบต์ในหน่วยความจำจะเก็บค่าในไบต์ที่มีนัยสำคัญสูงไว้ในไบต์ที่มีแอดเดรสสูงกว่า และไบต์ที่มีนัยสำคัญต่ำไว้ในแอดเดรสที่มีแอดเดรสต่ำกว่า เราเรียกว่าเป็นการเรียงแบบ little endian การเรียงข้อมูลแบบนี้ใช้ในหน่วยประมวลผลตระกูล Intel ในหน่วยประมวลผลตระกูลอื่นเช่น SPARC หรือ MIPS จะเรียงไบต์กลับกันการเรียงอีกแบบนี้เราเรียกว่าการเรียงแบบ big endian

การโอนย้ายข้อมูลกับหน่วยความจำ เราสามารถระบุออฟเซ็ตของหน่วยความจำทางอ้อมได้โดยผ่านทางรีจิสเตอร์ BX AX = ? MOV AX,102h MOV BX,100h MOV CX,4004h MOV DX,1201h MOV [BX],AX MOV [BX+2],CX MOV [BX+3],DX MOV [BX+4],BX MOV BX,[102h] MOV AX,[BX] DS:100h DS:101h DS:102h 02h 01h 01 04 BX 04h 40h 01 00 AX 01h 12h 00h 10h

การกำหนดค่าให้กับหน่วยความจำ ลองสังเกตคำสั่งต่อไปนี้ การคัดลอกค่าไปยังหน่วยความจำจะเป็นแบบ 16 บิต (คัดลอก 0010h) หรือ 8 บิต (คัดลอก 10h) ในการเขียนค่าคงที่ลงในหน่วยความจำเราจะต้องระบุขนาดของหน่วยความจำด้วย สังเกตว่าความกำกวมนี้ไม่เกิดในกรณีของ MOV [100h],10h MOV WORD PTR [100h],10h MOV BYTE PTR [100h],10h MOV [100h],AX

DEBUG

คำสั่งทั่วไปของโปรแกรม DEBUG คำสั่ง ? : แสดงรายการคำสั่ง คำสั่ง R (register) : จัดการกับรีจิสเตอร์ คำสั่ง D (dump) : แสดงค่าในหน่วยความจำ คำสั่ง A (assemble) : สั่งให้โปรแกรม DEBUG แปล โปรแกรมลงในแอดเดรสที่ระบุ คำสั่ง U (unassemble) : สั่งให้โปรแกรม DEBUG แสดง โปรแกรมที่อยู่ในแอดเดรสที่ระบุ

คำสั่งทั่วไปของโปรแกรม DEBUG คำสั่ง T (trace) : คำสั่งตามรอยการทำงานครั้งละ 1 คำสั่ง คำสั่ง P (proceed) : คำสั่งให้ทำงานจนถึงบรรทัดถัดไป ใช้ในกรณีมีการเรียกโปรแกรมย่อยหรือมีการเรียกใช้บริการของระบบ คำสั่ง G (go) : คำสั่งเริ่มการทำงานและทำงานจนจบ

สิ่งควรรู้ก่อนการใช้โปรแกรม DEBUG โปรแกรม DEBUG เป็นโปรแกรมหนึ่งที่อยู่ในชุดคำสั่งของ windows ตัวเลขต่าง ๆ ในโปรแกรม DEBUG จะเป็นเลขฐาน 16 ทั้งหมด ไม่ต้องพิมพ์ h ระบุหลังตัวเลข โปรแกรมจะเริ่มทำงานที่หน่วยความจำตำแหน่ง CS:IP เสมอ การกำหนดค่าให้กับรีจิสเตอร์ทั้งสองใช้คำสั่ง RCS และ RIP การระบุคำสั่ง (a) , การแสดงคำสั่ง (u) และการแสดงหน่วยความจำ (d) จะเริ่มต้นที่ตำแหน่งต่อจากการทำงานครั้งสุดท้ายของคำสั่งนั้นๆ ไม่ขึ้นกับค่า IP หากต้องการเปลี่ยนแปลงตำแหน่งให้ใส่ offset ตามหลังทันที เช่น a 100 เป็นต้น การใช้งานหน่วยความจำทุกครั้งจะต้องอ้างในรูปแบบ segment:offset เสมอ แต่การอ้างถึงข้อมูลส่วนใหญ่ในโปรแกรมจะใช้เพียงรีจิสเตอร์เดียว

Question ?