You are on page 1of 67

หน่วยที่ 3 คำสั่งของไมโคร

คอนโทรเลอร์
3.2 กลุ่มคำสั่งของไมโครคอน
โทรเลอร์

3.2.1 ชุดคำสั่งทางคณิต
ศาสตร์และลอจิก
2
ตารางที่ 3.11 ชุดคำสั่งทางคณิตศาสตร์
และลอจิก
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ADD Rd, Rr Add without Rd ← Rd + Rr Z, C, N, V, 1
Carry H
ADC Rd, Rr Add with Carry Rd ← Rd + Rr Z, C, N, V, 1
+C H
MUL Rd, Rr Multiply R1, R0 ← Rd × C 2
Unsigned Rr
SUB Rd, Rr Subtract without Rd ← Rd – Rr Z, C, N, V, 1
Carry H
3
ตารางที่ 3.11 ชุดคำสั่งทางคณิต
ศาสตร์และลอจิก
Mnemon Operan (ต่อ)
Description Operation Flags #Clo
ics ds ck
Note
OR Rd, Rr Logical OR Rd ← Rd v Rr Z, N, V 1
EOR Rd, Rr Exclusive OR Rd ← Rd ⊕ Rr Z, N, V 1
COM Rd One’s Rd ← $FF – Rd Z, C, N, V 1
Complement
NEG Rd Two’s Rd ← $00 – Rd Z, C, N, 1
Complement V, H
INC Rd Increment Rd ← Rd + 1 Z, N, V 1
DEC Rd Decrement Rd ← Rd – 1 Z, N, V 1
4
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ADD Rd, Rr Add without Rd ← Rd + Rr Z, C, N, V, 1
SREG Carry H
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
00
R1 01
R1 05
ADD R2,R3 R2 02
R2  02 + 03 R2
R3 02
03
R2 = 05 :R3 :03
R31 1F
: : 5
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ADC Rd, Rr Add with Carry Rd ← Rd + Rr Z, C, N, V, 1
SREG +C H
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 10 R0
R0 00
00
R1 01
R1 01
ADC R2,R3 R2 02
R2  02 + 03 + 01 R2
R3 06
03
R2 = 06 :R3 :03
R31 1F
: : 6
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
MUL Rd, Rr Multiply R1, R0 ← Rd × C 2
SREG Unsigned Rr
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
06
R1 01
R1 00
MUL R2,R3 R2 02
R1,R0  02 x 03 R2
R3 02
03
R0 = 06 :R3 :03
R1 = 00 R31 1F
: : 7
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
SUB Rd, Rr Subtract without Rd ← Rd – Rr Z, C, N, V, 1
SREG Carry H
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
00
R1 01
R1
R2 01
02
SUB R3,R2
R3  03 - 02 R2
R3 02
03
R3 = 01 :R3 :01
R31 1F
: : 8
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
SBC Rd, Rr Subtract with Rd ← Rd – Rr Z, C, N, V, 1
SREG Carry –C H
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 10 R0
R0 00
00
R1 01
R1
R2 01
02
SBC R2,R3
R2  02 - 03 - 01 R2
R3 00
03
R2 = 00 :R3 :03
R31 1F
: : 9
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
AND Rd, Rr Logical AND Rd ← Rd Rr Z, N, V 1
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
00
R1 01
R1
R2 01
02
AND R3,R2
R2
R3 02
03
R3 0 0 0 0 0 0 1 1
:R3 :02
R2 0 0 0 0 0 0 1 0
R31 1F
R3 0 0 0 0 0 0 1 0 : : 10
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
OR Rd, Rr Logical OR Rd ← Rd v Rr Z, N, V 1
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
00
R1 01
R1
R2 01
02
OR R3,R2
R2
R3 02
03
R3 0 0 0 0 0 0 1 1
:R3 :03
R2 0 0 0 0 0 0 1 0
R31 1F
R3 0 0 0 0 0 0 1 1 : : 11
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
EOR Rd, Rr Exclusive OR Rd ← Rd ⊕ Rr Z, N, V 1
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
00
R1 01
R1 01
EOR R3,R2 R2 02
R2
R3 02
03
R3 0 0 0 0 0 0 1 1
R2 0 0 0 0 0 0 1 0 :R3 :01
R31 1F
R3 0 0 0 0 0 0 0 1 : : 12
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
COM Rd One’s Rd ← $1F – Z, C, N, V 1
SREG Complement Rd
I T H S V N Z C Rd or Rr value
0 0 0 1
0 0 1
0 0 01 R0
R0 00
00
R1 01
R1 FE
COM R1 R2 02
R2
R3 02
03
R1 0 0 0 0 0 0 0 1
R1 1 1 1 1 1 1 1 0 :R3 :03
R31 1F
: : 13
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
NEG Rd Two’s Rd ← $00 – Rd Z, C, N, V, 1
SREG Complement H
I T H S V N Z C Rd or Rr value
0 0 01 1
0 0 1
0 0 01 R0
R0 00
00
R1 01
R1 1F
NEG R1 R2 02
R2
R3 02
03
R1 0 0 0 0 0 0 0 1
R1 1 1 1 1 1 1 1 1 :R3 :03
R31 1F
: : 14
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
NEG Rd Two’s Rd ← $00 – Rd Z, C, N, V, 1
SREG Complement H
I T H S V N Z C Rd or Rr value
0 0 01 1
0 0 1
0 0 01 R0
R0 00
00
R1 01
R1 1F
NEG R1 R2 02
R2
R3 02
03
R1 0 0 0 0 0 0 0 1
R1 1 1 1 1 1 1 1 1 :R3 :03
R31 1F
: : 15
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
INC Rd Increment Rd ← Rd + 1 Z, N, V 1
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
00
R1 01
R1 02
INC R1 R2 02
R2
R3 02
03
R1 0 0 0 0 0 0 0 1
R1 0 0 0 0 0 0 1 0 :R3 :03
R31 1F
: : 16
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
DEC Rd Decrement Rd ← Rd – 1 Z, N, V 1
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
00
R1 01
R1 00
DEC R1 R2 02
R2
R3 02
03
R1 0 0 0 0 0 0 0 1
R1 0 0 0 0 0 0 0 0 :R3 :03
R31 1F
: : 17
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
CLR Rd Clear Register Rd ← Rd ⊕ Rd Z, N, V 1
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 01 0 R0
R0 00
00
R1 01
R1 01
CLR R3 R2 02
R2
R3 02
03
R1 0 0 0 0 0 0 1 1
R1 0 0 0 0 0 0 0 0 :R3 :00
R31 1F
: : 18
คำสั่งใดบ้างที่อยู่ในชุดคำสั่งทาง
คณิตศาสตร์และลอจิกที่มีแครี่
เกี่ยวข้อง
ADC, SBC

