ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
ธนาวินท์ รักธรรมานนท์ fengtwr@ku.ac.th
การโอนย้ายข้อมูล ธนาวินท์ รักธรรมานนท์
2
คำสั่งการโอนย้ายข้อมูล
คำสั่ง MOV การโอนย้ายข้อมูลระหว่างรีจิสเตอร์กับรีจิสเตอร์ การโอนย้ายข้อมูลกับหน่วยความจำ การกำหนดค่าคงที่ให้กับหน่วยความจำ รูปแบบ MOV ปลายทาง , ต้นทาง MOV reg,reg MOV reg,mem MOV mem,reg MOV reg,imm MOV mem,imm reg : รีจิสเตอร์ mem : ตำแหน่งหน่วยความจำ imm : immediate (ค่าคงที่)
3
ข้อจำกัดของคำสั่ง MOV
โอเปอร์แรนด์ทั้งสองตัวต้องมีขนาดเท่ากัน สิ่งไม่สามารถคัดลอก ข้อมูลจากหน่วยความจำไปยังหน่วยความจำโดยตรง ค่าคงที่ (immediate) ไปยังเซกเมนต์รีจิสเตอร์โดยตรง ในการคัดลอกค่าคงที่ไปยังหน่วยความจำต้องระบุขนาดของหน่วยความจำด้วย
4
ตัวอย่างการใช้คำสั่ง 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
5
ตัวอย่างการใช้คำสั่ง 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
6
การโอนย้ายข้อมูลระหว่างรีจิสเตอร์
การโอนย้ายข้อมูลระหว่างรีจิสเตอร์สามารถทำได้ถ้าขนาดของรีจิสเตอร์ทั้งคู่เท่ากัน คู่รีจิสเตอร์ 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
7
การโอนย้ายข้อมูลกับหน่วยความจำ
การระบุตำแหน่งในหน่วยความจำ โดยทั่วไป ในการระบุตำแหน่งในหน่วยความจำเราจะระบุเฉพาะออฟเซ็ตเท่านั้น โดยออฟเซ็ตที่ระบุจะถูกนำไปประกอบกับค่าในเซ็กเมนต์ รีจิสเตอร์ที่เหมาะสม เช่นในการอ้างถึงข้อมูลออฟเซ็ตจะถูกนำไปประกอบกับ 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
8
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
9
การโอนย้ายข้อมูลกับหน่วยความจำ
ข้อสังเกตในการจัดเรียงลำดับไบต์ของข้อมูล สังเกตว่าในการเก็บค่าในหน่วยความจำเมื่อเราเก็บค่าเป็น 16 บิต การเรียงไบต์ในหน่วยความจำจะเก็บค่าในไบต์ที่มีนัยสำคัญสูงไว้ในไบต์ที่มีแอดเดรสสูงกว่า และไบต์ที่มีนัยสำคัญต่ำไว้ในแอดเดรสที่มีแอดเดรสต่ำกว่า เราเรียกว่าเป็นการเรียงแบบ little endian การเรียงข้อมูลแบบนี้ใช้ในหน่วยประมวลผลตระกูล Intel ในหน่วยประมวลผลตระกูลอื่นเช่น SPARC หรือ MIPS จะเรียงไบต์กลับกันการเรียงอีกแบบนี้เราเรียกว่าการเรียงแบบ big endian
10
การโอนย้ายข้อมูลกับหน่วยความจำ
เราสามารถระบุออฟเซ็ตของหน่วยความจำทางอ้อมได้โดยผ่านทางรีจิสเตอร์ 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
11
การกำหนดค่าให้กับหน่วยความจำ
ลองสังเกตคำสั่งต่อไปนี้ การคัดลอกค่าไปยังหน่วยความจำจะเป็นแบบ 16 บิต (คัดลอก 0010h) หรือ 8 บิต (คัดลอก 10h) ในการเขียนค่าคงที่ลงในหน่วยความจำเราจะต้องระบุขนาดของหน่วยความจำด้วย สังเกตว่าความกำกวมนี้ไม่เกิดในกรณีของ MOV [100h],10h MOV WORD PTR [100h],10h MOV BYTE PTR [100h],10h MOV [100h],AX
12
DEBUG
13
คำสั่งทั่วไปของโปรแกรม DEBUG
คำสั่ง ? : แสดงรายการคำสั่ง คำสั่ง R (register) : จัดการกับรีจิสเตอร์ คำสั่ง D (dump) : แสดงค่าในหน่วยความจำ คำสั่ง A (assemble) : สั่งให้โปรแกรม DEBUG แปล โปรแกรมลงในแอดเดรสที่ระบุ คำสั่ง U (unassemble) : สั่งให้โปรแกรม DEBUG แสดง โปรแกรมที่อยู่ในแอดเดรสที่ระบุ
14
คำสั่งทั่วไปของโปรแกรม DEBUG
คำสั่ง T (trace) : คำสั่งตามรอยการทำงานครั้งละ 1 คำสั่ง คำสั่ง P (proceed) : คำสั่งให้ทำงานจนถึงบรรทัดถัดไป ใช้ในกรณีมีการเรียกโปรแกรมย่อยหรือมีการเรียกใช้บริการของระบบ คำสั่ง G (go) : คำสั่งเริ่มการทำงานและทำงานจนจบ
15
สิ่งควรรู้ก่อนการใช้โปรแกรม DEBUG
โปรแกรม DEBUG เป็นโปรแกรมหนึ่งที่อยู่ในชุดคำสั่งของ windows ตัวเลขต่าง ๆ ในโปรแกรม DEBUG จะเป็นเลขฐาน 16 ทั้งหมด ไม่ต้องพิมพ์ h ระบุหลังตัวเลข โปรแกรมจะเริ่มทำงานที่หน่วยความจำตำแหน่ง CS:IP เสมอ การกำหนดค่าให้กับรีจิสเตอร์ทั้งสองใช้คำสั่ง RCS และ RIP การระบุคำสั่ง (a) , การแสดงคำสั่ง (u) และการแสดงหน่วยความจำ (d) จะเริ่มต้นที่ตำแหน่งต่อจากการทำงานครั้งสุดท้ายของคำสั่งนั้นๆ ไม่ขึ้นกับค่า IP หากต้องการเปลี่ยนแปลงตำแหน่งให้ใส่ offset ตามหลังทันที เช่น a 100 เป็นต้น การใช้งานหน่วยความจำทุกครั้งจะต้องอ้างในรูปแบบ segment:offset เสมอ แต่การอ้างถึงข้อมูลส่วนใหญ่ในโปรแกรมจะใช้เพียงรีจิสเตอร์เดียว
16
Question ?
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.