วันพฤหัสบดีที่ 13 สิงหาคม พ.ศ. 2552

คำสั่งการโอนย้ายข้อมูล

· คำสั่ง MOV
การโอนย้ายข้อมูลระหว่างรีจิสเตอร์กับรีจิสเตอร์
การโอนย้ายข้อมูลกับหน่วยความจำ
การกำหนดค่าคงที่ให้กับหน่วยความจำ
· รูปแบบคำสั่ง 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 กำหนดค่า 100h ให้กับ AX จาก
MOV BX , AX นั้นคัดลอกไปให้ BX และ DX
MOV DX , BX


MOV AX , 1234h กำหนดค่า 1234h ให้กับ AX และค่า
MOV DX , 5678h 5678h ให้กับ DX จากนั้นคัดลอก
MOV AL , DL ค่าใน DL ไปให้ AL และ DH
MOV BH, DH ไปให้ BH


















ตัวอย่างการใช้คำสั่ง MOV


MOV AX , 100h กำหนดค่า 100h ให้กับ AX จากนั้นคัด
MOV [100h] , AX ลอกข้อมูลจาก AX ไปยังหน่วยความจำ
MOV BX , [100h] ตำแหน่งที่ DS: 100h และคัดลอกข้อมูล
กลับมายัง BX





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






MOV AX , 2300h กำหนดค่า 2300h ให้กับ DS โดย
MOV DS , AX ผ่านทาง AX
















การโอนย้ายข้อมูลระหว่างรีจิสเตอร์

· การโอนย้ายข้อมูลระหว่างรีจิสเตอร์สามารถทำได้ถ้าขนาดของ
รีจิสเตอร์ทั้งคู่เท่ากัน


· คู่รีจิสเตอร์ 16 บิต กับ 8 บิต



MOV AX , 1000h

AX AH AL

1000h 10h 00h


MOV AL , 3Ah

AX AH AL

1034h 10h 3Ah


MOV AH , AL

AX AH AL

3A3Ah 3Ah 3Ah


MOV AX , 234h

AX AH AL

234h 02h 34h



การโอนย้ายข้อมูลกับหน่วยความจำ

· การระบุตำแหน่งในหน่วยความจำ
โดยทั่วไป ในการระบุตำแหน่งในหน่วยความจำเราจะระบุเฉพาะ
ออฟเซ็ตเท่านั้น โดยออฟเซ็ตที่ระบุจะถูกนำไปประกอบกับค่าใน
เซ็กเมนต์ รีจิสเตอร์ที่เหมาะสม เช่น ในการอ้างถึงข้อมูลออฟเซ็ต
จะถูกนำไปประกอบกับ DS เป็นต้น

· ตัวอย่าง








MOV AX , 6789h
DS : 100h
MOV DX , 1234h
DS : 101h
MOV [100h] , AX
DS : 101h
MOV [102h] , DX

MOV [104h] , AH

MOV [105h] , DL

MOV BX , [104h]

MOV CX , [103h]

MOV [106h] , CL















MOV [100h] , AX

67 89
89h
DS : 100h
DS : 101h
67h
MOV [102h] , DX
DS : 102h
34h
12 34
12h
67h
MOV [104h] , AH
34h
67


MOV [105h] , DL

34



MOV BX , [104h] 34 67



MOV CX , [103h] 67 12


















การโอนย้ายข้อมูลกับหน่วยความจำ

1. ข้อสังเกตในการจัดเรียงลำดับไบต์ของข้อมูล
1.1 สังเกตว่าในการเก็บค่าในหน่วยความจำเมื่อเราเก็บค่าเป็น 16 บิต การ
เรียงไบต์ในหน่วยความจำจะเก็บค่าในไบต์ที่มีนัยสำคัญสูงไว้ในไบต์ที่มี
แอดเดรสสูงกว่า และไบต์ที่มีนัยสำคัญต่ำไว้ในแอดเดรสที่มีแอดเดรส
ต่ำกว่า

1.2 เราเรียกว่าเป็นการเรียงแบบ little endian การเรียงข้อมูลแบบนี้ใช้ในหน่วยประมวล
ผลตระกูล Intel

1.3 ในหน่วยประมวลผลตระกูลอื่นเช่น SPARC หรือ MIPS จะเรียงไบต์
กลับกันการเรียงอีกแบบนี้เราเรียกว่าการเรียงแบบ big endian
2. เราสามารถระบุออฟเซ็ตของหน่วยความจำทางอ้อมได้โดยผ่านทางรีจิสเตอร์ BX
AX = ?

MOV AX , 102h

MOV BX , 100h

DS : 100h
02h MOV CX , 4004h
01 04
BX
DS : 101h
01h MOV DX , 1201h
04h
DS : 102h
MOV [BX] , AX
10h
01 00
AXMOV [BX+2] , CX
00h
01h MOV [BX+3] , DX

MOV [BX+4] , BX

MOV BX , [102h]

MOV AX , [BX]

การกำหนดค่าให้กับหน่วยความจำ

1. ลองสังเกตคำสั่งต่อไปนี้
MOV [100h] , 10h

2. การคัดลอกค่าไปยังหน่วยความจำจะเป็นแบบ
§ 16 บิต (คัดลอก 001h) หรือ
§ 8 บิต (คัดลอก 10h)

3. ในการเขียนค่าคงที่ลงในหน่วยความจำเราจะต้องระบุขนาดของหน่วยความจำด้วย
MOV WORD PTR [100h] , 10h
MOV BYTE PTR [100h] , 10h


4. สังเกตว่าความกำกวมนี้ไม่เกิดในกรณีของ
MOV [100h] , AX


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

ตำแหน่งต้นทาง
ตำแหน่งปลายทาง

General register

Segment register

Memory location

Constant

General register

Segment register

Memory location

Constant

Yes

Yes

Yes

Yes

Yes

No

Yes

No


Yes

Yes

No

Yes

No

No

No

No







แบบฝึกหัด

1. ถ้าหากก่อนทำคำสั่ง MOV ค่าต่างๆเป็นไปตามที่กำหนด หลังจากทำคำสั่ง MOV ค่าต่างๆจะเป็นอย่างไร จงเติมค่าในที่ว่างที่กำหนด
ก่อนทำคำสั่ง
คำสั่ง
หลังทำคำสั่ง

BX : FF 75

MOV BX , CX

BX :=

CX : 01 A2


CX :=

AX : 01 A2

MOV AX , 100

AX


Value DW -1


DX : FF 75

MOV DX , Value

DX :=



Value :=

AX : 01 4B

MOV AH , 0

AX :=

AL : 64

MOV AL , -1

AL :=

























เฉลยแบบฝึกหัด

2. ถ้าหากก่อนทำคำสั่ง MOV ค่าต่างๆเป็นไปตามที่กำหนด หลังจากทำคำสั่ง MOV ค่าต่างๆจะเป็นอย่างไร จงเติมค่าในที่ว่างที่กำหนด
ก่อนทำคำสั่ง
คำสั่ง
หลังทำคำสั่ง

BX : FF 75

MOV BX , CX

BX : = 01 A2

CX : 01 A2


CX : = 01 A2

AX : 01 A2

MOV AX , 100

AX : = 01 00


Value DW -1


DX : FF 75

MOV DX , Value

DX : = -1



Value : = -1

AX : 01 4B

MOV AH , 0

AX : = 00 4B

AL : 64

MOV AL , -1

AL : = -1

ไม่มีความคิดเห็น:

แสดงความคิดเห็น