19
คำสั่ง EOR Rd, Rr ทำหน้าที่
อย่างไร
Exclusive OR Rd,Rr และเก็บค่าใน Rd

20
ตารางที่ 3.12 ชุดคำสั่งเคลื่อนย้ายข้อมูล
Mnemoni Operan Description Operation Flags #Clo
cs ds ck
Note
MOV Rd, Rr Copy Rd ← Rr None 1
Register
LDI Rd, K Load Rd ← K None 1
Immediate
LD Rd, X Load Rd ← (X) None 2
Indirect
LD Rd, X+ Load Rd ← (X), X ← X None 2
Indirect and +1 21
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
MOV Rd, Rr Copy Register Rd ← Rr None 1
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
03
R1 01
R1 01
MOV R0,R3 R2 02
R2
R3 02
03
R0 0 0 0 0 0 0 0 0
R3 0 0 0 0 0 0 1 1 :R3 :03
R31 1F
R0 0 0 0 0 0 0 1 1 : : 22
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
LDI Rd, K Load Rd ← K None 1
SREG Immediate
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
03
R1 01
R1 01
LDI R0,0x03 R2 02
R2
R3 02
03
R0 0 0 0 0 0 0 0 0 :R3 :03
R31 1F
R0 0 0 0 0 0 0 1 1 : : 23
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
LD Rd, X Load Indirect Rd ← (X) None 2
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
FD
R1 01
R1 01
LD R0,X R2 02
X R2
R3 02
03
:R3 :03
$00 $03
R31 1F
1F FE FD FC : : 24
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
LD Rd, X+ Load Indirect Rd ← (X), X ← None 2
and Post- X+1
SREG Increment
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
FD
R1 01
LD R0,X+ X R1
R2
01
02
R2
R3 02
03
$00 $03
:R3 :03
1F FE FD FC R31 1F25
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
LD Rd, -X Load Indirect X ← X – 1, Rd None 2
and Pre- ← (X)
SREG Decrement
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0
R0 00
FE
R1 01
LD R0,-X X R1
R2
01
02
R2
R3 02
03
$00 $03
:R3 :03
1F FE FD FC R31 1F26
ตารางที่ 3.12 ชุดคำสั่งเคลื่อนย้ายข้อมูล
(ต่อ) Operan Description
Mnemoni Operation Flags #Clo
cs ds ck
Note
LD Rd, Y Load Indirect Rd ← (Y) None 2
LD Rd, Y+ Load Indirect Rd ← (Y), Y ← None 2
and Post- Y+1
Increment
LD Rd, -Y Load Indirect Y ← Y – 1, Rd None 2
and Pre- ← (Y)
Decrement
LD Rd, Z Load Indirect Rd ← (Z) None 272
ตารางที่ 3.12 ชุดคำสั่งเคลื่อนย้ายข้อมูล
(ต่อ) Operan Description
Mnemoni Operation Flags #Clo
cs ds ck
Note
LD Rd, - Z Load Indirect Z ← Z – 1, Rd None 2
and Pre- ← (Z)
Decrement
ST X, Rr Store Indirect (X) ← Rr None 2
ST X+, Rr Store Indirect (X) ← Rr, X ← None 2
and Post- X+1
Increment
ST -X, Rr Store Indirect X ← X – 1, (X) None 282
ตารางที่ 3.12 ชุดคำสั่งเคลื่อนย้ายข้อมูล
(ต่อ) Operan Description
Mnemoni Operation Flags #Clo
cs ds ck
Note
ST Y, Rr Store Indirect (Y) ← Rr None 2
ST Y+, Rr Store Indirect (Y) ← Rr, Y ← Y None 2
and Post- +1
Increment
ST -Y, Rr Store Indirect Y ← Y – 1, (Y) ← None 2
and Pre- Rr
Decrement
ST Z, Rr Store Indirect (Z) ← Rr None 292
ตารางที่ 3.12 ชุดคำสั่งเคลื่อนย้ายข้อมูล
(ต่อ) Operan Description
Mnemoni Operation Flags #Clo
cs ds ck
Note
ST Z+, Rr Store Indirect (Z) ← Rr, Z ← Z None 2
and Post- +1
Increment
ST -Z, Rr Store Indirect Z ← Z – 1, (Z) ← None 2
and Pre- Rr
Decrement
LPM None Load R0 ← (Z) None 3
Program 30
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ST X, Rr Store Indirect (X) ← Rr None 2

SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0 00

ST X,R3 X R1 01
R2 02
$00 $03

1F FE FD
03 FC R3 03
31
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ST X+, Rr Store Indirect (X) ← Rr, X ← X None 2
and Post- +1
SREG Increment
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0 00

ST X+,R3 X R1 01
R2 02
$00 $03

1F FE FD
03 FC R3 03
32
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ST -X, Rr Store Indirect X ← X – 1, (X) None 2
and Pre- ← Rr
SREG Decrement
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0 00

ST -X,R3 X R1 01
R2 02
$00 $03

03 R3 03
1F FE FD FC 33
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
LPM Load Program R0 ← (Z) None 3
Memory
SREG
I T H S V N Z C Rd
Rd or
or Rr
Rr value
value
0 0 0 0 0 0 0 0 R0 00
R0 FD
R1 01
LPM
R1 01
Z R2 02
R2
R3 02
03
$00 $03 : :
R3 03
1F FE FD FC R31 1F34
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
IN Rd, P In Port Rd ← P None 1
SREG
I T H S V N Z C Rd or Rr
Rd or Rr value
value
0 0 0 0 0 0 0 0 R0 00
R0 00
R1 01
IN R3,PINC R1
R2 01
02
R2
R3 02
03
PINB PINC PIND : :
R3 01
R31 1F35
0 1 0 : :
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
OUT P, Rr Out Port P ← Rr None 1
SREG
I T H S V N Z C Rd or Rr value
0 0 0 0 0 0 0 0 R0 00
R1 01
IN PINC,R0 R2 02
R3 03
: :
PINB PINC PIND
R31 1F
0 0
1 0 36
ตารางที่ 3.12 ชุดคำสั่งเคลื่อนย้ายข้อมูล
(ต่อ) Operan Description
Mnemoni Operation Flags #Clo
cs ds ck
Note
PUSH Rr Push Register STACK ← Rr None 2
on Stack
POP Rd Pop Register Rd ← STACK None 2
from Stack

