basic i nstructions
DESCRIPTION
Basic I nstructions. SCC : Suthida Chaichomchuen [email protected]. Basic Instructions. MOV XCHG LEA ADD/ADC SUB/SBB MUL/IMUL DIV/IDIV CMP INC/DEC NEG. MOV ( move ). - PowerPoint PPT PresentationTRANSCRIPT
2
Basic Instructions
MOV XCHG LEA ADD/ADC SUB/SBB MUL/IMUL DIV/IDIV CMP INC/DEC NEG
3
MOV (move) เป็�นการคัดลอกข้�อมู�ลข้นาดไบต์�หร�อเวิ�ร�ดจากต์�นทาง
ไป็ยังป็ลายัทางโดยัท� ต์�นทางและป็ลายัทางอาจจะเป็�น ร�จ�สเต์อร�กบร�จ�สเต์อร� หร�อร�จ�สเต์อร�กบต์$าแหน%งข้องหน%วิยัคัวิามูจ$า หร�อคั%าคังท� ไป็ยังร�จ�สเต์อร�หร�อหน%วิยัคัวิามูจ$า
4
MOV : Format [label:] MOV destination, source
[label:] MOV register, register [label:] MOV register, memory [label:] MOV register, immediate [label:] MOV memory, register [label:] MOV memory, immediate
5
MOV : Example MOV AX, Table MOV Table , AX MOV ES:[BX], AX MOV DS, AX MOV BL, AL MOV -CL, 30 MOV Dest 25, H
6
MOV : Constraint
ไมู%สามูารถยั�ายัข้�อมู�ลระหวิ%างหน%วิยัคัวิามูจ$าได� ต์�องใช้�ร�จ�สเต์อร�เป็�นต์วิกลางในการยั�ายัข้�อมู�ลระหวิ%าง
หน%วิยัคัวิามูจ$า เช้%น ต์�องการยั�ายัข้�อมู�ลจาก Pounds ไป็ยัง
Weight โดยัผ่%านร�จ�สเต์อร� AX
MOV AX, Pounds
MOV Weight, AX
7
MOV : Constraint
ไมู%สามูารถน$าคั%า immediate เช้%นคั%า offset ใส%ให� segment register ได�โดยัต์รง
ต์�องใช้�ร�จ�สเต์อร� AX เป็�นต์วิกลางผ่%านคั%า offset ไป็ยัง segment register
MOV AX, @DATA
MOV DS, AX
ร�จ�สเต์อร� CS ไมู%สามูารถใช้�เป็�น destination ข้องคั$าส ง MOV ได�
8
XCHG (exchange)
คั$าส ง XCHG จะสลบคั%าเป็�นไบต์�หร�อเวิ�ร�ดระหวิ%าง operand ท� เป็�น source และ destination
สามูารถสลบคั%าระหวิ%างร�จ�สเต์อร� 2 ต์วิ หร�อระหวิ%างร�จ�สเต์อร�กบคั%าในหน%วิยัคัวิามูจ$า
Segment Register ไมู%สามูารถน$ามูาใช้�เป็�น operand ได�
9
XCHG : Format
[label:] XCHG destination, source
[label:] XCHG register, register [label:] XCHG register, memory [label:] XCHG memory, register
10
XCHG : Example XCHG AX, BX XCHG AL, BH XCHG DL, Byte XCHG Word , DX
11
LEA (load effective address)
คั$าส ง LEA จะน$าคั%าออฟเซต์ข้อง Operand ในหน%วิยัคัวิามูจ$าไป็ใส%ไวิ�ในร�จ�สเต์อร� 16 บ�ต์
ร�ป็แบบคั$าส ง
[label:] LEA register16, memory16
12
LEA : Example
น$าคั%าออฟเซต์ข้อง Table ไป็ใส%ใน BX
Table DB 10,20,30,40,50,60,70
LEA BX, Table
13
Addition Instruction บวิก operand 816/ บ�ต์
ADD destination = destination+source
ADC : ADD with Carry destination =
destination+source+carry
14
ADD & ADC : Format
[ Label:] ADD/ADC register, register [Label:] ADD/ADC memory, register [Label:] ADD/ADC register, memory [Label:] ADD/ADC register, immediate [Label:] ADD/ADC memory,
immediate
15
ADD : Example
ADD AX , BX ADD AL, Byte ADD Word , AX ADD BL, 10H ADD Byte 25, H
16
ADC : Example
ADC AX , BX ADC AL, Byte ADC Word , AX ADC BL, 10H ADC Byte 25, H
17
Subtraction Instruction
ลบคั%า operand 816/ บ�ต์ CF ท$าหน�าท� เหมู�อนต์วิยั�มู
SUB destination = destination-source
SBB : Subtract with Borrow - -destination = destination source carry
18
SUB & SBB : Format
[ Label:] SUB/SBB register, register [Label:] SUB/SBB memory, register [Label:] SUB/SBB register, memory [Label:] SUB/SBB register, immediate [Label:] SUB/SBB memory,
immediate
19
SUB : Example
SUB AX, BX SUB AX, Word SUB Word, AX SUB BX, 1000H SUB Word, 256H
20
SBB : Example
SBB AX, BX SBB AX, Word SBB Word, AX SBB BX, 1000H SBB Word, 256H
21
SUB & SBB : 32 bit
ถ�าต์�องการลบคั%า 32 บ�ต์ ใช้�คั$าส งดงน�. ก$าหนดต์วิต์.งใน BX, AX ต์วิลบอยั�%ใน DX, CX SUB AX, CX SBB BX, DX
22
Multiplication Instruction เป็�นคั$าส งท� ใช้�ในการคั�ณเลข้ 8 บ�ต์และ 16 บ�ต์ ผ่ลลพธ์�ท� ได�จากการคั�ณจะมู�ข้นาดเพ� มูข้2.น เป็�น 2 เท%า มู� 2 แบบคั�อ
MUL : Unsigned Multiplication IMUL : Signed Multiplication
23
Multiplication : 8 bit การคั�ณเลข้ 8 บ�ต์
ต์วิต์.งเก3บไวิ�ท� ร �จ�สเต์อร� AL ต์วิคั�ณเก3บไวิ�ท� ร �จ�สเต์อร�หร�อหน%วิยัคัวิามูจ$าข้นาด
8 บ�ต์ ผ่ลลพธ์�จะมู�ข้นาด 16 บ�ต์ เก3บอยั�%ในร�จ�สเต์อร�
AX
24
Multiplication : 16 bit การคั�ณเลข้ 16 บ�ต์
ต์วิต์.งเก3บไวิ�ท� ร �จ�สเต์อร� AX ต์วิคั�ณเก3บไวิ�ท� ร �จ�สเต์อร�หร�อหน%วิยัคัวิามูจ$าข้นาด
16 บ�ต์ ผ่ลลพธ์�จะมู�ข้นาด 32 บ�ต์ เก3บอยั�%ในร�จ�สเต์อร� DX
และ AX DX เก3บผ่ลลพธ์� 16 บ�ต์บน AX เก3บผ่ลลพธ์� 16 บ�ต์ล%าง
25
MUL : Format [label:] MUL
register/memory
เป็�นการคั�ณแบบไมู%คั�ดเคัร� องหมูายั ถ�าคัร2 งบนข้องผ่ลลพธ์�การคั�ณเป็�น 0
CF และ OF จะมู�คั%าเป็�น 0
26
IMUL : Format [label:] IMUL register/memory
เป็�นการคั�ณแบบคั�ดเคัร� องหมูายั ถ�าคัร2 งบนข้องผ่ลลพธ์�การคั�ณเป็�น sign-
extension CF และ OF จะมู�คั%าเป็�น 0
27
MUL & IMUL : Example MUL BX MUL Byte IMULDL IMULWord
28
MUL : Example คั�ณเลข้ท� ไมู%มู�เคัร� องหมูายั ระหวิ%างเลข้ 8 บ�ต์ กบ
16 บ�ต์
MOV AX, Multiplicand ; AX = ต์วิต์.ง
MOV CL, Multiplier ; CL = ต์วิคั�ณMOV CH, 0MUL CX ; AX = AX * CX
29
IMUL : Example คั�ณเลข้ท� มู�เคัร� องหมูายั ระหวิ%างเลข้ 8 บ�ต์ กบ 1
6 บ�ต์
MOV AL, Multiplicand ; AL = เลข้ 8บ�ต์
CBW ; ข้ยัายัเป็�น 16 บ�ต์MOV CX, Multiplier ; CX = เลข้ 16
บ�ต์IMUL CX ; AX = AX * CX
30
Division Instruction
เป็�นคั$าส งท� ใช้�ในการหารคั%าต์วิเลข้ด�วิยัเลข้ 8 บ�ต์และ 16 บ�ต์
มู� 2 แบบคั�อ DIV : Unsigned Division IDIV : Signed Division
ร�ป็แบบ [label:] DIV/IDIV register/memory
31
Division : by 8 bit การหารเลข้ 16 บ�ต์ ด�วิยัเลข้ 8 บ�ต์
ต์วิต์.งข้นาด 16 บ�ต์เก3บไวิ�ท� ร �จ�สเต์อร� AX ต์วิหารข้นาด 8 บ�ต์เก3บไวิ�ท� ร �จ�สเต์อร�/หน%วิยัคัวิามูจ$า ผ่ลลพธ์�
จ$านวินเต์3มูเก3บไวิ�ท� AL เศษเก3บไวิ�ท� AH
32
Division : by 16 bit การหารเลข้ 32 บ�ต์ด�วิยั 16 บ�ต์
ต์วิต์.งข้นาด 32 บ�ต์เก3บในร�จ�สเต์อร� DX และ AX DX เก3บไบต์�ส�ง AX เก3บไบต์�ต์$ า
ต์วิหารข้นาด 16 บ�ต์เก3บในร�จ�สเต์อร�/หน%วิยัคัวิามูจ$า ผ่ลลพธ์�
จ$านวินเต์3มูเก3บไวิ�ท� AX เศษเก3บไวิ�ท� DX
33
Division : Overflow
ถ�าผ่ลลพธ์�จากการหารได�คั%าจ$านวินเต์3มูท� ใหญ่%กวิ%าท� AL หร�อ AX จะเก3บได� จะเก�ดการ Interrupt ช้น�ด 0
โดยั DOS จะแสดงข้�อคัวิามูวิ%า “Divide
Overflow”
34
DIV & IDIV : Example DIV CL DIV BX DIV byte DIV word IDIV DL IDIV CX IDIV byte IDIV word
35
DIV : Example การหารเลข้ท� ไมู%มู�เคัร� องหมูายัข้นาด 16 บ�ต์ด�วิยั
เลข้ 8 บ�ต์
MOV AX, 037D7H ; 14295 MOV BL, 097H ; 151 DIV BL ; 14295/151
36
IDIV : Example การหารเลข้ท� มู�เคัร� องหมูายัข้นาด 16 บ�ต์ด�วิยัเลข้
8 บ�ต์
MOV AX, 03ABH ; 939 MOV BL, 0D3H ; -45 IDIV BL ; 939/-45
37
CMP (compare)
เป็�นคั$าส งท� ใช้�เป็ร�ยับเท�ยับคั%า 2 คั%า ใช้�หลกการลบคั%า source ออกจาก destination
แต์%ไมู%ได�เก3บคั%าผ่ลลพธ์�ไวิ� มู�ผ่ลต์%อแฟลก AF, CF, OF, PF, SF และ ZF ใช้�ในการต์รวิจสอบคั%าแฟลก เพ� อต์ดส�นใจในการยั�ายั
คั$าส งการท$างานไป็ยังจ7ดต์%าง ๆ
38
CMP : Format [label:] CMP destination, source
[label:] CMP register, register [label:] CMP register, memory [label:] CMP register, immediate [label:] CMP memory, register [label:] CMP memory, immediate
39
CMP : Example CMP AX , BX CMP CL, count CMP CX, 0 CMP number, AL CMP empty, 0
40
CMP : Unsigned
Unsigned Operands Condition OF SF ZF CFSource < Destinationx x 0 0Source = Destinationx x 1 0Source > Destinationx x 0 1
41
CMP : Signed
Signed Operands Condition OF SF ZF CFSource < Destination0/1 0 0 xSource = Destination0 0 1 xSource > Destination0/1 1 0 x
42
INC (increment) เพ� มูคั%าให�กบร�จ�สเต์อร�/หน%วิยัคัวิามูจ$า 1 คั%า ร�ป็แบบ
[label:] INC register/memory Example
INC CX INC AL INC byte INC word
43
DEC (decrement) ลดคั%าในร�จ�สเต์อร�/หน%วิยัคัวิามูจ$า 1 คั%า ร�ป็แบบ
[label:] DEC register/memory Example
DEC CX DEC AL DEC byte DEC word
44
NEG (negate) เป็�นคั$าส งในการหาคั%า 2 ’s Complement ร�ป็แบบ
[label:] NEG register/memory Example
NEG CC NEG BX NEG byte NEG word
45
การแป็ลง operator =
B = A MOV AX, A MOV B, AX
var1 = var2 MOV AX, var2 MOV var1, AX
46
การแป็ลง operator +
X = Y + Z MOV AX, Y ADD AX, Z MOV X, AX
47
การแป็ลง operator -
X = Y - Z MOV AX, Y SUB AX, Z MOV X, AX
48
การแป็ลง operator *
X = Y * Z MOV AL, Y MUL Z MOV X, AX
49
การแป็ลง operator div (unsigned)
X = Y div Z MOV AX, Y MOV DX, 0 DIV Z MOV X, AX
50
การแป็ลง operator div (signed)
X = Y div Z MOV AX, Y CWD IDIV Z MOV X, AX
51
การแป็ลง operator mod (unsigned)
X = Y mod Z MOV AX, Y MOV DX, 0 DIV Z MOV X, DX
52
Example Temp1 = A + B Temp2 = Y + Z W = Temp1 * Temp2
53
Assembly Code 1 MOV AX, A ADD AX, B MOV Temp1, AX ; Temp1 = A + B MOV AX, Y ADD AX, Z MOV Temp2, AX ; Temp2 = Y + Z MOV AX, Temp1 IMUL Temp2 MOV W, AX ; W = Temp1 * Temp2
54
Assembly Code 2 MOV AX, A ADD AX, B ; AX = A + B MOV BX, Y ADD BX, Z ; BX = Y + Z IMULBX ; AX = AX * BX MOV W, AX ; W = AX