Documente Academic
Documente Profesional
Documente Cultură
Assembly Programming
Exception classification
Exception processing
Exception processing
Hardware-initiated interrupts
Interrupts
Vectored interrupts
Auto-vectored interrupts
Software-initiated interrupts
Outline
Programmers Model
Assembly Language Directives
Addressing Modes
Instruction Set
Motorola 68000
CISC processor
sixteen 32-bit registers
User/supervisor space
64-pin package
Clock 8MHz, 12.5 MHz
*Registers, Addressing
Modes, Instruction Set
NOTE: The 68000
architecture forms a
subset of the 68020s
architecture
(i.e., 68020 is
backward compatible)
NOTE:
Memory Organization
Figure 2.4
Long word address = Address of the high order 16 bits of the longword
Big-Endian The most significant unit is stored at the lowest address
5
PC Program
Counter:
Outcome of
ALU operation
32 bits, contains
the address of the
next instruction
to be executed
ADD.B D0,D1
78
DF
157
Figure 2.5
Carry
6
40
+70
78
+DF
B0
57
Carry
1011 0000
157
sign
C - set
int a;
char b;
a=(int)b;
X - extend
V - set
11111111 10110000
Outline
Programmers Model
Assembly Language Directives
Addressing Modes
Instruction Set
Development environment
Assembly program structure
Assembly directives
10
ASSEMBLER
SOURCE FILE
fname.x68
MACHINE CODE
OBJECT
LISTING FILE
LINKER/LOADER
COMPUTER
MEMORY
ASSEMBLY LANGUAGE:
Symbolic representation of the
native language of the computer
EQU
EQU
EQU
ORG
DS.B
$08
$01
$OD
$004000
64
LINE-BUF
*
* This procedure inputs a character and stores it in a buffer
ORG
$001000
Program origin
LEA
LINE-BUF,A2
A2 points to line buffer
NEXT
# indicates a
literal or
immediate value
(i.e. not an
address)
LABEL
FIELD
BSR
CMP.B
BEQ
CMP.B
BEQ
CMP.B
BEQ
MOVE.B
BRA
.
.
END
GET_DATA
#BACK_SP, D0
MOVE_LFT
#DELETE
CANCEL
#CAR-RET
EXIT
DO,(A2)+
NEXT
$ represents HEX
% represents BIN
$001000
INSTRUCTION
FIELD
COMMENT
FIELD
12
LABELS
INSTRUCTION
COMMENTS
Macroassembler
Assembler Directives
15
The DC Directive
ORG
First
DC.L
Date
DC.L
0A
42
001002
00
0A
001004
12
34
001006
41
70
001008
72
69
00100A
6C
20
00100C
38
20
00100E
31
39
001010
38
35
001012
00
00
001014
00
01
001016
00
00
001018
00
02
00101A
DC.B 10,66
DC.L $0A1234
DC.L 1,2
16
00001000
00001000
00001002
00001006
00001012
0A42
000A1234
417072696C20
382031393835
000000010000
0002
FIRST:
DATE:
DC define a constant
ORG
DC.B
DC.L
DC.B
$001000
10,66
$0A1234
April 8 1985
DC.L
1,2
NOTE: Assemblers
automatically align
word and longword
constants on a word
boundary
Decimal
$ - Hexadecimal
% - Binary
17
List1
Array4
Pointer
VOLTS
TABLE
DS.B
DS.B
DSLB
DS.W
DS.W
4
$80
16
1
256
Reserve
4
Reserve 128
Reserve 16
Reserve
1
Reserve 256
Number of elements
bytes of memory
bytes of memory
longwords (64 bytes)
word (2 bytes)
words
TABLE
POINTER1
POINTER2
VECTOR_1
INIT
SETUP1
SETUP2
ACIAC
RDRF
PIA
of the origin
ORG
DS.W
DS.L
DS.L
DS.L
DC.W
EQU
EQU
EQU
EQU
EQU
$001000
256
1
1
1
0,$FFFF
$03
$55
$008000
0
ACIAC+4
19
ENTRY
GET_DATA
$001000
256
1
1
1
0,$FFFF
$03
$55
$008000
0
ACIAC+4
ORG
$018000
LEA
ACIAC,A0 A0
MOVE.B #SETUP2,(A0)
BTST.B #RDRF,(A0)
BNE
GET_DATA
MOVE.B 2(A0),D0
END
$001000
001210 (free)
TABLE
POINTER1
POINTER2
VECTOR_1
INIT
SETUP1
SETUP2
ACIAC
RDRF
PIA
ORG
DS.W
DS.L
DS.L
DS.L
DC.W
EQU
EQU
EQU
EQU
EQU
20
21
Outline
Programmers Model
Assembly Language Directives
Addressing Modes
Instruction Set
22
Addressing Modes
23
Meaning
Location (i.e., address) M in the main store
Address register i (i = 0 to 7)
Data register i (i = 0 to 7)
General register i
The contents of memory location M
The contents of register X
Bits 0 to 7 inclusive of register Di
Enclose a parameter required by an expression
The effective address of an operand
The contents of a memory location specified by ea
An 8-bit signed offset (-128 to 127)
A 16-bit signed offset (-32K to 32K -1)
A 32-bit signed offset (-2G to 2G- 1)
ADD <source>,<destination>
[destination] [source] + [destination]
MOVE <source>,<destination>
[destination] [source]
25
D0,D3
A0,D3
D2,D0
D3,D4
26
MOVE.B D0,D1
The instruction
indicates the data
register
The source operand
is data register D0
25
D
D0
D
D1
MOVE.B D0,D1
25
D
D0
D
D1
28
MOVE.B D0,D1
25
D
D0
25
D
D1
Immediate Addressing
Immediate Addressing
MOVE.B #4,D0
D
D0
32
Immediate Addressing
MOVE.B #4,D0
D
D0
33
Immediate Addressing
MOVE.B #4,D0
D
D0
34
Immediate Addressing
MOVE.B #4,D0
D
D0
35
36
Memory
M OV E . B 2 0 , D 0
20
42
D0
38
Memory
M OV E . B 2 0 , D 0
20
42
D0
Memory
M OV E . B 2 0 , D 0
20
42
42
D0
An Example
D0 [M(1001)] + D0
A=Y+A
Instruction:
1000
1002
ADD Y, D0
1101
000
Instruction
ADD
Reg.
D0
00
111
001
Size
Source Destination
BYTE addressing addressing
EA=next
2 words
Effective Address :
0000
Register D
1001
41
An Example
Assembler:
PC
ADD.B Y, D0
D 0 3 9
0 0 0 0
Instructions
ADD Y, D0
1 0 0 1
Y (DATA)
1000
1002
Instruction :
D039
Effective Address : 0 0 0 0
1001
42
Summary of Fundamental
Addressing Modes
Y
Z
ORG
MOVE.B
ADD
MOVE.B
$400
Y,D0
#4,D0
D0,Z
Start of code
ORG
DC.B
DS.B
$600
27
1
43
1
2
3
4
5
6
7
8
9
10
00000400
00000400
00000406
0000040A
00000410
103900000600
06000018
13C000000601
4E722700
ORG
MOVE.B
ADD.B
MOVE.B
STOP
$400
Y,D0
#24,D0
D0,Z
#$2700
ORG
DC.B
DS.B
END
$600
27
1
$400
*
00000600
00000600 1B
00000601 00000001
00000400
Y:
Z:
44
Memory
(mnemonic form)
000400 103900000600
MOVE.B Y,D0
000406 06000018
ADD.B #24,D0
0 0 0 4 0 A 1 3 C0 0 0 0 0 0 6 0 1
MOVE.B D0,Z
0 0 0 4 1 0 4 E7 2 2 7 0 0
STOP #$2700
000600 1B
000601 1
27
Y is a variable
accessed via the
direct address
000600
Z is a variable
accessed via the
direct address
000601
This is a literal
operand stored as
part of the instruction
45
Summary
A0
MOVE.B (A0),D0
1000
1000
D0
MOVE.B (A0),D0
A0
1000
1000
57
D0
MOVE.B (A0),D0
A0
1000
1000
57
D0
A0
MOVE.B (A0),D0
1000
1000
57
D0
51
Auto-incrementing
52
Auto-incrementing
Memory
A0
MOVE.B (A0)+,D0
1000
1000
57
D0
53
Auto-incrementing
Memory
MOVE.B (A0)+,D0
A0
1000
1000
57
D0
1001
Auto-incrementing
Memory
A0
MOVE.B (A0)+,D0
1001
1000
1001
D0
43
Loop
MOVE.B
LEA
CLR.B
ADD.B
SUB.B
BNE
STOP
*
Table DC.B
#5,D0
Table,A0
D1
(A0)+,D1
#1,D0
Loop
#$2700
1,4,2,6,5
X=0
N=0
Z=0
V=0
C=0
>TR
PC=000404 SR=2000 SS=00A00000 US=00000000
A0=00000000 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=00A00000
D0=00000005 D1=00000000 D2=00000000 D3=00000000
D4=00000000 D5=00000000 D6=00000000 D7=00000000
---------->LEA.L
$0416,A0
X=0
N=0
Z=0
V=0
C=0
Trace>
PC=00040A SR=2000 SS=00A00000 US=00000000
A0=00000416 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=00A00000
D0=00000005 D1=00000000 D2=00000000 D3=00000000
D4=00000000 D5=00000000 D6=00000000 D7=00000000
---------->CLR.B
D1
X=0
N=0
Z=0
V=0
C=0
D0 has been
loaded with 5
This instruction
loads A0 with the
value $0416
A0 contains $0416
57
X=0
N=0
Z=1
V=0
C=0
Trace>
PC=00040E SR=2000 SS=00A00000 US=00000000
A0=00000417 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=00A00000
D0=00000005 D1=00000001 D2=00000000 D3=00000000
D4=00000000 D5=00000000 D6=00000000 D7=00000000
---------->SUBQ.B
#$01,D0
X=0
N=0
Z=0
V=0
C=0
Trace>
PC=000410 SR=2000 SS=00A00000 US=00000000
A0=00000417 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=00A00000
D0=00000004 D1=00000001 D2=00000000 D3=00000000
D4=00000000 D5=00000000 D6=00000000 D7=00000000
---------->BNE.S
$040C
X=0
N=0
Z=0
V=0
C=0
58
X=0
N=0
Z=0
V=0
C=0
Trace>
PC=00040E SR=2000 SS=00A00000 US=00000000
A0=00000418 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=00A00000
D0=00000004 D1=00000005 D2=00000000 D3=00000000
D4=00000000 D5=00000000 D6=00000000 D7=00000000
---------->SUBQ.B
#$01,D0
X=0
N=0
Z=0
V=0
C=0
Trace>
PC=000410 SR=2000 SS=00A00000 US=00000000
A0=00000418 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=00A00000
D0=00000003 D1=00000005 D2=00000000 D3=00000000
D4=00000000 D5=00000000 D6=00000000 D7=00000000
---------->BNE.S
$040C
X=0
N=0
Z=0
V=0
C=0
59
Problem
Identify the source addressing mode used by each of the
following instructions.
ADD.B
(A5),(A4)
Address register indirect addressing. The address
of the source operand is in A5.
MOVE.B #12,D2
Literal addressing. The source operand is the
literal value 12.
ADD.W
TIME,D4
MOVE.B D6,D4
MOVE.B (A6)+,TEST
Address register indirect with post-incrementing.
The address of the source operand is in A6. The
contents of A6 are incremented after the instruction.
60
Problem
If you were translating the following fragment of
pseudocode into assembly language, what addressing
modes are you most likely to use?
SUM is a temporary variable. You can put it in a
register and use register direct addressing
SUM = 0
FOR J = 5 TO 19
SUM = SUM + X(J)*Y(J)
END FOR
61
62
d16(PC)
d16(PC)
RTL: ea=[PC]+d16
RTL: ea=[PC]+[Xn]+d16
MOVE.B
TABLE DC.B
DC.B
TABLE(PC),D2
Value1
Value2
63
Summary
Addressing Modes
64
Summary
Addressing Modes
65
Summary
Addressing Modes
d16(PC)
d16(PC)
RTL: ea=[PC]+d16
RTL: ea=[PC]+[Xn]+d16
MOVE.B
TABLE DC.B
DC.B
TABLE(PC),D2
Value1
Value2
66
Outline
Programmers Model
Assembly Language Directives
Addressing Modes
Instruction Set
67
Data movement
Arithmetic operations
Logical operations
Shift operations
Bit Manipulation
Program Control
Important NOTE:
The contents of the
CC byte of the SR
are updated after
the execution of an
instruction. Refer
to Table 2.2
68
MOVE/MOVEA
MOVE to CCR
MOVE <ea>,CCR word instruction
MOVE to/from SR
MOVE <ea>,SR in supervisor mode only;
MOVE #$2700,SR sets the 68K in supervisor mode
MOVE USP
to/from User Stack Pointer
MOVE.L USP,A3
- transfer the USP to A3
MOVEQ
Move Quick(8b #value to 32b reg)
MOVEM
to/from multiple registers (W/L)
e.g.,
MOVEM.L D0-D5/A0-A5, -(A7)
MOVEM.L (A7)+,D0-D5/A0-A5
MOVEP
Move Peripheral
69
Assembly language
LEA $0010FFFF,A5
RTL
[A5] $0010FFFF
LEA $12(A0,D4.L),A5
vs.
LEA $1C(A3,D2),A5
ADD.W (A5),D0
70
NOTE:
The instruction takes 24
clock cycles to execute
71
An Example
68000 Registers
D0
01234567
D4
33449127
A0
00007020
A4
00010020
Status register 2700
D1
D5
A1
A5
89ABCDEF
AAAAAAAA
00007000
00FF789A
D2
D6
A2
A6
0001002D
ABCD0003
00007010
00010000
D3
D7
A3
A7
ABCD7FFF
55555555
00007030
00010010
007020
007021
007022
007023
007024
007025
007026
007027
007028
007029
00702A
00702B
00702C
00702D
00702E
00702F
007030
007031
007032
007033
007034
007035
007036
007037
007038
007039
00703A
00703B
00703C
00703D
00703E
00703F
5A
AD
99
92
79
33
97
14
79
E7
00
0A
88
18
82
79
23
17
46
9E
FC
FF
77
60
21
42
55
EA
61
81
C9
AA
010000
010001
010002
010003
010004
010005
010006
010007
010008
010009
01000A
01000B
01000C
01000D
01000E
01000F
010010
010011
010012
010013
010014
010015
010016
010017
010018
010019
01001A
01001B
01001C
01001D
01001E
01001F
DD
B2
00
15
76
19
92
26
17
14
E7
E8
19
92
19
54
45
99
15
43
25
76
89
17
81
17
4E
72
33
23
E1
CD
010020
010021
010022
010023
010024
010025
010026
010027
010028
010029
01002A
01002B
01002C
01002D
01002E
01002F
010030
010031
010032
010033
010034
010035
010036
010037
010038
010039
01003A
01003B
01003C
01003D
01003E
01003F
DC
25
15
17
29
39
49
2D
B2
62
81
21
45
18
31
D9
AA
77
78
AE
EA
34
25
17
15
14
17
F9
8A
0F
F2
E5
Main memory
007000
007001
007002
007003
007004
007005
007006
007007
007008
007009
00700A
00700B
00700C
00700D
00700E
00700F
007010
007011
007012
007013
007014
007015
007016
007017
007018
007019
00701A
00701B
00701C
00701D
00701E
00701F
AE
F2
32
77
89
90
1A
AE
EE
F1
F2
A4
AE
88
AA
E4
7E
8D
9C
C4
B2
12
39
90
00
89
14
01
3D
77
89
9A
72
An Example
What is the effect of applying each of the following 68000 instructions assuming the
initial condition shown before? Represent modified internal registers, memory
locations and conditions.
a) ORG
$9000
LEA
TABLE1(PC),A5
Assembly listing
1
00009000
ORG
2
00009000 4BFA0FFE LEA
$9000
TABLE1(PC),A5
current PC value
b) LEA
6(A0,D6.W),A2
A0
A2=$00007029
CC: NA
D6.W
73
DIVU <ea>,Dn
or
DIVS <ea>,Dn
32-bit longword in Dn is divided by the 16-bit word at <ea>
16-bit quotient is deposited in the lower-order word of Dn
The remainder is stored in the upper-order word of Dn
Low-order 16-bit word in Dn is multiplied by the 16-bit word at <ea>
32-bit product is deposited in Dn
ABCD Di,Dj
or
ABCD (Ai),-(Aj)
Add BCD with extend adds two packed BCD digits
together with X bit from the CCR
SBCD similar
[destination][destination]-[source]-[X]
NBCD <ea>
subtracts the specified operand from zero together
with X bit and forms the 10s complement of the
operand if X =0, or 9s complement if X =1
Logical Operations
Shift Operations
Logical Shift
79
Arithmetic Shift
80
Rotate
81
82
Initial Value
11101011
01111110
After
First Shift
11010110
11111100
CCR
XNZVC
11001
01010
After
Second Shift
10101100
11111000
CCR
XNZVC
11001
11011
ASR
ASR
11101011
01111110
11110101
00111111
11001
00000
11111010
00011111
11001
10001
LSL
LSL
11101011
01111110
11010110
11111100
11001
01000
10101100
11111000
11001
11001
LSR
LSR
11101011
01111110
01110101
00111111
10001
00000
00111010
00011111
10001
10001
ROL
ROL
11101011
01111110
11010111
11111100
?1001
?1000
10101111
11111001
?1001
?1001
ROR
ROR
11101011
01111110
11110101
00111111
?1001
?0000
11111010
10011111
?1001
?1001
83
Mode 1
ASL Dx,Dy
Shift Dy by Dx bits
Mode 2
ASL #<data>,Dy
Mode 3
ASL <ea>
2.
BTST #<data>,<ea>
Branch Instructions
Branch Conditionally
Branch Unconditionally
Test Condition, Decrement, and Branch
BRANCH CONDITIONALLY
Bcc <label>
BRANCH UNCONDITIONALLY
BRA <label>
or
JMP
(An)
JMP
d16(An)
JMP
d8(An,Xi)
JMP
Absolute_address
JMP
d16(PC)
JMP
d8(PC,Xi)
TEST CONDITION, DECREMENT, and BRANCH
DBcc Dn,<label>
(16 bit displacement only)
One of 14 values from Table 2.4, plus T, plus F
If test is TRUE, branch is NOT taken !
Stack Pointer
First-in-last-out
SP points to the element at the
top of the stack
Up to eight stacks
simultaneously
A7 used for subroutines
A7 automatically adjusted by 2
or 4 for L or W ops.
Push/pull implementation:
MOVE.W Dn,-(A7) <-PUSH
MOVE.W (A7)+,Dn <-PULL
SSP/USP
Figure 2.18
91
Subroutines
BRANCH TO SUBROUTINE
BSR <label>
[A7] [A7] - 4
M([A7])] [PC]
[PC] [PC] + d8
=
[PC] [M([A7])]
[A7] [A7] + 4
92
Subroutines, contd
BRANCH TO SUBROUTINE
000FFA
41F900004000
LEA
TABLE,
A0
001000
61000206
NextChr
BSR
GetChar
001004
10C0
MOVE.B
D0,(A0)
001006
0C00000D
CMP.B #$0D,D0
00100A
66F4
BNE
NextChr
001102
61000104
BSR
GetChr
001106
0C000051
CMP.B #Q,D0
00110A
67000EF4
BEQ
QUIT
001208
1239000080000
GetChr
MOVE.B
ACIAC,D0
BSR d8
Nested Subroutines
94
95
Sub2
Exit
.
.
BEQ
.
.
RTS
LEA
RTS
Exit
4(A7),A7
Miscellaneous Instructions
NOP: No Operation
RTS: Return from Subroutine
STOP:
STOP #n
Stop and load n into Status Register; n is 16-bit number;
Privileged instruction
CHK, RESET, RTE, TAS, TRAPV - later
97
LEA
*
LOOP
EXIT
TST.L (A0)
BEQ EXIT
MOVEA.L (A0),A0
BRA LOOP
LEA NEW,A1
MOVE.L A1,(A0)
CLR.L (A1)
LEA
*
LOOP
EXIT
HEAD,A0
TST.L (A0)
BEQ EXIT
MOVEA.L (A0),A0
BRA LOOP
LEA NEW,A1
MOVE.L A1,(A0)
CLR.L (A1)
LEA
*
LOOP
EXIT
HEAD,A0
TST.L (A0)
BEQ EXIT
MOVEA.L (A0),A0
BRA LOOP
LEA NEW,A1
MOVE.L A1,(A0)
CLR.L (A1)
101