37
คำสั่ง MOV Rd. Rr มีลักษณะการ
ทำงานอย่างไร
เก็บค่าจาก Rr ไว้ใน Rd

38
คำสั่งใดเป็ นการนำค่าออกจาก
STACK
POP Rd

39
ตารางที่ 3.13 ชุดคำสั่งควบคุมการทำงานของ
CPU Operan Descriptio
Mnemoni Operation Flags #Clock
cs ds n Note
LSL Rd Logical Rd(n+1) ← 1
Shift Left Rd(n),Rd(0) ← Z, C,
0,C ← Rd(7) N, V, H
LSR Rd Logical Rd(n) ← Z, C, 1
Shift Right Rd(n+1),Rd(7) ← N, V
0,C ← Rd(0)
ROL Rd Rotate Rd(0) ← 1
Left C,Rd(n+1) ←
Through Rd(n),C ← Rd(7) Z, C, 40
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
LSL Rd Logical Shift Rd(n+1) ← Z, C, N, V, 1
SREG Left Rd(n),Rd(0) ← 0,C H
← Rd(7) Rd or Rr value
I T H S V N Z C
R0 00
0 0 0 0 0 0 0 0
R1 01
LSL R31 R2 02
R31(7) R31(R6) R31(5) R31(4) R31(3) R31(2) R31(1) R31(0) C Flags
R3 03
0 0 0 1 1 1 1 1 0
: :
0 0 1 1 1 1 1 0 0 R31 1F
41
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
LSL
LSR Rd
Rd Logical
Logical Shift
Shift Rd(n+1)
Rd(n) ← ← Z,
Z, C,
C, N,
N, V,V 11
SREG Left
Right Rd(n),Rd(0)
Rd(n+1),Rd(7) ← ←0,C H

