1 / 16

การโอนย้ายข้อมูล

การโอนย้ายข้อมูล. ธนาวินท์ รักธรรมานนท์ fengtwr@ku.ac.th. คำสั่งการโอนย้ายข้อมูล. คำสั่ง MOV การโอนย้ายข้อมูลระหว่างรีจิสเตอร์กับรีจิสเตอร์ การโอนย้ายข้อมูลกับหน่วยความจำ การกำหนดค่าคงที่ให้กับหน่วยความจำ รูปแบบ MOV ปลายทาง , ต้นทาง MOV reg,reg MOV reg,mem MOV mem,reg

maree
Download Presentation

การโอนย้ายข้อมูล

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. การโอนย้ายข้อมูล ธนาวินท์ รักธรรมานนท์ 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. กำหนดค่า 100h ให้กับ AX จากนั้นคัดลอกไปให้ BX และ DX กำหนดค่า 1234h ให้กับ AX และค่า 5678h ให้กับ DX จากนั้นคัดลอกค่าใน DLไปให้ AL และ DH ไปให้ BH กำหนดค่า 1000h ให้กับ AX จากนั้นคัดลอกข้อมูลจาก AX ไปยังหน่วยความจำตำแหน่งที่ DS:100h และคัดลอกข้อมูลกลับมายัง BX ตัวอย่างการใช้คำสั่ง 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]

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

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

  7. DS:100h DS:101h DS:102h การโอนย้ายข้อมูลกับหน่วยความจำ • การระบุตำแหน่งในหน่วยความจำ • โดยทั่วไป ในการระบุตำแหน่งในหน่วยความจำเราจะระบุเฉพาะออฟเซ็ตเท่านั้น โดยออฟเซ็ตที่ระบุจะถูกนำไปประกอบกับค่าในเซ็กเมนต์ รีจิสเตอร์ที่เหมาะสม เช่นในการอ้างถึงข้อมูลออฟเซ็ตจะถูกนำไปประกอบกับ 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

  8. MOV [100h],AX 67 89 DS:100h 89h MOV [102h],DX DS:101h 67h 12 34 34h DS:102h 12h MOV [104h],AH 67 MOV [105h],DL 34 MOV BX,[104h] 34 67 MOV CX,[103h] 67 12 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 67h 34h

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

  10. DS:100h 02h 04h BX 01 04 40h 01h DS:101h DS:102h AX 01 00 01h 00h 12h 10h การโอนย้ายข้อมูลกับหน่วยความจำ • เราสามารถระบุออฟเซ็ตของหน่วยความจำทางอ้อมได้โดยผ่านทางรีจิสเตอร์ 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]

  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 ?

More Related