0,C Rd(7)
← Rd(0) Rd or Rr value
I T H S V N Z C
R0 00
0 0 0 0 0 0 0 0
R1 01
LSL R31 R2
R2 02
02
R31(7) R31(R6) R31(5) R31(4) R31(3) R31(2) R31(1) R31(0) C Flags
R3
R3 03
03
0 0 0 1 1 1 1 1 0
:: ::
0 0 0
1 0
1 1
1 1 1 0
1 0
1 R31 1F
R31 1F42
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ROL Rd Rotate Left Rd(0) ← 1
SREG Through C,Rd(n+1) ← Z, C, N, V,
Carry Rd(n),C ← Rd(7) RdHor Rr value
I T H S V N Z C
R0 00
0 0 0 0 0 0 0 0
R1 01
ROL R31 R2 02
R31(7) R31(R6) R31(5) R31(4) R31(3) R31(2) R31(1) R31(0) C Flags
R3 03
0 0 0 1 1 1 1 1 0
: :
0 0 1 1 1 1 1 0 0 R31 1F
43
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ROR Rd Rotate Right Rd(7) ← C,Rd(n) Z, C, N, V 1
SREG Through ← Rd(n+1),C ←
Carry Rd(0) Rd or Rr value
I T H S V N Z C
R0 00
0 0 0 0 0 0 0 0
R1 01
ROL R31 R2 02
R31(7) R31(R6) R31(5) R31(4) R31(3) R31(2) R31(1) R31(0) C Flags
R3 03
0 0 0 1 1 1 1 1 0
: :
0 0 0 0 1 1 1 1 1 R31 1F
44
ตารางที่ 3.13 ชุดคำสั่งควบคุมการทำงานของ
CPU (ต่อ)
Mnemoni Operan Descriptio Operation Flags #Clock
cs ds n Note
ASR Rd Arithmetic Rd(n) ← Rd(n+1), Z, C, 1
Shift Right n=0...6 N, V
SWAP Rd Swap Rd(3..0) ↔ None 1
Nibbles Rd(7..4)
SEC Set Carry C←1 C 1
CLC Clear C←0 C 1
Carry
SEN Set N←1 N 1
Negative 45
ตารางที่ 3.13 ชุดคำสั่งควบคุมการทำงานของ
CPU (ต่อ)
Mnemoni Operan Description Operation Flags #Clock
cs ds Note
CLN Clear Negative N←0 N 1
Flag
SEZ Set Zero Flag Z←1 Z 1
CLZ Clear Zero Flag Z←0 Z 1
SEI Global Interrupt I←1 I 1
Enable
CLI Global Interrupt I←0 I 1
Disable
SES Set Signed Test S←1 S 1
46
ตารางที่ 3.13 ชุดคำสั่งควบคุมการทำงานของ
CPU (ต่อ)
Mnemoni Operan Description Operation Flags #Clock
cs ds Note
SEV Set Two’s V←1 V 1
Complement
Overflow
CLV Clear Two’s V←0 V 1
Complement
Overflow
SET Set T in SREG T←1 T 1
CLT Clear T in SREG T←0 T 1
47
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
ASR Rd Arithmetic Rd(n) ← Rd(n+1), Z, C, N, V 1
SREG Shift Right n=0...6
Rd or Rr value
I T H S V N Z C
R0 00
0 0 0 0 0 0 0 0
R1 01
ASR R31 R2 02
R31(7) R31(R6) R31(5) R31(4) R31(3) R31(2) R31(1) R31(0) C Flags
R3 03
0 0 0 1 1 1 1 1 0
: :
0 0 0 0 1 1 1 1 0 R31 1F
48
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
SWAP Rd Swap Rd(3..0) ↔ None 1
SREG Nibbles Rd(7..4)
Rd or Rr value
I T H S V N Z C
R0 00
0 0 0 0 0 0 0 0
R1 01
ASR R31 R2 02
R31(7) R31(R6) R31(5) R31(4) R31(3) R31(2) R31(1) R31(0) C Flags
R3 03
0 0 0 0 1 1 1 1 0
: :
1 1 1 1 0 0 0 0 0 R31 1F
49
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
SEC
SREG Set Carry C←1 C 1
I T H S V N Z C
0 0 0 0 0 0 0 1
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
CLC
SREG Clear Carry C ← 0 C 1
I T H S V N Z C
0 0 0 0 0 0 0 0 50
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
SEN
SREG Set Negative N←1 N 1
Flag
I T H S V N Z C
0 0 0 0 0 1 0 0
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
CLN
SREG Clear Negative N ← 0 N 1
I T H Flag
S V N Z C
0 0 0 0 0 0 0 0 51
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
SEZ
SREG Set Zero Flag Z←1 Z 1
I T H S V N Z C
0 0 0 0 0 0 1 0
Mnemon Operan Description Operation Flags #Clo
ics ds ck
Note
CLZ
SREG Clear Zero Flag Z ← 0 Z 1
I T H S V N Z C
0 0 0 0 0 0 0 0 52
ตารางที่ 3.13 ชุดคำสั่งควบคุมการทำงานของ
CPU (ต่อ)
Mnemoni Operan Description Operation Flags #Clock
cs ds Note
SEH Set Half Carry H ←1 H 1
Flag in SREG
CLH Clear Half Carry H←0 H 1
Flag in SREG
NOP No Operation None 1
SLEEP Sleep None 1
WDR Watchdog Reset None 1

53
คำสั่งให้ Logical Shift Left มี
ลักษณะการทำงานอย่างไร
ให้บิตภายใน Rd มีการเปลี่ยนตำแหน่งเพิ่มขึ้น 1
ตำแหน่ง โดยตำแหน่งที่ 0 จะมีค่าเป็ น 0 และไม่
เก็บตำแหน่งของตัวที่ 7 ไว้ใน carry flag

54
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni Operan Description Operation Flags #Cloc
cs ds k
Note
RJMP k Relative Jump PC ← PC + None 2
k+1
IJMP Indirect Jump PC ← Z None 2
to (Z)
JMP k Jump PC ← k None 3
RCALL k Relative Call PC ← PC + None 3
Subroutine k+1
ICALL Indirect Call to PC←Z None 3
55
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni (ต่อ) Description Operation Flags #Cloc
Operan
cs ds k
Note
RET Subroutine PC ← None 4
Return STACK
RETI Interrupt PC ← I 4
Return STACK
CPSE Rd,Rr Compare, Skip if (Rd = Rr) None 1/2/3
if Equal PC ← PC +
2 or 3
CP Rd,Rr Compare Rd – Rr Z, C, N, 1
56
_start: _start:
jmp _Print; jmp _Print;

_start_label: _Print:
rjmp _Exit; rjmp _start_label;

_Exit: _start_label:
ret; rjmp _Exit;

_Print: _Exit:
;print stuff goes here ; exit stuff goes here
rjmp _start_label; ret;

ตัวอย่างคำสั่งการ JMP ลำดับขั้นการทำงานของตัวอย่างคำสั่งการ JMP

57
_start: _start:
call _Print; call _Print;

_start_label: _Print:
rcall _Exit; rcall _start_label;

_Exit: _start_label:
ret; rcall _Exit;

_Print: _Exit:
;print stuff goes here ; exit stuff goes here
rcall _start_label; ret;

ตัวอย่างคำสั่งการ CALL ลำดับขั้นการทำงานของตัวอย่างคำสั่งการ CALL

58
JMP VS CALL

59
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni (ต่อ) Description
Operan Operation Flags #Cloc
cs ds k
Note
CPI Rd,K Compare with Rd – K Z, C, 1
Immediate N, V,
H
SBRC Rr, b Skip if Bit in if (Rr(b)=0) PC None 1/2/3
Register ← PC + 2 or 3
Cleared
SBRS Rr, b Skip if Bit in if (Rr(b)=1) PC None 1/2/3
Register Set ← PC + 2 or 3
60
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni (ต่อ) Description
Operan Operation Flags #Cloc
cs ds k
Note
SBIS P, b Skip if Bit inif(I/O(P,b)=1) PC None 1/2/3
I/O Register ← PC + 2 or 3
Set
BRBS s, k Branch if if (SREG(s) = 1) None 1/2
Status Flag Set then PC ← PC+k
+1
BRBC s, k Branch if if (SREG(s) = 0) None 1/2
Status Flag then PC ← PC+k
61
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni (ต่อ) Description
Operan Operation Flags #Cloc
cs ds k
Note
BREQ k Branch if if (Z = 1) then None 1/2
Equal PC ← PC + k +
1
BRNE k Branch if Not if (Z = 0) then None 1/2
Equal PC ← PC + k +
1
BRCS k Branch if if (C = 1) then None 1/2
Carry Set PC ← PC + k +
62
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni (ต่อ) Description
Operan Operation Flags #Cloc
cs ds k
Note
BRSH k Branch if if (C = 0) then None 1/2
Same or PC ← PC + k +
Higher 1
BRLO k Branch if if (C = 1) then None 1/2
Lower PC ← PC + k +
1
BRMI k Branch if if (N = 1) then None 1/2
Minus PC ← PC + k +
63
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni (ต่อ) Description
Operan Operation Flags #Cloc
cs ds k
Note
BRGE k Branch if if (N ⊕ V= 0) None 1/2
Greater or then PC ← PC+
Equal, Signed k+1
BRLT k Branch if Less if (N ⊕ V= 1) None 1/2
Than, Signed then PC ← PC +
k+1
BRHS k Branch if Half if (H = 1) then None 1/2
Carry Flag Set PC ← PC + k +
64
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni (ต่อ) Description
Operan Operation Flags #Cloc
cs ds k
Note
BRTS k Branch if T if (T = 1) then None 1/2
Flag Set PC ← PC + k +
1
BRTC k Branch if T if (T = 0) then None 1/2
Flag Cleared PC ← PC + k +
1
BRVS k Branch if if (V = 1) then None 1/2
Overflow Flag PC ← PC + k +
65
ตารางที่ 3.14 ชุดคำสั่งควบคุมการทำงานของ
โปรแกรม
Mnemoni (ต่อ) Description
Operan Operation Flags #Cloc
cs ds k
Note
BRIE k Branch if if (I = 1) then PC None 1/2
Interrupt ← PC + k + 1
Enabled
BRID k Branch if if (I = 0) then PC None 1/2
Interrupt ← PC + k + 1
Disabled

66
ความแตกต่างระหว่าง JMP และ
CALL คือ
JMP ไม่มีการส่งค่าคืน // CALL มีการส่งค่าคืน

JMP ค่าของตัวนับโปรแกรม (PC) ไม่ถูกโอนไป


ยัง stack
//
CALL ค่าของตัวนับโปรแกรม (PC) ถูกโอนไปยัง 67

You might also like