Assembly language programming for the 68000
 9780130498274, 0130498270

Table of contents :
PREFACE vii

1 NUMBER SYSTEMS 1
1.1 Decimal-to-Binary Conversion, 1
1.2 Decimal-.to-Hexadecimal Conversion, 3
1.3 Binary-to-Decimal Conversion, 4
1.4 Hexadecimal-to-Decimal Conversion, 5
1.5 Hexadecimal-to-Binary Conversion, 6
1.6 Binary-to-Hexadecimal Conversion, 6
1.7 Binary and Hexadecimal Addition, 7
Exercises, 8




2 THE ORGANIZATION OF THE 68000 9
2.1 The Central Memory, 9
2.2 The Central Processor, 10
2.3 The Terminal and the Communication Chip, 12
2.4 The Line Clock, 14
Exercises, 14




3 REPRESENTA TlON OF NUMBERS AND CHARACTERS 15
3.1 2's Complement Representation, 15
3.2 Addition and Subtraction, 19
3.3 Character Representation, 20
3.4 Floating-Point Representation (Optional), 22
Exercises, 23


4 INSTRUCTIONS AND ADDRESSING MODES 25
4.1 The Execution Cycle, 25
4.2 Addressing Modes, 26
4.3 Single-Operand and Double-Operand Instructions, 32
4.4 No-Operand Instructions, 42
4.5 Machine Language, 42
4.6 On the Contents of a Computer Word, 45
Exercises, 46


5 ASSEMBL Y LANGUAGE PROGRAMMING 48
5.1 Assembly Language versus Machine Language, 48
5.2 Assembly Language Directives, 49
5.3 Assembly Language Program Format, 52
5.4 Example 1: Echo Keyboard Input to Screen, 53
5.5 Example 2: Multiple Echo, 56
5.6 Coding Hints, 58
Exercises, 61


6 STACKS AND SUBROUTINES 64
6.1 Stacks, 64
6.2 Example: Backward Echo, 66
6.3 Subroutines, 66
6.4 Subroutine Call and Return, 69
6.5 Argument Transmission, 70
6.6 Nested Subroutines, 75
6.7 Recursive Subroutines, 79
6.8 Example-Tower of Hanoi, 81
6.9 Coroutines, 86
Exercises, 87


7 ARITHMETIC OPERA TlONS 92
7.1 Carry and Overflow Under Addition, 92
7.2 Carry and Overflow Under Subtraction, 94
7.3 Double-Precision Arithmetic, 95
7.4 The TST and CMP Instructions, 97
7.5 More on Branch Instructions, 98
7.6 Shift Instructions, 103
7.7 Example: ASCII-to-Binary Conversion, 105
Exercises, 111

8 TRAPS AND INTERRUPTS 116
8.1 Traps, 116
8.2 Some Examples of Traps, 117
8.3 Program Traps, 119
8.4 Interrupts, 120
8.5 Why Use Interrupts?, 121
8.6 Priority Interrupts, 123
8.7 Timer Interrupts Using an MC68230 Parallel Interface and Timer (PI/T), 125
8.8 Example: Time Request, 126
Exercises, 130


9 ASSEMBLERS AND LINKAGE EDITORS 135
9.1 The Two-Pass Assembly Process, 135
9.2 Example of Assembler Listing, 138
9.3 Absolute and Relocatable Addresses, 138
9.4 The Linkage Editor, 140
9.5 Address Modification, 141
9.6 Global Symbols, 143
9.7 The Two-Pass Linkage Process, 143
9.8 Position-Independent Code, 145
Exercises, 146


10 ADVANCED ASSEMBL Y LANGUAGE TECHNIQUES 150
10.1 Macros, 150
10.2 Macro Definitions and Macro Calls, 152
10.3 Local Symbols, 158
10.4 Repeat Directives, 160
10.5 Conditional Assembly, 163
Exercises, 168

Appendix A 68000 Organization 172
Appendix B ASCII Character Set 174
Appendix C 68000 Addressing Modes 178
Appendix D 68000 Instructions 180
Appendix E 68000 Machine Language 215
Appendix F Notes on Programming Style 235
Appendix G Answers to Selected Exercises 238
INDEX 245

Citation preview

fOR REfERENCE aNt y

ASSEMBLY

NGUAGE

P G FOR THE-Arillwlf' GiOO IEdw((JJlf'd COIl'WOIlD AVilfotrneffe u..og((JJU'

(IfIIJ

Prentice-Hall International, Inc.

OL 5018173 4 .

111111111111111111111111111111111111111111

Library of Congress Cataloging-in-Publication Data

Gill, Arthur (date) Assembly language programming for the 68000. Includes index. 1. Motorola 68000 (Microprocessor)-Programming. 2. Assembler language (Computer program language) I. Corwin, Edward (date) . II. Logar, Antonette (date) . III. Title. QA 76.8.M6895G55 1987 005.265 ISBN 0-13-{)49827-{)

86-15118

This edition may be sold only in those countries to which it is consigned by Prentice-Hall International. It is not to be re-exported and it is not for sale in the U.S.A., Mexico or Canada.

To our parents Editorial/production supervision: Linda Zuk Manufacturing buyer: Ed O'Dougherty

© 1987 by Prentice-Hall, Inc. A division of Simon & Schuster Englewood Cliffs, New Jersey 07632

All rights reserved. No part of this book may be reproduced, in any form or by any means, without permission in writing from the publisher. Printed in the United States of America 10

ISBN

9

8

7

6

5

0-13-049827-0

4

3

025

Prentice-Hall International (UK) Limited, London Prentice-Hall of Australia Pty. Limited, Sydney Prentice-Hall Canada Inc., Toronto Prentice-Hall Hispanoamericana, S.A., Mexico Prentice-Hall of India Private Limited, New Delhi Prentice-Hall of Japan, Inc., Tokyo Prentice-Hall of Southeast Asia Pte. Ltd., Singapore Editora Prentice-Hall do Brasil, Ltda., Rio de Janeiro Prentice-Hall, Inc., Englewood Cliffs, New Jersey

CONTENTS

PREFACE 1

vii

NUMBER SYSTEMS 1 1.1 Decimal-to-Binary Conversion, 1 1.2 Decimal-.to-Hexadecimal Conversion, 3 1.3 Binary-to-Decimal Conversion, 4 1.4 Hexadecimal-to-Decimal Conversion, 5 1.5 Hexadecimal-to-Binary Conversion, 6 1.6 Binary-to-Hexadecimal Conversion, 6 1.7 Binary and Hexadecimal Addition, 7 Exercises, 8

2

THE ORGANIZATION OF THE 68000 9 2.1 The Central Memory, 9 2.2 The Central Processor, 10 2.3 The Terminal and the Communication Chip, 12 2.4 The Line Clock, 14 Exercises, 14

3

REPRESENTA TlON OF NUMBERS AND CHARACTERS 3.1 2's Complement Representation, 15 3.2 Addition and Subtraction, 19 3.3 Character Representation, 20 3.4 Floating-Point Representation (Optional), 22 Exercises, 23

15

iii

CONTENTS

iv

4

INSTRUCTIONS AND ADDRESSING MODES

25

4.1 The Execution Cycle, 25 4.2 Addressing Modes, 26 4.3 Single-Operand and Double-Operand Instructions, 32 4.4 No-Operand Instructions, 42 4.5 Machine Language, 42 4.6 On the Contents of a Computer Word, 45 Exercises, 46

5

ASSEMBL Y LANGUAGE PROGRAMMING

48

5.1 Assembly Language versus Machine Language, 48 5.2 Assembly Language Directives, 49 5.3 Assembly Language Program Format, 52 5.4 Example 1: Echo Keyboard Input to Screen, 53 5.5 Example 2: Multiple Echo, 56 5.6 Coding Hints, 58 Exercises, 61

6

64

STACKS AND SUBROUTINES 6.1 Stacks, 64 6.2 Example: Backward Echo, 66 6.3 Subroutines, 66 6.4 Subroutine Call and Return, 69 6.5 Argument Transmission, 70 6.6 Nested Subroutines, 75 6.7 Recursive Subroutines, 79 6.8 Example-Tower of Hanoi, 81 6.9 Coroutines, 86 Exercises, 87

7

ARITHMETIC OPERA TlONS

92

7.1 Carry and Overflow Under Addition, 92 7.2 Carry and Overflow Under Subtraction, 94 7.3 Double-Precision Arithmetic, 95 7.4 The TST and CMP Instructions, 97 7.5 More on Branch Instructions, 98 7.6 Shift Instructions, 103 7.7 Example: ASCII-to-Binary Conversion, 105 Exercises, 111

CONTENTS

8

v

TRAPS AND INTERRUPTS

116

8.1 Traps, 116 8.2 Some Examples of Traps, 117 8.3 Program Traps, 119 8.4 Interrupts, 120 8.5 Why Use Interrupts?, 121 8.6 Priority Interrupts, 123 8.7 Timer Interrupts Using an MC68230 Parallel Interface and Timer (PI/T), 125 8.8 Example: Time Request, 126 Exercises, 130

9

ASSEMBLERS AND LINKAGE EDITORS

135

9.1 The Two-Pass Assembly Process, 135 9.2 Example of Assembler Listing, 138 9.3 Absolute and Relocatable Addresses, 138 9.4 The Linkage Editor, 140 9.5 Address Modification, 141 9.6 Global Symbols, 143 9.7 The Two-Pass Linkage Process, 143 9.8 Position-Independent Code, 145 Exercises, 146

10

ADVANCED ASSEMBL Y LANGUAGE TECHNIQUES 10.1 Macros, 150 10.2 Macro Definitions and Macro Calls, 152 10.3 Local Symbols, 158 10.4 Repeat Directives, 160 10.5 Conditional Assembly, 163 Exercises, 168

Appendix A Appendix B Appendix C Appendix D Appendix E Appendix F Appendix G INDEX

68000 Organization 172 ASCII Character Set 174 178 68000 Addressing Modes 68000 Instructions 180 68000 Machine Language 215 Notes on Programming Style 235 238 Answers to Selected Exercises 245

150

PREfACE

The objective of this book is to familiarize the reader with the basic organization and operational features of the Motorola 68000 and to present assembly language techniques for this computer. It is not, per se, a general text on machine structures, and the authors do not attempt to provide a comprehensive treatment of available computer organizations and assemblers. However, to the extent that the concepts and methods governing the operation and programming of the 68000 are used in many other computers, the material in this book should provide the reader with good preparation for the operation and programming of other machines. Chapter 1 provides an outline of algorithms for converting numbers from one system (binary, hex, decimal) to another. The algorithms are not provided with proofs, and are intended to serve only as reference. Chapter 2 describes the organizational structure of the 68000 (the central memory, central processor, and peripheral devices). Chapter 3 explains how numbers (integer and floating-point), characters, and strings are represented in the 68000. Chapter 4 describes the 68000's instruction formats and addressing modes. And Chapter 5 introduces the reader to assembly language programming. The first five chapters should provide the reader with sufficient background to write simple programs for the 68000. The remaining chapters delve deeper into operational details and describe additional techniques. Chapter 6 introduces stacks and subroutines (including recursion). Chapter 7 looks more closely at the 68000's arithmetic (including double-precision) and other operations, such as the test, comparison, branch, and shift operations. Chapter 8 explains the trap and interrupt mechanisms. Chapter 9 describes the workings of assemblers and linkage editors and the notion of relocation. (No particular assembler or linkage editor is used, and the concepts discussed are quite general.) Chapter 10 introduces some advanced assembler facilities, such as macros, repeated assembly, and conditional assembly. The book ends with a number of appendixes, which consist of reference lists and tables (character codes, summary of addressing modes, lists of instructions, and so forth). An appendix on programming style is also included, which should be carefully read by the beginner. Each chapter concludes with a set of exercises that serve to illustrate and sometimes complement the material in the text. The reader is encouraged to solve the problems and vii

viii

PREFACE

run the programs included in these exercises. True assimilation of the material in this book can come about only through practice-by the actual writing and execution of programs. The only prerequisite to this book is some experience with high-level language programming. No particular language is assumed, but it is taken for granted that the reader is familiar with the notions of an algorithm, a flowchart, and a stored program. It is not our intent that this book stand alone as a course text. Since it does not describe all the fine details of the 68000 instructions and assembler directives, students should have access to a 68000 microprocessor handbook and the assembler manual appropriate to their particular installation, where these details can be found when needed. Little is said in the book regarding peripheral equipment (only the terminal and clock device are treated in detail), and students doing I/O programming may wish to refer to peripherals handbooks and local manuals for assistance. The assembler used in this text contains features common to most 68000 assemblers. It is named TASTE, and was written by two South Dakota Tech graduate students, John Kjellevold and Jon Sundfjord. The authors are indebted to Dr. Karen Whitehead for reviewing the manuscript and offering much useful advice. Thanks are also due Dr. David Ballew and Professors Harold Cards, Julie Dahl, and Roger Opp for helpful comments and suggestions. And, finally, thanks to Tara and Rob Powles for their help with the manuscript.

1 NUMBER SYSTEMS

As we work with the 68000, we shall make extensive use of the binary and hexadecimal (hex) number systems, as well as the decimal system. It is important that the student acquire, as soon as possible, the facility to convert from one system to another. In this chapter we shall outline, without proof, some algorithms for carrying out these conversions. Students familiar with these algorithms may proceed directly to Chapter2. In this chapter, a "number" will mean a non-negative integer (0, 1, 2, ... ). The number N will be denoted by Nl0' N16 , or N2 if it is in the decimal, hexadecimal, or binary system, respectively. However, the subscript may be dropped if it is understood from the context. An m-digit number will be written symbolically as Dm_ 1 ••• DIDo [Dj being the (i+l)st digit from the right]. In all flowcharts, an oval-shaped box will represent an entry or an exit point, and a diamond-shaped box will represent a branching point.

1.1 DECIMAL-TO-BINARY CONVERSION The flowcharts in Figures 1.1 and 1.2 describe algorithms for converting a decimal number N into its binary equivalent M. Example (Subtraction-of-powers method) N=217 1O 217 - 27=217 -128 =89 89 - 2 6 = 89 - 64 = 25

(D6 = 1)

25 - 24 = 25 - 16 = 9

(D4 = 1)

9 -2 3 =9 - 8 = 1

(D3 = 1)

1 - 2°= 1 -1 = 0

(Do = 1)

M = 11011001 2 1

2

NUMBER SYSTEMS

Yes

M-D m _ 1 ···D 1 Do Find greatest power of 2, say 2k,

(with all Dk not previously assigned set to 0)

not exceeding X. *

Dk -1 X-X - 2k

*Use Table 1.1

Figure 1.1

Decimal-to-binary conversion by subtraction of powers.

Example (Division method) N= 217 1O 217 is odd

(Do = 1)

217/2 = 108 is even

(Dl = 0)

108/2 = 54 is even

(D2 = 0)

54/2 = 27 is odd

(D3 = 1)

27/2 = 13 is odd

(D 4 = 1)

13/2 = 6 is even

(Ds = 0)

6/2

= 3 is odd

(D6 = 1)

3/2

= 1 is odd

(D7 =1)

1/2

=0 M = 11011001 2

CHAP. 1

SEC. 1.2

DECIMAL-TO-HEXADECIMAL CONVERSION

3

Yes

X-N m-O

No Halt

*qt (a/Ill

Figure 1.2

= integer quotient a/Il

Decimal-to-binary conversion by division.

1.2 DECIMAL-TO-HEXADECIMAL CONVERSION The flowcharts in Figures 1.3 and 1.4 describe algorithms for converting a decimal number N into its hexadecimal equivalent M. Powers of 16 are listed in Table 1.1, hexadecimal digits are listed in Table 1.2. Example (Subtraction-of-powers method)

N = 2591 10 2591 -10*16 2 = 2591 - 2560 = 31 31- 1*16 1 =

31-

16= 15

15 - 15*16° =

15 -

15 = 0

M=AIF 16

(D2 = 10 = A 16 ) (D t

= 1)

4

NUMBER SYSTEMS

CHAP. 1

Yes

M-D m _ 1 ···D 1 Do (with all Dk not previously assigned

Find greatest number of form

set to 0)

a'16 k (1';;; a';;; 15) not exceeding X. * Dk-a X-X - (a'16 k )

*Use Table 1.1

Figure 1.3

JExample

Decimal-to-hex conversion by subtraction of powers.

(Division method)

N=2591 10 2591/16 = 161 (remainder 15)

(Do =F)

161/16 = 10 (remainder 1)

(Dl = 1)

10/16 =

0 (remainder 10)

(D2=A) M=AIF 16

An alternative method consists of ftrst converting N into binary as shown in Section

1.1, and then converting the result into hexadecimal as shown in Section 1.6.

1.3 BINARY-TO-DECIMAL CONVERSION IfN = Dm _ 1 .•. D1Dois a binary number, then its decimal equivalent is: m-l

M=

1:

i=O

(powers of 2 are listed in Table 1.1)

SEC. 1.4

HEXADECIMAL-TO-DECIMAL CONVERSION

5

Yes

Yes

Dm- rm(X/16t* X-qt(X/16)* m-m + 1 *qt(a/f3) = integer quotient a/f3 rm(a/f3) = remainder of a/f3

Figure 1.4

Decirnal-to-hex conversion by division.

JExample N = 1011100

M =22 + 23 + 24 + 26 =4 + 8 + 16 + 64

=92 10

1.4 HEXADECIMAL-TO-DECIMAL CONVERSION IfN = Dm _ 1 ... DIDOis a hexadecimal number, then its decimal equivalent is: m-l

M=

E i=O

(powers of 16 are listed in Table 1.1.) Alternatively, the decimal equivalent can be written as M = ( ... ((D m _ 1*16 + Dm _ 2)*16 + Dm _ 3)*16 + ... + D 1)*16 + Do The following examples illustrate how these two forms can be used to compute the decimal equivalent of a hexadecimal number.

NUMBER SYSTEMS

6

CHAP. 1

Example (Sum-of-powers method) N = 3107 16 M = 7*16° + 0*16 1 + 1 *16 2 + 3*16 3 = 7*1 7

+ 0*16 + 1*256 + 3*4096 +

0 + 256

+ 12288

=12551 10 Example (Multiply-and-add method)

N = 3107 16 + 1=

48 + 1 =

49

49*16 +0=

784+0=

784

3*16

784*16 + 7 = 12544 + 7 = 12551 M=12551 1O

1.5 HEXADECIMAL-TO-BINARY CONVERSION The binary equivalent M of the hexadecimal number N is obtained by replacing each digit in N with a group of four binary digits as shown in Table 1.1. (Leading Os in the leftmost group can be deleted.) Example

N = 3D6C 16 M = 11 1101 0110 1100 2 TABLE 1.1

16° = 2° = 21 = 22= 23 = 16 1 =2 4 = 25 = 26 = 27 =

POWERS OF 2 AND 16

1 2 4 8 16 32 64 128

16 2 =2 8 256 29 512 210 = 1024 211 = 2048 16 3 = 212= 4096 2 13 = 8192 214 = 16384 2 15 = 32768

1.6 BINARY-TO-HEXADECIMAL CONVERSION The hex equivalent M of the binary number N is obtained by partitioning N into fourdigit groups from right to left and then replacing each group by a hex di~t as shown in Table 1.2. (If the length of N is not divisible by 4, add enough leading Os to make it so.)

SEC. 1.7

BINARY AND HEXADECIMAL ADDITION

TABLE 1.2

7

DECIMAL-HEXADECIMAL-BINARY CONVERSION

Decimal

Hex

Binary

0

0

2 3 4 5 6 7 8 9 10 11 12 13 14 15

2 3 4 5 6 7 8 9 A

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

B

C D E

F

Example N = 1101011010001111

= 1101

0110 1000 1111

M = D68F 16

1.1 BINARY AND HEXADECIMAL ADDITION Binary numbers are added as if they were decimal, except for the following rules:

1 + 1 = 0 (carry 1) 1 + 1 + 1 = 1 (carry 1) Example 101101 2

+ 100111 2 10101002 The most straightforward method for adding two hex numbers is to add as if they were decimal, except for the following rules: 1.

If a digit is a letter (A to F), convert it to decimal.

NUMBER SYSTEMS

8

2. 3.

CHAP. 1

If the sum, S, of two digits (added as if they were decimal) is 16 or more, then replace S with S-16 and carry 1 (e.g., 9 + 9 = 2 carry 1). If the sum of two digits (added as if they were decimal) is 10 to 15, then replace it with the appropriate letter, A through F (e.g., 5 + 7 =1210 =C I6 ).

Example 7A34D 16

+ B2C36 16 12CF83 16

EXERCISES

1.1. Using both the subtraction-of-powers and the division method, convert the following decimal numbers into their binary and hex equivalents. a. 2337 10 b. 1000010 c. 16383 10 1.2. Convert the following binary numbers into their decimal and hex equivalents. a. 11111112 b. 10000001 2 c. 1010011100101110 2 1.3. Convert the following hex numbers into their decimal and binary equivalents. a.8FF 16 b. 9A8 16 c. CAFE 16 1.4. Perform the following binary additions and check the results by converting the numbers into decimal. a. 1011010 2 + 11010 2 b. 1111101 2 + 1110 2 1.5. Perform the following hex additions and check the results by converting the numbers into decimal. a. 16A 16 + FFF 16 b. 18F 16 + 2EC 16 1.6. Compute the following binary product and check the result by converting the numbers into decimal. 11010111 2

*

100101 2

1.7. Show that the binary equivalent of 2k_1 is 111 ... 1 (k times).

2 THE ORGANIZATION Of THE 68000 A Motorola 68000-based computer system consists of a Motorola 68000 central processor (CP), where all computations take place, the central memory (CM), where the data and program are stored; and peripheral devices, such as the terminal, clock, and the devices needed to communicate between the 68000 and the terminal. In this text we shall assume a very rudimentary 68000 configuration with only a terminal, a clock, and a communication device as peripheral devices. Details on these and other devices can be found in the manuals for the particular devices. Strictly speaking, "68000" refers to the microprocessor chip itself (consisting of the CP only). However, for the sake of brevity, in the remainder of this text the designation 68000 will refer to the entire system-CP, CM, and peripherals-and not just the chip. Figure 2.1 outlines the general structure of the 68000 CP along with central memory and peripheral devices. In this chapter we shall describe the main features of the various components shown in this figure with the exception of the clock control and status registers. These registers, together with the interrupt feature of the communication device, will be discussed in Chapter 8. A symbol by itself, for example X, will represent a CM address or a register name. The notation (X) will stand for ''the contents of X". Similarly, ((X)) will stand for the "contents of (X)" (Le., the contents of the memory location whose address is found in X). For the sake of readability, the name of a register will sometimes be used to indicate its contents when no other meaning is possible. Thus, D5 and (D5) will both be used to indicate the contents of register D5. For example, "add D5 to D3" and "add (D5) to (03)" will both be used and will mean the same thing. The latter is perhaps more technically accurate, but the former is easier to read.

2.1 THE CENTRAL MEMORY The central memory of a computer is also called "main memory", "primary memory", "RAM" (random access memory), and "core" (a term left over from the days when most central memories were constructed from magnetic core elements). The basic memory element of a computer is the bit, which is capable of holding 9

THE ORGANIZATION OF THE 68000

10

CHAP. 2

a single binary digit, either a 0 or a 1. The multitude of bits of which the central memory consists are grouped into bytes, which, in tum, are grouped into words (which can be grouped into long words by the programmer). In the 68000 each word consists of 16 bits, numbered (right to left) from 0 through 15; bits 0 through 7 constitute the low byte and bits 8 through 15 the high byte ofthe word: Low byte

High byte

15

14

13

12

11

10

9

8

7

6

5

4

3

2

o

A long word consists of two words whose bits are numbered (right to left) 0 through 31. Figure 2.1 shows a 68000 memory consisting of 214 = 16384 10 = 16K words or 2 15 =32768 10 =32K bytes (where K stands for 2 10 = 1024). Larger memories are possible, the exact size varying from one machine to another. Each byte in the CM is identified by a unique number called the address (or the location) of the byte. If the CM has b bytes, the sequence of byte addresses is 0, 1,2, ... , b-l. The address of a word is, by convention, the address of its high byte. Thus, the sequence of word addresses is 0, 2, 4,6, ... , b-2. Note that a word address is always even. For example, in the 16K-word machine shown in Figure 2.1, the byte addresses are 0,1,2,3, ... , 7FFF 16 (7FFF16 = 32767 10) and the word addresses are 0,2,4,6, ...,7FFE 16 We shall always write CM addresses in hexadecimal. The contents of a word (or byte) can naturally be represented by a sequence of 16 (or 8) binary digits. When the sequence, viewed as a binary number, is converted into its four-digit (or two-digit) hex equivalent, the result is the hex contents of the word (or byte)-a concise and convenient representation which will be used frequently in this text. For example, the word whose actual (binary) contents is 1010011100101110 has the hex contents A72E; its low byte has the hex contents 2E, and its high byte, A7.

2.2 THE CENTRAL PROCESSOR The CP consists of the arithmetic and logic unit (ALU), where all numerical and logical operations take place, and a number of 32-bit (long word-size) registers which constitute the CP's "private memory".

SEC. 2.2

THE CENTRAL PROCESSOR

11

Central Processor (CP) Program counter (PC) (32 bits, 24 used)

I

~

2423 0 Status register (SR) (16 bits) System byte User byte

31

I15

Central memory (CM) Word

I

T.S .. ppp

... XNZVC

8 7

General purpose registers

~

16 bits

o

) 32K Bytes 16K Words

j

DO D1 D2 D3 D4 D5 D6 D7

r----"-l 1 3 5

2 4 6 8

7 9 B D

A

C E 10 ~

7FFE~7FFF 15 87

0

~L......-.J

High byte

Low byte

Arithmetic and logic unit (ALU)

AO A1 A2 A3 A4 A5 A6 A7*

F 11 L-:\

I

0

31

16 15

8 7

0

*A7 is stack pointer (SP) Terminal status and data registers (ACIA)

r----I . ."'I---_ _~. ~

110040 10042

1--_ _ _ _ _- '

Terminal

7

-coJ1-------i1>1lo-

0

Clock control and status registers These will be discussed in Chapter 8.

Figure 2.1

68000 organization.

There are 16 general-purpose registers called DO, DI, ... D7, and AO, AI, ... A7. A7 is also called the stack pointer (SP) , for reasons to be discussed later. There is another register called the program counter (PC) which always contains the address of the next program instruction to be executed. The CP's access to the general-purpose registers is much quicker than its access to the CM. It is thus advisable to keep frequently needed data (e.g., loop control variables) in these registers rather than in the CM. The status register (SR) contains several I-bit condition codes whose values depend on the result of the instruction last executed. For example, the Z ("zero") and N ("negative") codes:

THE ORGANIZATION OF THE 68000

12

Z code (bit 2) =

{ 1 if result was 0 oif result was not 0

N code (bit 3) =

{ 1 if result was < 0 oif result was > = 0

CHAP. 2

Other condition codes will be discussed in later chapters. It should be noted that different instructions affect codes differently (and some do not affect them at all). The precise effect of each instruction on the condition codes is specified in MC68000 User's Manual or in Appendix D of this book. A number of registers associated with peripheral devices will be introduced in subsequent sections.

2.3 THE TERMINAL AND THE COMMUNICATION CHIP The terminal is representative of various character-oriented peripheral devices. By means of the terminal, information can be entered into the 68000 (by a human operator) via a keyboard and printed by the 68000 via a display screen. It is important to note that, unlike an ordinary typewriter, the terminal consists of two devices, the keyboard and the screen, which are completely independent (Le., pressing a character on the keyboard will not automatically result in the display of this character on the screen). The terminal is associated with four interface registers, each of which has a nominal address and can be regarded as if it were part of the CM. This means that the registers are not actually part of the memory but can be accessed by using fake addresses called "nominal addresses". The processor translates, or "memory maps", these address references into references to the appropriate registers. This address structure results from the use of a communication chip called a 6850 Asynchronous Communications Interface Adapter or ACIA. Other communication chips may have different address structures, so you may need to consult the manual for your system if you have a different chip. Also, the particular addresses mentioned here are for the 32K Motorola Educational System MEX68KCB and may be different on your system. The interface registers are: 1. The terminal status register (addressed 10040) 7

I@ •

0

• @•

@

I

0



Input ready bit

Bit 0 (the "input ready" bit) is 1 when the character typed in is available in the keyboard data register. It becomes 0 only after an instruction is executed which fetches the contents of the keyboard data register.

SEC. 2.3

THE TERMINAL AND THE COMMUNICATION CHIP

13

o

7 10

0

®

0

®

01



10

Output ready bit

Bit 1 (the "output ready" bit) is 1 when the screen is available for printing. It becomes 0 as soon as a character is loaded into the terminal output data register and remains so until printing is completed. Note that the terminal is much slower than the CPU, so the time taken to display a character after it has been sent to the screen cannot be ignored. We shall see later that there is an instruction that will allow us to easily test the value of each bit in a byte. Using this instruction, we will be able to test whether input is available by testing bit 0 in byte 10040 and test whether the screen is ready for output by testing bit 1 in byte 10040. This register is "read only" and cannot be written into by the program. 2. The keyboard data register (addressed 10042)

o

7

Character

This byte holds the encoded form of the typed-in character. This register is "read only" and cannot be written into by the program. 3. The terminal output data register (addressed 10042)

o

7

Character

This byte holds the encoded form of the character to be printed. If the terminal output status register's "ready" bit is 1, printing will take place immediately upon loading the data register. This register is "write only" (Le., its contents cannot be moved elsewhere by a program). 4. The terminal control register (addressed 10040) This register will be discussed in Chapter 8. It, like the terminal output data register, is write only. Note that the keyboard data register and terminal output data register have the same nominal address (as do the terminal status register and the terminal control register).

THE ORGANIZATION OF THE 68000

14

CHAP. 2

This does not cause a conflict because the fIrst is read only and the second is write only. Thus, an instruction that reads from byte 10042 will read the keyboard data register, while one that writes to byte 10042 will write to the terminal output data register. These are physically different registers within the ACIA hardware.

2.4 THE LINE CLOCK The 68000 does not have a built-in clock, but it can be connected to a device containing a clock. We will discuss the use of a clock device, the MC68230 Parallel Interface and Timer (PI/T) in Chapter 8.

EXERCISES

2.1. Write (in hex) the highest byte and word addresses in a w-word computer, where w (in decimal) is a.28K h. 2 18 2.2. How many words are there in a CM whose highest byte address is FFFF 16? 2.3. Determine the hex contents of the words that contain a. 0110110110110110 h. 1001011111010101 What are the hex contents of the low byte and high bytes of each of these words?

3 REPRESENTATION Of

NUMBERS AND CHARACTERS

In this chapter we shall see how numbers (integer and "real", positive and negative), characters, and character strings are stored within the 68000. Unless otherwise specified, a "number" will mean an integer. A "positive number" will mean a non-negative integer (0,1,2, ... ).

3.1 2'S-COMPLEMENT REPRESENTATION Numbers are represented in the 68000 in the n-bit 2's complement form, where n is 32 (for long word representation), 16 (for word representation), or 8 (for byte representation). This form is constructed by the following rules. To store a positive number N: 1. Express N in binary form. 2. Store the (binary) N right:iustified in the word (or byte or long word), supplying it with as many leading Os as needed to make the total number of digits n. Examples 1. N = 1607 10 = 647 16 16-bit 2's-complement representation: 0000 0110 0100 0111

(0647 16 )

2. N = 10 10 =A 16 8-bit 2's-complement representation: 0000 1010 The largest positive number recognized in the n-bit 2's-complement form is

n-l

15

REPRESENTATION OF NUMBERS AND CHARACTERS

16

CHAP. 3

When n = 16, then N d", ... , dr d1,d", ... , dr

cause the assembler to store the data (numbers or characters) dl>d", ... , d r in consecutive bytes, words, or long words, respectively. (DC stands for "define constant".) For example, DC.B DC.W DC.L

l2,-5,'ABCD' $ABCD,50 $12345678,7

ASSEMBLY LANGUAGE PROGRAMMING

50

CHAP. 5

will result in storing, in nine consecutive words, the hex numbers (12,-5) ('A','B') ('C','D') ($ABCD) (50) ($12345678)

OCFB 4142 4344 ABCD

0032 1234 5678

0000 0007 2. DS.B DS.W DS.L

(7)

n n n

cause the assembler to reserve a storage block of n bytes, words, or long words, respectively. (DS stands for "define storage".) Note that the DS directive reserves storage but does not initialize the storage. Thus, DS.W 100 reserves 100 words whereas DC.W 100 reserves one word initially containing the number 100. 3. The "assignment directive" sym

EQU

exp

causes the assembler to assign the symbol "sym" the value of expression "exp". (EQU stands for "equate".) For example, TRMSTAT CR

EQU EQU

$10040 $OD

assign the values $10040 and $OD to the symbols TRMSTAT and CR, respectively. Henceforth, every time the assembler encounters the symbol TRMSTAT, it reo places it with $10040, and every time the assembler encounters the symbol CR, it replaces it with $OD. A subsequent directive, TRMDATA

EQU

TRSMTAT+2

assigns to the symbol TRMDAT A the value $10042. Assignment directives permit the programmer to use meaningful names, rather than obscure numbers, in the body of the program-which considerably enhances readability. They also make the program less sensitive to changes in hardware, character code, etc. If, for example, the keyboard status register is

SEC. 5.2

ASSEMBLY LANGUAGE DIRECTIVES

51

moved to a new address, or the code for a carriage return is replaced by another, all one needs to do is change the assignment directives for TRMSTAT and CR; this will automatically enforce the new values upon all the TRMSTAT and CR symbols appearing in the body of the program. Thus, if the ACIA registers in your 68000 system have different addresses than those used in this text, you only need to change the appropriate assignment directives appearing at the beginning of our programs. The expression in the assignment directive may contain the operators '" and / as well as + and -. Brackets are also allowed. The usual rules pf algebraic precedence apply. For example, in

A B C

EQU EQU EQU

3

1+2 "'A [1+2] "'A

B is assigned the value 7, and C the value 9.

4. The symbols DO,DI, ... ,D7,AO,Al, ... ,A7,SP,SR, and PC are predefined in the assembler. The symbol'" ("star", or "asterisk" if you prefer giving your tongue a challenge), which is also predefined, refers to an assembler variable (called location counter) which, at any time during assembly, holds the address of the word into which the current instruction is being assembled. 1 Its initial value is defined by the ORG directive (see below).

5.

ORG

n

assigns the value n to the location counter. This must be done at the beginning of every program. (ORG stands for "origin".) The ORG directive can also be used to define starting locations for different parts of the program (data blocks, code, etc.). For example,

ABC START

ORG DS.W ORG

$5000

EQU

'"

100 $6000

could be used to reserve 100 words of storage starting at location $5000 for an array called ABC to be used in a program that starts at location $6000. (The purpose of the directive START EQU '" is simply to assign to the symbol START the current value of the location counter, namely $6000.)

IWith some assemblers, "star" can also be used to specify addresses. For example, "jump 3 words ahead" can be written as IMP *+6; "move current address to AD" can be written as MOVE #*,AD.

ASSEMBLY LANGUAGE PROGRAMMING

52

n

LOAD

6.

CHAP. 5

causes the machine language version of the program to be stored in memory start· ing at address n. This is usually the same value as on the ORG directive. The LOAD directive can be omitted if the program is not going to be executed for the purpose of error checking. Many assemblers create a me of the program's object code which is later loaded into memory and, thus, do not need the LOAD directive.

7.

EVEN forces "star" to become the next even address. If the location counter is already even, this directive does nothing. This is required if a directive reserving an odd number of bytes comes before one which reserves words. Without this directive, the word addresses would be odd, which is not allowed in the 68000.

8. The last statement of every program must be:

END 5.3 ASSEMBL Y LANGUAGE PROGRAM FORMAT A source program is composed of a sequence of lines, each containing a single statement. A statement may be composed of as many as four fields, named and formatted as follows: Label

Operator

Operand

;Comment

The label field terminates with a space; the comment field starts with a semicolon; items within the operand field are separated by commas; the operator and operand fields are separated by at least one space. For example: LOOP

MOVE.B

DO,$10042

;PRINT CHARACTER

The label, which assigns a symbolic address to the statement, needs to appear only when the statement is referred to symbolically. A symbol may be of any length. Labels should consist of letters and digits and start with a letter. Different assemblers may have different rules on allowable labels, but most will allow a reasonable number of letters and digits. A label cannot be anything that could be confused with a pre· defmed symbol such as DO, AS, or PC. Note that there is no confusion between the label ABC and the hex number ABC, since the hex number ABC must be written as $ABC. The operator field contains the mnemonic op code of a 68000 instruction, or the code of an assembler directive. The operand field contains the remainder of the instruction or directive.

SEC. 5.4

EXAMPLE 1: ECHO KEYBOARD INPUT TO SCREEN

53

The comment field is optional, but should be used generously if a well-documented program is to result. (A line consisting entirely of commentary may start with ; in any column.) Comments are ignored by the assembler and are used only for documentation purposes. As a matter of convention, all source programs in this text will be organized as follows: ORG LOAD

$7000 $7000

(Description of program) EQU MOVE

START

*

#START,SP

(program) END With this format, the program starts at $7000 with the instruction MOVE #START,SP which stores the address $7000 in SP (the stack pointer). The reason for this will be explained in the next chapter.

5.4 EXAMPLE 1: ECHO KEYBOARD INPUT TO SCREEN We wish to write a program which "echoes" (types back) every typed-in character. Striking a key sends a signal to the 68000, but it does not automatically send a return signal to the screen. This program will allow the programmer to see what is typed and will probably be incorporated into most 68000 programs. Figure 5.1 shows the flowchart and Figure 5.2 the assembler listing of the source and object codes. The listing shows (left to right) the CM addresses into which the source instructions are assembled, the object code, the ordinal numbers of the source lines, and the source code of the program. The instruction: BTST

#O,TRMSTAT

checks the input ready bit of the ACIA. If it is 0, no character is available in the keyboard data register. Thus, this instruction coupled with: BEQ

INPOLL

ASSEMBLY LANGUAGE PROGRAMMING

54

CHAP. 5

~------~------~

Figure S.l

Flowchart for program to echo input.

has the effect of looping until the input ready bit is 1. This process is known as polling and will be used again to output the character to the screen. The instruction: MOVE.B

TRMDATA,D3

moves the contents of the input data register (namely the ASCII code for the character typed) into the low byte of D3. The instruction: CMP.B

#$D,D3

compares the character in D3 to a carriage return (see Table 3.2). If they are equal, the next instruction causes the program to branch to the label DONE. If not, the character must be echoed to the screen. The instruction: BTST

#l,TRMSTAT

has a polling function similar to the one mentioned above, except that bit 1, the output

SEC. 5.4

EXAMPLE 1: ECHO KEYBOARD INPUT TO SCREEN

55

1 ; •• o ••••••••••• oeooo ••••• oeoe •••• a •••••••••••••• o ••••••••••••••••

2 ,

3 ; THIS PROGRAM ECHOES CHARACTERS ENTERED FROM THE KEYBOARD 4 ,

007000 007ODO 007000 007000 007000 007000 007000 007000 007004 007004 007004 007004 007004 007008 00700C 00700E 007012 007014 007018 0070lC 0070lC 0070lC 0070lC 0070lC 007020 007024 007026 00702A 00702C 00702E 00702E 00702E 007032 007034

5 ; •••••••••••••••••••••••••••••••••• oo ••••••• e •••••• o •• e •••••••••• 6 ORG $7000 7 LOAD $7000

3E7C7000

08390000 00010040 67F6 16390001 0042 OC03000D 67000014

8 9 10 II 12 13 14 IS 16 17 18

; TRMSTAT EQU TRHDATA EQU ; START EQU HOVE

, INPOLL

4EF9EEEE EEEE

G

#START,SP

INPUT CHARACTER EQU BTST

"

1I0,TRMSTAT

19 20

BEQ INPOLL HOVE.B TRHDATA,D3

;WAIT UNTIL CHARACTER AVAILABLE ; INPUT CHARACTER INTO 03

21 22

CI1P.B BEQ

;DONE IF RETURN ENTERED

23 24

OUTPUT CHARACTER

25 ;

08390001 00010040 67F6 13C30001 0042 6006

;TERHINAL STATUS REGISTER ;TERMINAL DATA REGISTERS

$10040 $10042

26 OUTPOLL EQU 27 BTST

#$0,03 DONE

.. #I,TRHSTAT

28 29

BEQ OUTPOLL HOVE.B D3,TRHDATA

30 31 ; 32 DONE 33

BRA

INPOLL

;GET NEXT CHARACTER

EQU JI1P

"$EEEEEEEE

;ILLEGAL BRANCH FOR STOP

34

END Figure S.2

; WA IT FOR OUTPUT READY ;OUTPUT CHARACTER IN 03

Program to echo input.

ready bit, is being tested. The BEQ instruction on the next line again checks if the bit is 0, indicating not ready. If it is 0, the program must again poll until the bit becomes 1, indicating that the output device is ready to receive a character. The instruction: MOVE.B

D3,TRMDATA

moves the character in D3 into the terminal output data register. This causes the character to be printed. The instruction: BRA

INPOLL

56

ASSEMBLY LANGUAGE PROGRAMMING

CHAP. 5

transfers control to the statement labeled INPOLL, allowing the process to be repeated for the next character. Notice that the instruction:

]MP

$EEEEEEEE

requires a jump to an invalid address. This has the effect of ending the program, although it will produce error messages. A more elegant method for ending a program is a jump to the system monitor which will be discussed later. There is also a STOP instruction that will cause the processor to stop processing instructions, but this is not advisable since it is essentially an infinite do-nothing loop.

5.5 EXAMPLE 2: MUL TlPLE ECHO We are now ready to try a more complicated example. This program will echo the typedin character n times. Since echoes of a character may not be completed before the next one is typed in, the program should set up a "buffer" (Le., a temporary storage block) for storing characters awaiting printout. We shall assume that the backlog can never exceed 6410 characters. The program employs a "buffer input pointer", which, at any time, points to the next free buffer byte (Le., the byte in which the next typed-in character is to be stored), and a "buffer output pointer", which, at any time, points to the next buffer byte to be echoed. Typically, the output pointer lags behind the input pointer; when the former finally catches up with the latter, the buffer is "empty" (no character awaits printout). For efficient operation, it is proposed to use a "circular buffer", where the byte with the highest address is followed by the byte with the lowest address. In this manner, only 6410 bytes are required for storage, regardless of the number of characters typed in. An implementation of such a buffer required that when a buffer pointer reaches 6310 ($3F), its next value be reverted to O. One way of accomplishing this is to mask out (clear) all but the rightmost 6 bits of the pointer (see below) after every incrementation. This operation is known as masking. Figure 5.3 shows the flowchart and Figure 5.4 the assembler listing of the source and object codes of the program (where n was selected to have the value 5). The masking operation is done in the program by means of the AND instruction (see lines 28 and 38 in Figure 5.4). AND s,d does a logical (bit-by-bit) AND of (s) and (d) and stores the result in d. Thus, AND #$3F,DO will clear all but the rightmost 6 bits in DO. Notice the destination (AO,DO) on line 26 [or the source (AO,DI) in line 34]. This is an example of address register indirect with index and displacement, N(An,Dm); here N = 0 and need not be written.

SEC. 5.5

EXAMPLE 2: MULTIPLE ECHO

(~O)

(01) (02) -

57

0 0 0

Buffer Buffer + 1 Buffer + 2 No

Store input character in buffer

01

r

(Buffer + (OO))-character (OOHOO) + 1 (00)-(00) A $3F

~:;:-;:------r:;:========-.J

Echo output character

r

DO Buffer + 3 F '---_ _ _----'

= buffer input pointer (01) = buffer output pointer (02) = repetition count n (~O)

~-------,--------~

Prepare for next output character

r '--_ _ _ _...,_ _ _ _.....

Yes

Pick up repetition cou nt

Figure S.3

Flowchart for multiple-echo program.

ASSEMBLY LANGUAGE PROGRAMMING

58

1

.OOGOOOG9000000oooftooaoeaeOOGOOaODOGGQOOoo.oueeo&o&oee.0.90.e • • eo

2

ECHO EACH TYPED-IN CHARACTER N TIMES. USE CIRCULAR BUFFER OF 64 (DECIMAL) BYTES FOR STORING AWAITING CHARACTERS.

3 4

007000 007000 007000 007000 007000 007000 007000 007000 007004 007004 007006 007008 o0700A o07ooE o0700E 00700E o0700E 00700E 007012 007016 o07olA o07olE 007022 007024 007028 007028 o0702A o0702E 007032 007036 007038 00703C 007040 007042 007044 007046 o0704A o0704A 00704C o0704E 007052 007054 007056 007056 007098 007098

3E7C7ooo 4240 4241 4242 307C7058

08390000 00010040 67000010 IIB9000i 00420000 5240 o24ooo3F 4A42 670000iE 08390001 00010040 6706 13FoIooo 00010042 5342 66CA 5241 o241oo3F B240 67CO 34390000 7056 6oB8 0005

~ 7 8 9 10 II 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

CHAP. 5

;00000000000000000000000000000&000008000000.0.0000060&Raaae*o • • a&

ORG $7000 LOAD $7000 $10040 :TERMINAL STATUS REGISTER TRMSTAT EgU TRMDATA E U $10042 :TERMINAL DATA REGISTER START EQU " MOVE #START,SP CLR :INITIALIZE BUFFER INPUT POINTER (BIP) DO CLR 01 :INITIALIZE BUFFER OUTPUT POINTER (BOP) CLR 02 :INITIALIZE REPETITION COUNT MOVE #BUFFER,AO ;Ao=START OF BUFFER FOR INDEXING INPUT CHARACTER : G EQU LOOP BrST #o,TRHSTAT BEQ ECHO ;IF NO CHARACTER, KEEP ECHOING MOVE.B TRMDATA,(AO,Do) ;STORE CHARACTER IN BUFFER ADDQ ; INCREMENT BIP f.I,Do AND ;ZERO IF BIP = $40 f$3F,Do EQU ECHO TST ;IF MULTIPLE ECHO TERMINATES~ 02 BEQ NEXT ; PREPARE FOR NEXT OUTPUT LHAR. BTST #I,TRMSTAT ;OTHERWISE, IS PRINTER READY? LOOP ;IF NOT, ACCEPT NEXT CHARACTER 33 BEQ 34 MOVE.B (AO,DI),TRHDATA ;IF SO, ECHO OUTPUT CHARACTER DECREMENT COUNT 35 SUBQ f60~2 BNE IF COUNT NOT 0, ACCEPT NEXT CHAR. 36 37 ADDQ Q.I ,0 I ELSE, INCREMENT BOP 38 AND ZERO IF BOP = $40 f$3F,DI EQU 39 NEXT CHP ;IF BIP=BOP (BUFFER EMPTY), 40 DQ~DI LwP ; ACCEPT NEXT CHARACTER 41 BEQ 42 N,D2 ;SET COUNT TO N MOVE ;ACCEPT NEXT CHARACTER BRA LOOP 43 44 : ;REPETITION COUNT 45 N DC.W 5 ;BUFFER SPACE: 64 DECIMAL BYTES 46 BUFFER DS.B 64 47 END :

Figure 5.4

Multiple-echo program.

5.6 CODING HINTS It is useful to mention some common mistakes made by beginners while learning assembly language. The novice is often tempted to use addressing modes which do not exist. For example:

CLR

1000(AO)+

whose intention (presumably) is to use AO in address register indirect with displacement mode and then increment it. This hybrid displacement-autoincrement mode,

59

CODING HINTS

SEC. 5.6

although occasionally useful, is nonexistent in the 68000. One should issue, instead: CLR ADDQ

IOOO(AO) #2,AO

As another example, consider the statement: MOVE

D1+4,D2

whose intention is (presumably) to add 4 to the contents of DI and store the result in D2. This is impossible to do in a single 68000 instruction; one should issue, instead, MOVE ADDQ

DI,D2 #4,D2

[Note that the LEA instruction will allow us to do a similar operation on address registers by issuing LEA 4(AI),A2 which adds 4 to the contents of Al and stores the result in A2.] Another common problem is using an addressing mode which is not valid in a particular context. For example: CLR

AO

whose (clear) intention is to set AO to zero. However, the CLR instruction does not permit the use of the address register direct mode. One way of performing the desired operation is with SUBA AO,AO. (The problem of having to check the validity of every instruction/mode combination in the 68000 is rather annoying.) There is a tendency to forget the # sign when using immediate addressing. Note that there is a world of difference between MOVE

#SOO,DO

and MOVE

SOO,DO

The first instruction stores the constant 500 in DO, while the second stores the contents of address 500 in DO. As another example, suppose we wish to clear locations 1000, 1002, and 1004. The following sequence of instructions will do it: MOVE CLR CLR CLR

#1000,AO (AO)+ (AO)+ (AO)

60

ASSEMB L Y LANGUAGE PROGRAMMING

CHAP. 5

The first instruction puts the address 1000 into AO. The second instruction then clears location 1000 and adds 2 to AO. The third and fourth instructions clear locations 1002 and 1004, respectively. (Note that it would be more efficient to use a CLR.L for the first instruction, but this has no bearing on the point of the example.) Suppose now that the contents of 1000 is 500, and instead of the previous sequence we issue MOVE CLR CLR CLR

1000,AO (AO)+ (AO)+ (AO)

The first instruction moves the contents of location 1000 to AO. AO now contains the value 500. The next three instructions would clear locations 500, 502, 504. This is certainly not what we intended to do. All symbolic addresses other than DO, ... ,D7,A0, ... ,A 7 ,PC,SP,SR and perhaps a few others defined by your assembler must be defined within the program. For example, BTST #O,TRMSTAT is wrong unless the program contains the assignment directive TRMST AT EQU $10040. Beginners often issue instructions such as: MOVE ADD

#O,SAM #1 ,JUDY

While these are legal, they are wasteful in both time and space. Write instead:

SAM

CLR ADDQ

#l,JUDY

Beware of executing word instructions on operands which reside in odd addresses. For example, do not issue the instruction CLR (AO) unless you are sure that AO will always contain an even address. Beginners tend to confuse assembly directives with machine instructions. Notice that

J

EQU

results in the assignment, during assembly time, of the value 1 to the symbol J. It is totally different from: MOVE

#l,J

which stores, during run time, the value 1 in the word whose symbolic address (in the source program) is J. As another example, the statement:

CHAP. 5

61

EXERCISES

x

DC.W

172

results in 172 being stored, during assembly time, in the word whose symbolic address is X; when the program is ready for executions, 172 already resides in X. On the other hand, MOVE

#172;X

inserts 172 in X during run time. While the DC.W directive is obeyed only once (by the assembler), the MOVE instruction can be included in a loop which inserts 172 in X every time the loop is executed by the CPo A note on stopping a program is in order here. We have been using a jump to an invalid address for a stop. This has the advantage of being easy to do and causes all registers to be displayed at the end of the program, which may be useful. In order to end in a more elegant way, a program can mimic a hardware reset. To do this, you will need to know that the first two long words in the 68000's memory (bytes 0-7) are read-only memory that contain values to be loaded into the stack pointer (SP) and program counter when a hardware reset is requested. Thus, to do what amounts to a hardware reset the following instructions can be used: MOVE.L MOVE.L JMP

O,SP 4,AO (AO)

;RESET VALUE OF STACK POINTER ;START OF RESET CODE ; JUMP TO RESET CODE

Finally, let us remind the reader that it is not enough to write a program that merely runs correctly. A program should be well organized and adequately documented. The reader is referred to Appendix F, "Notes on Programming Style", for further details.

EXERCISES

5.1. Modify the keyboard echo program of Figure 5.2 to echo a backspace (ASCII $08) by printing the sequence backspace, space, backspace (ASCII $08 $20 $08) so that characters backed over will no longer appear on the terminal screen. 5.2. Modify the multiple-echo program of Figure 5.4 to accommodate a buffer size of 128 10 bytes. 5.3. What does the following program do? What are the hex contents of AO, DI, and D2 when it halts? How could this program be modified to be more efficient?

START

ORG LOAD EQU MOVE

$6000 $6000

*

#L4,AO

62

ASSEMBLY LANGUAGE PROGRAMMING

u:

L2

13 lA

CLR.L EQU MOVE.B AND CMP BLT CMP BGT SUB CMP BLE ADD SUB ADD EQU ROL ADD BRA EQU JMP DC.B END

CHAP. 5

D2

*

(AO)+,Dl #$FF,Dl #'O'DI 13 #'F',Dl 13 #'O',Dl #9,Dl L2 #'O',Dl #'A',Dl #$A,Dl

*

#4,D2 DI,D2 U

*

$EEEEEEEE '2BC7',$D,$A

5.4. Without using the DIVS or DIVU instructions, write an assembly language program that divides an integer stored in X by an integer stored in Y (with the fractional part truncated). The quotient is to be left in DO and the remainder in Dl. 5.5. Write an assembly language program that regards the word K as consisting of eight 2-bit "quarter-bytes" and counts the number of such quarter-bytes which have the value 3 (Le., 112)' The count is to be left in DO. 5.6. Write an assembly language program that prints out the hex contents of a word whose address is found in ADDR. (For example, if ADDR contains $124 and $124 contains $456, then the program should print out 0456.) 5.7. One hundred (decimal) 16-bit 2's complement numbers (not necessarily different from each other) are stored in order of ascending value in an array starting at address TABLE. Place in DO the number of occurrences of the array number that occurs most often. 5.8. Fifty (decimal) numbers, each between 0 and 100 10 , are stored in a 50-word array starting at address GRADE. The contents of GRADE + i represent the grade of student number i + I. Write an assembly language program that sets up a 50-word array starting at address RANK, where the contents of RANK + i is the rank of student number i + 1 in the class of 50. (The rank of a student equals one plus the num ber of students whose grades exceed that student's grade.) 5.9. Consider a chessboard whose rows and columns are numbered 0 through 7.

CHAP. 5

EXERCISES

63

Write an assembly language program that accepts an input of the form ij (0 0 (N mod M is the remainder when N is divided by M.)

6.8. Write a recursive subroutine that finds DO to the Dl power and puts the result in D2 using the following algorithm. Assume Dl is positive. 1 if Dl = 0 POWER(DO,Dl) = ( POWER(DO,Dl/2?ifDl > 0 and even DO*POWER(DO,Dl-l) ifDl odd

[A related problem is to develop a general formula for Nmult(N) = the number of multiplies required to compute POWER(DO,N).] 6.9.

Write a recursive subroutine that finds an integer N >= 1 in DO and leaves FIB(N) in D 1. Use the definition of FIB(N) given in Section 6.7.

This subroutine is often called the "Fibonacci disaster". Explain why. [Check how it computes FIB(10), for example.] Develop a better recursive algorithm and implement it. 6.10. A binary tree T with root N is a graph that can be defined recursively as follows: Basis: If T is a single node N, then T is a binary tree with root N.

CHAP. 6

STACKS AND SUBROUTINES

90

Induction step: (See the figure below.) If T consists of a node N connected to nodes LS (left successor) and RS (right successor), and if LS and RS are the roots of binary trees (denoted LT and RT, respectively), then T is a binary tree with root n. N

As an example, Figure 6.l8(a) shows a binary tree whose root is labeled 0 and whose nodes are labeled (in hex) 0,1,2, ... C. In the 68000, a k-node tree can be represented by a k-word array with base address TREE. Node number N is represented in location TREE + 2N. The high byte of TREE + 2N contains the number LS of the left successor of N, and the low byte the number RS of the right successor of N. Figure 6.l8(b) shows the representation of the tree of Figure 6.18(a). (a) The in order traversal of a binary tree T is defined recursively as follows:

Basis: If T is a single node N, visit N. Induction step: If T consists of a node N connected to binary trees LT and RT, then: (a) traverse LT in inorder; (b) visit N; (c) traverse RT in inorder. Write a recursive subroutine which prints out the node numbers of a given N

LS

RS

o

1

2 3

3 5 0

2 4 6 0

4

0

0

5 6 7 8

7

0 9

8 0 0

9

B

A

0 0 0

B

C

Figure 6.18

0

Binary tree and its representation.

A

C 0 0 0

Tree

CHAP. 6

91

EXERCISES

binary tree as they appear in inorder traversal. (For example, for the tree of Figure 6.18 the printout should be 3,1 ,4,O,7,5,B,9,C,8,A,2,6.) (b) The height of a binary tree T, denoted H(T), can be defined recursively as follows: Basis: If T is a single node N then H(T) = 0. Induction step: If T consists of a node N connected to binary trees LT and RT, then:

H(T) = 1 + maximum(H(LT),H(RT)) Write a recursive subroutine that prints out the height of a given binary tree. (For example, for the tree of Figure 6.18, the printout should be 5.)

7 ARITHMETIC OPERATIONS

As we already know, the condition codes in the status register provide infonnation on the result (which, as a rule, means the final value of the destination operand) obtained by the last operation. In this chapter we will describe in detail how these condition codes are influenced by various arithmetic operations. In particular, we will examine how the C, V, and X codes behave and how they can be used for overflow indication and in double-precision arithmetic. We will also take a closer look at the TST and the CMP instructions, at branch instructions, and at shift instructions. An ASCII-to-binary conversion program is included which illustrates some of the points made previously.

7.1 CARRY AND OVERFLOW UNDER ADDITION As already mentioned in Section 3.2, The C(Cany) and V (oVerflow) condition codes in the SR are influenced by the result of an ADD instruction in the following manner: 1 if addition resulted in carry from MSB 1

C=

V=

1o

otherwise

fol

if operands are of same sign and their sum is of opposite sign

\

otherwise

Examples For simplicity, let us assume that the 68000 has 4-bit words, capable of accommodating integers from -8 to +7.

I

92

Recall that MSB stands for "most significant bit".

SEC. 7.1

CARRY AND OVERFLOW UNDER ADDITION

Example (Decimal)

4-bit 2'sComplement Addition

1 +(+2) 3

93

Find Value of C

V

Binary Result is

0001 +0010 -0011

0

0

OK

5 +(+6) II

0101 +0110 -1011

0

-6 +(+7) I

1010 +0111

--

wrong

0

OK

0

OK

0

OK

t OO01

1 -6 +(+3) -3

1010 +0011 -1101 -

-5 +(-2) -7

1011 +1110 .{ 1001

0

I

-6 +(-6) -12

1010 +1010 -,,0100 1

wrong

Generally, the following can be readily deduced: 1. If both numbers are positive, e is always 0 (since both MSBs are 0). The sum is incorrect only if it is negative 01 = 1). 2. If both numbers are negative, e is always 1 (since both MSBs are 1). The sum is incorrect only if it is positive 01 = 1). 3. If numbers have opposite signs, V is always 0 and the sum if always correct. e can be either 0 or 1. In conclusion, the result of adding two numbers is incorrect only if V = 1. The branching instructions BVe and BVS can be conveniently used to check whether or not an overflow (and hence an arithmetic error) has occurred. For example, after ADD X,Y one can issue BVS ERRMSG to initiate an error message which announces the overflow.

94

ARITHMETIC OPERATIONS

CHAP. 7

7.2 CARRY AND OVERFLOW UNDER SUBTRACTION The way in which the C and V condition codes are influenced by the result of a subtraction operation (Le., by SUB or CMP instruction) is the following:

c = (I

if subtraction did not result in carry from MSB

o otherwise l if operands are of opposite signs and the result is of

V=

{o

the same sign as the number subtracted (source) otherwise

Examples Again, we shall use 4-bit words.

Example (Decimal)

4-bit 2'sComplement Subtraction

6 -(+3) 3

0110 +1101 ,0011 1

4 -(-2) 6

0100 +0010 -0110

4 -(-5)

9 -5

-(+7) -2 -3 -(+2) -5

-2 -(-5)

3

Final Value of V

o

o

OK

o

OK

0100 +0101 -1001

wrong

0101 +1001 1110 1101 +1110 ,1011 1 1110 +0101 .(0011 1

Binary Result is

C

o

OK

o

o

OK

o

o

OK

SEC. 7.3

95

DOUBLE-PRECISION ARITHMETIC

Example (Decimal)

4-bit 2'sComplement Subtraction

-4

1100 +1010 £0110 1

-(+6)

-10

Final Value of C

V

Binary Result is

wrong

°

Inspecting these examples we can conclude (as we did with addition) that the result of subtraction is incorrect only if V = 1. The negation operation (NEG), when applied to a nonzero number, results in C = 1; when it is applied to 0, it results in C = O. Notice that the negation of a number (which consists of 1's-complementing it and adding 1) produces a carry only when the number is O. Thus, a negation operation results in C = 1 if there is no carry, and in C =0 if there is carry.

7.3 DOUBLE-PRECISION ARITHMETIC In some applications the range of numbers accommodated by a single long word is not sufficient, and two consecutive long words are employed to store a number. In the 68000 a two long word, or double-precision, number is stored in a 64-bit 2's-complement form. The low order long word holds the least Significant bits of the number, while the high-order long word holds the most significant bits of the number. The MSB of the high-order long word is the sign bit of the entire number:

o 31

31

Sign~~__

H __ ig_h-_O_rd_e_r__________L -_ _ _ _ _ _ _L_O_w_-o_r_de_r______

- L_ _ _ _ _ _ _ _ _ _

o

~

2's-complement number

While a long word can handle numbers on the order of 2*10 9 , with double precision the 68000 can handle numbers on the order of 8*10 18 (more than the square, since we have 63 bits instead of31). How do we add two double-precision numbers, say a and b? Suppose that a is stored in AL and AH, b in BL and BH, and a + b is to be stored in BL and BH (where the suffix L denotes low-order long word and H high-order long word). To compute a + b it is not sufficient to issue ADD.LAL,BL followed by ADD.LAH,BH, since this will ignore a possible carry from the low-order long word. This carry, which is the value of C after the low-order addition is executed, must be added to BH (or to AH) just before the high-order addition is performed. This operation is facilitated by the instruction

96

ARITHMETIC OPERATIONS

CHAP. 7

ADDX source,destination which performs (destination) = (destination) + (source) + X, where X is the X condition code and is set to the same value as C whenever C is affected by an instruction. Thus, to compute a + b we issue

MOVE MOVE ADD.L ADDX.L

#AL,AO #BL,Al (AO),(Al) -(AO),-(Al)

!Examples For the remainder of this section, all examples will assume 4-bit long words. Example 1

Initially

Example 2

{AH AL BH BL

0001 1001 0011 0101

After ADD.L (AO),(A1)

{AH AL BH BL

0001 1001 0011 1110 (C = 0)

0001 1001 0011 0000 (C= 1)

After ADDX.L -(AO),-(Al)

{AH AL BH BL

0001 1001 0100 1110

0001 1001 0101 0000

+-a~

+-b~

+-a+b~

0001 1001 0011 0111

To negate a double precision-number a stored in AL and AH, we 1's-complement AH, 1's-complement AL, add 1 to AL, and add the resulting carry to AH. This can be accomplished by first negating AL (which performs the complement and the add 1) and then using the NEGX.L AH instruction which finishes the negation of the double precision number by setting AH to 0 - AH - X. This works because the NEG instruction sets the C (and hence the X) bit to 0 if there is a carry and 1 if not. Thus, if there is no need to carry, X = 1, and AH is set to 0 - AH - 1 which amounts to complement, add 1, subtract 1, and thus is equivalent to complementing. If there is a need to carry, X = 0, and AH is set to 0 - AH which is equivalent to a complement and add 1. Thus, to compute -a, we issue: NEG.L NEGX.L

AL AH

Examples Example 1

Initially After NEG.L AL After NEGX.L AH

AH AL AH AL AH AL

0101 1011 +-+a~ 0101 0101 (C = 1) 1010 0101 +- -a ~

Example 2

0101 0000 0101 0000 (C = 0) 1011 0000

SEC. 7.4

THE TST AND CMP INSTRUCTIONS

97

Suppose that a and b are stored as before and we wish to compute b - a and store it in BL and BH. We start by subtracting AL from BL. We now notice that the MSB resulting from this operation generates a carry only if no "borrow" is required in subtracting the leftmost digit of AL from the leftmost digit of BL. Hence, the C bit resulting from the subtraction of AL from BL is 1 only if a "borrow" is required from BH. When this is the case, the "borrowing" can be done with SUBX.L. [The SUBX instruction sets the destination to (destination) - (source) - X.] Thus, to compute b - a we issue:

MOVE MOVE

#AL,AO #BL,A1 (AO),(A1) -(AO),-(A1)

SUB.L SUBX.L

Examples Example 1

Initially

Example 2

{BH BL AH AL

0101 1001 0011 0101

After SUB.L (AO),(Al)

{BH BL AH AL

0101 0100 (C = 0) 0011 0101

0101 1101 (C= 1) 0011 1010

After SUBX.L -(AO),-(Al)

{BH BL AH AL

0010 0100 0011 0101

0001 1101 0011 1010

~b-+ ~a-+

~

b-a-+

0101 0111 0011 1010

From Sections 7.1 and 7.2 we know that the result of addition or subtraction is incorrect only if it produces overflow (Le., V = 1). In the double-precision case this means that the overall result is incorrect only if the high-order addition or subtraction produces V = 1; overflow produced by the low-order operation is irrelevant.

7.4 THE TST AND CMP INSTRUCTIONS The instruction CMP s,d (also CMPA, CMPI, and CMPM) forms the difference (d) - (s) inside the ALU in some inaccessible internal register (not in d!). Thus, CMP has no effect on either s or d. It is most often used to set the X, Z, N, C, and V condition codes to facilitate the comparison of (s) and (d). It is important to note that the X, C, and V codes resulting from CMP are set according to the rules of subtraction (stated in Section 7.2). We shall elaborate on the applications of CMP in Section 7.5. The instruction TST d is equivalent to (d) ~ (d). Its most common purpose is to set the Z and N condition codes to facilitate determining whether (d) is zero or nonzero, positive or negative.

ARITHMETIC OPERATIONS

98

CHAP. 7

Examples Results of Instruction Contents of CM Word Addressed 1000

0000 0100 0045 6275 8400 OOFA 0186 48BO FFD4 8516

TST 1000 N

Z

1 0 0 0 0 0 0 0 0 0

0 0 0 0 0 1 1 1 1 0

TST.B 1000 Z N

TST.B 1001 Z N

1 0 1 0 0 1 0 0 0 0

1 1 0 0 1 0 0 0 0 0

0 0 0 0 1 0 0 0 1 1

0 0 0 0 0 1 1

1 1 0

While TST is intended for testing entire bytes, words, or long words, the AND instruction can be used to test selected portions of words (or bytes or long words). For example, to branch to L if either bit 7 or bit 15 of DO (or both) are 1, we can issue: MOVE AND BNE

DO,D7 #$8080,D7 L

Note that the AND instruction changes the destination so that a copy usually needs to be made.

7.5 MORE ON BRANCH INSTRUCTIONS In Section 4.8 we listed 14 conditional branch instructions. Eight of them, BEQ, BNE, BPL, BMI, BVC, BVS, BCC, BCS are best suited to test whether the result of an arithmetic operation is zero or nonzero, positive or negative, did or did not cause overflow, and did or did not produce a carry. To compare two numbers, say a in A and b in B, it is most convenient to issue (since CMP A,B is not a valid instruction): MOVE B,DO CMP A,DO

SEC. 7.5

99

MORE ON BRANCH INSTRUCTIONS

(which foons b - a) and then any of the following instructions:

Signed conditional branches

Mnemonic

Branch to d if*

rE d

NVV=O NVV= I Zv(NVV)=O Z v (N V V) = I

(b>=a) (ba) (ba) (b b if (AH) > (BH), or if: (1 ) (AH) = (BH), and (2) (AL) > (BL), where (AL) and (BL) are unsigned! Thus, to jump to X if a > b and to Y otherwise, we write: MOVE.L CMP.L BGT BLT MOVE.L CMP.L

AH,DO BH,DO X

Y BL,DO AL,DO

SEC 7.5

MORE ON BRANCH INSTRUCTIONS

101

y

x

BLS EQU

y

EQU

*

*

Another use of the unsigned branch instructions is in testing for two conditions simultaneously. Suppose that we want to know if (DO) is less than 0 or greater than 7 and if so, to branch to location X. We can write:

CMP BGT TST BLT

#7,00 X DO X

An alternative solution is:

CMP BHI

#7,DO X

This works because a negative number, when treated as an unsigned number, is always "higher" than any positive number. It is worth mentioning that another solution would be AND BNE

#$FFF8,DO X

For a loop that involves testing a condition a given number of times (for example, looking through an array for a specified value), the DBcc (decrement and branch conditionally) instruction can be used. The form of the DBcc instruction is DBce

Dn,label

where ee is one of the allowed conditions for Bee, or T (true), or F (false). (Most assemblers allow DBRA as another way of saying DB F.) The effect of this instruction is as follows 1. If the condition specified by ec is true, go on to next instruction (no branch); 2. If the condition is false, decrement Dn and 2a. If (Dn) is -1 then go on to the next instruction; 2b. If (Dn) is not -1, branch to label. Note that the decrement and test is done until the condition is true, not if it is true. This makes the effect of the DBee condition essentially the opposite of that of

N

0

...

0011 - 0110 1101

1110 - 0010 ,r1100 1

3 - (+6) -3

-2 - (+2) -4

1010 -1010 ,r0000 1

1110 - 1011 ,r0011 1

-6 - (-6)

-2 - (-5) 3

0

-1

1101 -1110 1111

-3 -(-2)

-9

- (+5)

-4

0

1100 - 0101 ,r0111 1

0101 - 0101 ..,-0000 1

5 - (+5)

4

0111 - 0011 ,r0100 1

0

0

0

0

0

0

Z

Binary

7 - (+3)

"

,.

0

0

0

1

1

0

0

N

BRANCH EXAMPLES

....

Example

Decimal

,.

TABLE 7.1

0

0

0

0

1

0

0

C

0

0

0

0

0

0

0

V

0

0

0

0

'"NVV

...

0

1

1

0

0

0

0

1

0

ZV(NVV) CVZ

Resultant Condition Codes

./

./

./

./

BGE

,.

./

./

./

./

BLT

"

./

./

BGT

Signed Conditionals

./

./

./

./

./

./

BLE

...

./

./

./

./

./

./

./

./

BLOS

./

./

./

./

./

./

'" BHIS

...

./

./

BLO

Unsigned Conditionals

BHI

,

SEC. 7.6

SHIFT INSTRUCTIONS

103

the Bee condition. Also, the number of times through a loop that ends with a DBee instruction is one more than the starting value of Dn. Thus, Dn must be set to one less than the number of times needed to process the loop. (An alternative method is to branch to the DBee instruction to start the loop.) The value in Dn is viewed as being a word-sized value. As an example of the use of DBee, the following program segment searches an array starting at ARRAY for the value stored in X. The length of the array is stored in N.

LOOP

MOVE #ARRAY,AO MOVE N,DO SUBQ #I,DO MOVE X,DI EQU * CMP (AO)+,Dl DBEQ DO,LOOP TST DO BPL FOUND NUMBER NOT FOUND

;START OF ARRAY ;NUMBER OF ELEMENTS ;DBEQ CHECKS FOR-I ;NUMBER TO LOOK FOR ;CHECK FOR DESIRED VALUE ;LOOP BACK IF NOT FOUND ;-1 IF NOT FOUND ;NUMBER WAS FOUND

An instruction that can be used to save the result of a comparison for future testing and to aid in the computation of a compound logical expression (one with logical operations such as AND and OR) is the Sec (set according to condition) instruction. The form of the Sec instruction is:

See

destination

where ee is any of the conditions allowable on the DBee instruction, and the addressing mode of the destination is any mode except address register direct, the PC relative modes, or immediate. The effect of See is to set the destination byte to all 1s ($FF) if the condition is true, and all Os ($00) if the condition is false. Almost every instruction influences the Z and N condition codes. This means that a test instruction which one may be tempted to insert after an operation and before a branch instruction is actually redundant. For example, in: SUB TST BEQ

A,DO DO NEXT

the TST instruction is superfluous.

7.6 SHIFT INSTRUCTIONS The 68000 has a number of instructions that shift the contents of a word (or byte or long word) some number of bits to the left or right (see Figure 7.1):

ARITHMETIC OPERATIONS

104

ROL ROR ASL ASR LSL LSR ROXL ROXR

CHAP. 7

rotate left rotate right arithmetic shift left arithmetic shift right logical shift left logical shift right rotate left with extend rotate right with extend

Addressing modes allowed for the ROL, ROR, ASL, ASR, LSL, and LSR instructions are discussed in Section 4.3.5. Addressing modes allowed for ROXL and ROXR are the same as those for ROL and ROR. The above operations are word size. Byte and long word operations are defined analogously. To understand the operation of ROL and ROR, we take the destination word (or byte or long word) and form a "ring" by joining its ends. Assuming that the sequence of bits 0,1,2,3, ... in this ring is arranged in the counterclockwise direction, the effect of ROL is to rotate the contents of the ring counterclockwise, and the effect of ROR is to rotate the contents clockwise. (The C bit is set to the last bit that was shifted off the end, leftmost for ROL, rightmost for ROR.) The effect of ASL is to shift the contents of the destination word (or byte or long word) 1 bit left, with the rightmost bit replaced by O. The last bit shifted out of the leftmost bit is put into the C (and X) bit. This operation is equivalent to multiplying the contents of the destination (regarded as a 2's-complement signed number) by a power of 2. The V code is set to 1 if the result of this multiplication is out of bounds. The effect of ASR is to shift the contents of the destination word (or byte or long word) 1 bit right, with the leftmost bit remaining unchanged and the last rightmost bit shifted out replacing the old value of C (and X). This operation is equivalent to dividing the contents of the destination by a power of 2 (and truncating any fractional part). Examples (A)

After ASL A

After ASR A

0032 FFCE (=-32)

0064 (=32*2) FF9C (=-64)

0019 (=32/2) FFE7 (=-19)

LSL and LSR set the C (and X) bit to the last bit shifted out of the destination, and fill with zeros on the other end. ROXL and ROXR are similar to ROL and ROR except that the X bit is inserted in the "ring". For example, ROXR #1 ,DO rotates the ring formed by appending the X bit to DO to the right 1 bit. Thus, the rightmost bit of DO is moved into X, and the old X value is moved into the leftmost bit of DO. Like ADDX, SUBX, and NEGX, these are handy in dealing with double-precision values.

SEC. 7.7

105

EXAMPLE: ASCII-TO-BINARY CONVERSION

ROL

0

q

ROR

ASL

Operand

4

LSR

~

Operand

tEJ

Operand

~

0

I

~

r-G

Q5

Operand

Operand

I~

Operand

Figure 7.1

r-G

cgj

Operand

ROXL~ ROXR

~~

Operand

~

ASR

LSL

I=-:J

~

I

Shift instructions.

7.7 EXAMPLE: ASCI/-TO-BINARY CONVERSION

To illustrate the use of some of the instructions and features introduced in the preceding sections, we shall present a program which accepts a decimal number N from the terminal and converts it into a 16-bit 2's-complement form. N may be prefixed with + or - and is always followed by a carriage return. It should not exceed 32767 10 in magnitude.

ARITHMETIC OPERATIONS

106

String

CR

(05)-(05) - #'0' (A3) +-(05)

Figure 7.2

Flowcharts for ASCII-to-binary program.

CHAP. 7

SEC. 7.7

107

EXAMPLE: ASCII-TO-BINARY CONVERSION

Initialize sign flag, pointer and result.

(05)-0 (02)-0 (04)-((A3)) (A3)-(A3) + 1

(A3) = pointer to next character of N (04) = currently scanned character of N (05) = N'ssign flag (0 if N >= 0; 1 if N I
I) onto the system stack, using the macro PUSH of Example 5.

Definition

SAVE COUNT

COUNT

Call Expansion

(a)

COUNT COUNT

MACRO SET REPT PUSH SET ENDR ENDM

I,J I [J-I+l] /2 \ COUNT COUNT+2

SAVE

12,23

SET PUSH SET PUSH

12 \12 14 \14 [23-12+1]/2=6 macro calls

COUNT

(b)

COUNT COUNT

COUNT

SET PUSH SET MOVE SET MOVE

22 \22 12 TAB+12,-(SP) 14 TAB+14,-(SP)

SET MOVE

22 TAB-t22.-(SP)

Another useful directive is the IRP ("indefinite repeat") directive: ~heading

IRP

repeat block

} ENDR

~

terminator

SEC. 10.5

CONDITIONAL ASSEMBLY

163

where d is a dummy argument and al> a2, ... , ar are actual arguments. The assembler (during pass I) duplicates the repeat block r times, first with d replaced with at. next with d replaced with a2, and so forth. For example, to restore DO, D3, D4, and DS from the system stack without using MOVEM, we can write IRP MOVE ENDR

REG, (SP)+,REG

A similar directive is d,str

IRPC

+-

}

d

ENDR

heading repeat block

+-

terminator

where d is a dummy argument and "str" is a string of characters. The assembler duplicates the repeat block, first with d replaced by the first character of "str", next with d replaced by the second character of "str", and so on. For example, to restore DO, D3, D4, and DS from the system stack, we can write N,034S (SP)+,D 'N

IRPC MOVE ENDR

(As in macros, , serves to separate adjacent symbols but is deleted during duplication.)

10.5 CONDITIONAL ASSEMBL Y Conditional assembly directives enable the programmer to either include or exclude a segment of source code, depending on certain conditions. This facility is frequently used inside macro definitions, where parameter values (as defined during pass I of the assembly process) determine which version of the macro should be expanded. The general form of the conditional directive is: IF

cond,s

+}

ENDC

heading conditional block

+-

terminator

where "cond" specifies a condition that s mayor may not satisfy. If s does satisfy the

ADVANCED ASSEMBLY LANGUAGE TECHNIQUES

164

CHAP. 10

condition, the conditional block is assembled; otherwise it is ignored. Table 10.1 lists some of the allowable IF directives. If the directive IFF appears inside the conditional block, then the part of the block lying below the IFF is assembled only if the preceding IF condition is not satisfied (like an ELSE if Fortran or Pascal). Thus, the IFF directive partitions the block into two subblocks, only one of which is actually assembled. TABLE 10.1

CONDITIONAL DIRECTIVES

Directive

IF IF IF IF IF IF IF IF IF IF IF IF

Assemble Block If

EQ,s NE,s LT,s GT,s LE,s GE,s

DF,s NDF,s B, NB, IDN, DIF,

s= 0 s*O sO s= 0 s is defined s is not defined macro argument s is null (absent) macro argument s is not null (present) macro arguments sand t are identical macro arguments sand t are different

Examples

1. The macro BRANCH generates the instruction BRA X if the relative distance to X is less than $7FFF, and the instruction JMP X otherwise. Definition

BRANCH

MACRO IF BRA IFF JMP ENDC ENDM

X LT,*-X-$7FFF X

X

X must be defined when this macro is called (that is, the branch must be a backward branch). This restriction can be removed if your assembler allows the expression ABS(*-X)-$7FFF. 2.

BET A is a subroutine which may be nested either within a subprogram called

SEC. 10.5

CONDITIONAL ASSEMBLY

165

SUB1 (Le., whose first instruction is labeled SUB1) or within a subroutine called SUB2. If the nesting subprogram is SUB1, BETA is expected to start with +1 in DO; otherwise, BETA is expected to start with -1 in DO. (The rest of BETA is invariant.) This can be accomplished by opening BETA in the following manner: EQU IF MOVEQ IFF MOVE ENDC

BETA

* DF,SUBI #1 ,DO #-1 ,DO

For example, if the nesting program is SUB2, the program will look as follows: SUB2

EQU

BETA

EQU MOVE

* *

#-1 ,DO

3.

The intent of the macro IFP is to introduce a Pascal-like statement into an assembly language program. A call has the form: IFP

X,REL,Y ,THEN ,S 1,ELSE,S2

where REL is any of the relations EQ, NE, LT, GT, LE, and GE; where SI and S2 are single-line 68000 instructions (or, perhaps, macro calls); and where" ,ELSE,S2" is optional. Note that calling this macro is made tricky by the restrictions on addressing modes allowed by the CMP instruction.

Definition

IFP

MACRO LOCAL CMP B'REL IF S2 ENDC

X,REL,Y,THEN,S1,ELSE,S2 L,M Y,X L NB,

ADVANCED ASSEMBLY LANGUAGE TECHNIQUES

166

L M

Call

Expansion

??OOOO ??OOOI

??0002 ??0003

CHAP. 10

BRA EQU SI EQU ENDM

M

IFP

DO,GT,Dl,THEN,,ELSE,

IFP

SAM,LE,#JOE,THEN,

CMP BGT CLR BRA EQU SUB EQU CMP BLE BRA EQU MOVE EQU

* *

Dl,DO noooo

DO nOOOl

*

Dl,DO

* #JOE,SAM ??0002 nOO03

*

SAM,JOE

*

4. The macro MAX puts in DO the maximum of one to three arguments. The code generated depends on the number of arguments, which is determined by the NARG directive (see Section 10.2).

Definition

MAX

NEXT

OUT

MACRO LOCAL NARG MOVE IF IF CMP BGT MOVE ENDC EQU CMP BGT MOVE ENDC EQU ENDM

A,B,C NEXT,OUT K A,DO NE,K-l NE,K-2 C,DO NEXT C,DO

*

B,DO OUT B,DO

*

SEC. 10.5

CONDITIONAL ASSEMBLY

167

Call

Expansion

MAX

P

MAX

P,Q

MAX

P,Q,R

MOVE EQU

P,DO

MOVE CMP BGT MOVE EQU

P,DO Q,DO ??OOOI Q,DO

MOVE CMP BGT MOVE EQU CMP BGT MOVE EQU

P,DO R,DO ??0002 R,DO

(K=l)

??OOOO

*

(K=2)

??OOOI

*

(K=3)

??0002

??0003

*

Q,DO ??0003 Q,DO

*

S. Conditional assembly can be used to implement "macro recursion." The following macro is functionally equivalent to the previous example. The macro actually calls itself recursively, with the recursion terminating by virtue of the IF which checks to see if there is a second argument. Definition

MAX

NEXT

MACRO LOCAL IF MAX CMP BGT MOVE IFF MOVE ENDC EQU ENDM

A,B,C NEXT NB, B,C A,DO NEXT A,DO A,DO

*

ADVANCED ASSEMBLY LANGUAGE TECHNIQUES

168

Call

Expansion ??OOOO

nOO01

??0002

??0003

??0004

nOO05

MAX

P

MAX

P,Q

MAX

P,Q,R

MOVE EQU

P,DO

*

Q MAX MOVE Q,DO EQU * ENDM OF MAX Q CMP P,DO BGT ??0002 MOVE P,DO EQU * Q,R MAX MAX R MOVE R,DO EQU * ENDM OF MAX R Q,DO CMP BGT ??0004 Q,DO MOVE EQU * ENDM OF MAX Q,R CMP P,DO BGT ??0005 MOVE P,DO EQU *

EXERCISES

10.1. The macros MAC1 and MAC2 are defined as follows: MAC1

MACRO MOVE.B ENDM

K,X D'K,X+K

MAC2 I

MACRO SET

N,Z 0

CHAP. 10

CHAP. 10

EXERCISES

169

REPT MAC 1 SET ENDR ENDM

N \I,Z 1+1

Explain what MAC2 accomplishes and expand the call: MAC2

5,TEMP

10.2. (a) The macro STORE is defined by STORE

X,N

MACRO MOVE.B SET IF STORE ENDC ENDM

#I,X+I 1+1 NE,I-N

X,N

Expand the call

I

SET STORE

°

TAB,7

(b) Write a nonrecursive macro that takes the same action as STORE.

10.3. The macro FOO is defined as follows: FOO

MACRO CMP'BETA R5 DC.W IF DS.W IFF DS.B ENDC ENDM

R5,ITEMS,LENGTH,BETA DO,D1 ITEMS B, LENGTH LENGTH

Expand the calls L5

FOO FOO

,,IOO, ,,52

ADVANCED ASSEMBLY LANGUAGE TECHN IQUES

170

CHAP. 10

10.4. Write a subroutine POWSUB and a macro POWMAC each of which computes XN (where X is found in DO and N in Dl). Compare the subroutine with the macro, indicating their relative advantages and disadvantages. Would it be better to implement either recursively?

10.5. Write a macro XOR which, when called with XOR A,B, puts in DO the exclusive or of A and B. That is, DO will contain 1's only in those bits where A and B differ.

10.6. Write a macro JMPSR, headed JMPSR

MACRO

SUB ,REGS ,ARRAY

which stores the registers listed in REGS into a block of words starting at ARRAY, performs JSR SUB, and then restores the contents of all these registers. For example, the call: JMPSR

DPADD ,024 ,TEMP

stores DO, D2, and D4 in TEMP, TEMP+4, and TEMP+8; performs JSR DPADD; and then restores DO, D2, and D4.

10.7.

A fictitious computer called SIMCOM (SIMple COMputer) has one generalpurpose register called an accumulator (ACC). Its central memory and number representation are identical to those of the 68000. The following is its instruction set, written in SIMCOM assembly language (where d is a CM address): Instruction

LDA STO ADD SUB TRA TRZ TRN HALT

d d d

d d d d

Action

Load: (ACC) +- (d) Store: (d) +- (ACC) Add: (ACC) +- (ACC) + (d) Subtract: (ACC) +- (ACC) - (d) Transfer: Branch to d (unconditionally) Transfer on zero: Branch to d if (ACC) = 0 Transfer on negative: Branch to d if (ACC) Halt

? @

A B

C D

176

APPENDIX B

7-bit Hex Code 45 46 47 48 49 4A 4B 4C 40 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 50 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 60 6E 6F

Character

ASCII CHARACTER SET

Remarks

E F G H I J K L M N 0 P Q R S T U V W X Y Z [

\ ]

. a b c d e f g

h j

k 1 m n 0

Up arrow on some terminals. Underline, back arrow (~) on some terminals . Accent grave.

APPENDIX B

ASCII CHARACTER SET

177

7-bit

Hex Code 70 71

72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F

Character

Remarks

p q r

s t

u v w x

y

z

{ I I

} DEL

Tilde Delete, rub out

APPENDIX C 68000 ADDRESSING MODES

TABLE 1

Mode

ADDRESSING MODES

Register

Name of Mode

Effective Address

Explanation

Dn

Dn

Operand is in Dn

An

An

Operand is in An

(An)

(An)

(An)+

(An)

Autodecrement

-(An)

(An)

N(An)

(N+(An))

Address of operand is in An Address of operand is in An; (An)+-(An)+i after operand is fetched* (An)+-(An)-i before operand is fetched*; address of operand is in An. Address of operand is N + (An)

N(An,Am) or N(An,Dm)

(N+(An)+(Am))

N

(N)

N

(N)

000

m

001

m

010

m

011

m

Data Register Direct Address Reg. Direct Address Reg. Indirect Autoincrement

100

ITr

101

m

110

m

111

000

Address Reg. Indirect with Displacement Address Reg. Indirect with Index and Displacement Absolute Short

111

001

Absolute Long

178

Assembly Language

(N+(An)+(Dm) )

Address of operand is N+(An)+(Am) or N+(An)+(Dm) Address of operand is N (16-bit number) Address of operand is N (32-bit number)

APPENDIX C

TABLE 1

68000 ADDRESSING MODES

179

ADDRESSING MODES

Mode

Register

Name of Mode

111

010

111

011

111

100

PC Relative with Displacement PC Relative with Index and Displacement Immediate

Assembly Language

Effective Address

Explanation

N(PC)

(N+(PC))

Address of operand is N plus (PC)

N(PC,An) or N(PC,Dn)

(N+(PC)+(An))

#N

N

Address of operand is N+(PC)+(An) or N+(PC)+(Dn) Operand is the numberN**

(N+(PC)+(Dn))

*i = 1 for byte operation; i = 2 for word operation; i = 4 for long word operation. An exception: if A7 (SP, the stack pointer) is used for byte operation, then i = 2. **In some instructions, Mode 111 and Register 100 are used to indicate that another operand is in the status register (S R).

APPENDIX D 68000 INSTRUCTIONS

The following is a description of instructions available on the 68000. For further details on all instructions, see the M68000 16/32-BIT MICROPROCESSOR Programmer's Reference Manual. For convenience, below is an alphabetical list of the instructions described in this appendix: ABCD ADD ADD A ADD! ADDQ ADDX AND AND! AND! to CCR AND! to SR ASL ASR Bcc BCRG BCLR BRA BSET BSR BTST CRK CLR

180

CMP CMPA CMPI CMPM DBcc DNS DIVU EOR EORI EORI to CCR EORI to SR EXG EXT ILLEGAL

lMP JSR LEA LINK LSL LSR MOVE

MOVE from SR MOVE to CCR MOVE to SR MOVEUSP MOVEA MOVEM MOVEP MOVEQ MULS MULU NBCD NEG NEG X NOP NOT OR ORI ORI to CCR ORI to SR PEA RESET

ROL ROR ROXL ROXR RTE RTR RTS SBCD Scc STOP SUB SUBA SUBI SUBQ SUBX SWAP TAS TRAP TRAPV TST UNLK

APPENDIX D

68000 INSTRUCTIONS

181

In the tables that follow, abbreviations will be used for addressing modes. These abbreviations are:

DDIR ADIR INDR AINC ADCRDISP INDX ABSH ABLO PCDS PCIN -

data register direct address register direct address register indirect autoincrement autodecrement address register indirect with displacement address register indirect with index and displacement absolute short absolute long program counter relative with displacement program counter relative with index and displacement IMMD - immediate

An X in a table will indicate that the addressing mode is valid, a dash (-) will indicate invalid. Thus, in the following table, data register direct is a valid mode for source and destination, while absolute long is valid for destination but not valid for source.

Source Destination

DDlR ADlR lNDR AlNC ADCR DlSP lNDX ABSH ABLO PCDS PClN lHHD X X X X X X X X X X

ABOD - add binary coded decimal Adds the source operand and the X bit to the dest I nat Ion operand and stores the result In the destination. Both source and destination are viewed as binary coded decimal number$. The operation size must be byte. The Z bit Is cleared If the result Is not zero and unchanged If the result Is zero. The C and X bits are set If the operation produced a carry and c I eared I f not. The N and V bits are undefined (no way to know what the result Is). Source and destination operands must be either both data reg I ster direct or both autodecrement. No mI x I ng of modes Is allowed. DDIR ADIR INDR AINe ADCR DISP INDX ABSH ABLO PeDS PeIN I"MD

Source

X

DestInation

X

or DDIR ADIR INDR AINC ADCR DISP INDX ABSH ASlO PCOS PCIH IPUm

Source Destination

X X

~

APPENDIX D

182

ADD - add bInary

68000 INSTRUCTIONS

(see also ADDA. ADDI. ADDQ. and ADDX)

Adds the source operand to the destInatIon operand and stores the result In the destInatIon. The operatIon sIze may be byte. word. or long word. The N bIt Is set IF the result Is negatIve. cleared IF posItIve. The Z bIt Is set IF the result Is zero. cleared IF not. The V bIt Is set IF an overFlow Is generated. cleared IF not. The C bit fs set IF a carry Is generated. cleared IF not. The X bit Is set the same as the C bit. Address mode combinations FollowIng two tables:

can

be

taken

From

one

of

the

OOIR AOIR INOR AINC AOCR DISP INDX ABSH ABLO PCOS PCIN II1HO Source

X

x

Dest I nat Ion

x

x

x

x

x

OOIR AOIR INDR AINe ADCR OISP INDX ABSH ABLO PCDS PCIN 111110 X X X X X X X X X X X X

Source Cest I MIt Ion

)(

ADDA - add address (see also ADD. ADDI. ADDQ. and ADDX) Adds the source operand to the destination operand and stores the result in the destination. The operat Ion size may be word or long word. destination register Is set regardless or the size.

The

ent ire

Condition codes are not aFFected. Address table: Source Destination

mode

combinations

can

be

taken

rrom

the

rol lowing

ODIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN I"HD X X X X X X X X X X X X X

ADDI - add Immediate (see also ADD, ADDA, ADDQ. and ADDX) Adds the source operand to the destination operand and stores the result In the destination. The operation size may be byte, word, or long word.

APPENDIX D

68000 INSTRUCTIONS

183

The N bit is set IF the result is negative, cleared iF positive. The Z bit is set iF the result is zero, cleared iF not. The V bit is set iF an overFlow is generated, cleared iF not. The C bit is set iF a carry is generated. cleared iF not. The X bit is set the same as the C bit. Address table: Source Destination

mode

combinations

can

be

taken

From

the

Fol lowing

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD 'X X

X

X

X

X

X

X

X

ADDQ - add quick (see also ADD. ADDA. ADDI. and ADDX) Adds the source operand to the destinatIon operand and stores the result In the destination. IF the destinatIon is an address regIster. condlblon codes are not aFFected. Otherwise. the bits are aFFected as Follows. The N bit Is set IF the result Is negative. cleared IF posItive. The Z bit Is set IF the result Is zero. cleared IF not. The V bit Is set IF an overFlow Is generated, cleared IF not. The C bit Is set IF a carry Is generated. cleared IF not. The X bit Is set the same as the C bit. The source operand must be an Immediate number From 1 to 8. Address table: SoYrce Destination

mode

combinations

can

be

taken

From

the

Following

DO I R AD I R I NOR AINC AOCR DI SP I tIlX ABSH ABLO PCDS PC I N I l'iI'iD X

x

)(

)(

)(

x

x

ADOX - add with extend (see also ADD, ADDA, ADDI. and ADDQ) Adds the source operand and the X condition code to destination operand and stores the result In the destination.

the

The operation size may be byte. word. or long word. The N bit Is set IF the result Is negative, cleared IF pes It I vee The Z bit I s set I F the resu I t fs zero, unchanged IF not. (This Is to allow For a test For zero or a multiple-precisIon number.) The V bit Is set IF an overFlow Is generated. cleared IF not. The C bit Is set IF a carry Is generated. cleared IF not. The X bit Is set the same as the C bit.

68000 INSTRUCTIONS

APPENDIX D

184

Source and destination operands must be either both data reg I ster dIrect or both autodecrement. No mI x I ng or modes Is allowed.

OOIR ADIR INOR AINC ADCR OISP IHOX ABSH ABlO PCOS PCIN 1""0 Source Destination Source Destination

AND -

X

X

or DOIR ADIR INOR AINC ADCR OISP INOX ABSH ABlO PCOS PCIN II'lI'lD X X

logical and (see also ANOI) Forms the logical AND or the source operand to the destination operand and stores the result In the destInation. The operation size may be byte. word. or long word. The N bit Is set Ir the result Is negative. cleared Ir positive. The Z bit Is set IF the result Is zero. cleared IF not. The V and C Flags are always cleared. The X bit Is not arFected. Address mode combinations Following two tables:

can

be

taken

From

one

of

the

DOIR ADIR INOR AliIIC AOCR OISP INOX ABSH ABlO PCOS PCIN II1KO Source Destination

X

X

x

X

x

x

X

ODIR PlDIR fNOR AfiIIC AOCR OISP INOX flBSH ABLO PeDS PCIN 111110 Source DestinatIon

ANOK -

X X

X

X

X

X

X

X

X

X

X

X

logical and Immediate (see also ANO)

Forms the logical AND or the source operand to the destination operand and stores the result In the destinatIon. The operatIon size may be byte. word. or long word. The N bit Is set IF the result Is negative. cleared IF positive. The Z bit Is set IF the result Is zero. cleared IF not. The V and C Flags are always cleared. The X bit Is not aFFected. Address table:

mode

combinations

can

be

taken

From

the

Following

APPENDIX D

68000 INSTRUCTIONS

Source Dest Inat Ion

185

DDIR ADIR INOR AINe ADCR OISP INOX ABSH ABLO PCDS PCIN l"ltO X

x

x

x

X

x

AMDI to COR - and Immediate to condition code register Perrorms logical AND or source operand with the condition code register (the lower byte or the SR) and stores the result In the conditIon code register. The operation size must be byte. Cond It' on codes are operation.

set

to the

resu I t

or

the

log' ca I

AND

The source addressing mode must be Immediate. and the destInation must be "CCR" (IndicatIng the condItion code register).

AMOK to SR - and Immediate to status register Perrorms logical AND the result In the SR.

or

source operand with the SR and stores

The operation size must be word. Cond I t Ion operation.

codes are

set

The source addressing destination must be "SR".

to the mode

resu I t

must

be

or

the

log I ca I

Immediate.

and

AND

the

ASL - arithmetic shirt lert Sh I rts the dest I nat Ion operand 1ert. The number of bit s to shift is given by the source operand. The bits shifted out of the leftmost bit are put in the C and X flags. Bit 0 Is rilled with 0 after every bit shift. The operation size may be byte. word. or long word. A11 condit ion codes are affected by thi s Instruction. The N bit is set if the result is negative. cleared If positive. The Z bit I s set I f the resu 1t i s zero. cleared I f not. C and X are described above. The V bit Is set if the most significant bit Is changed at any time dur I ng the sh I ft I ng operat i on and cleared otherwise.

APPENDIX D

186

There are three forms of the ASL Instruction. 1)

They are:

both operands data registers

Source Destination 2)

68000 INSTRUCTIONS

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X

source Immediate, destination data register

Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X

3) source implied to be 1 (single bit shift) and destination taken from the following table Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X X X X X X

ASR - arithmetic shift right

Sh I fts the dest I nat Ion operand right. The number of bit s to shift Is given by the source operand. The bits shifted out of the rightmost bit are put In the C and X flags. The most significant bit Is unchanged, effectively extending the sign bit to the right. The operation size may be byte, word, or long word. AI I cond i t Ion codes are affected by th is I nstruct I on. The N bit Is set If the result Is negative, cleared If positive. The Z bit Is set If the result Is zero, cleared If not. C and X are descrIbed above. The V bit Is cleared. There are three forms of the ASR InstructIon. 1)

both operands data regIsters

Source DestInation 2)

They are:

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PeIN IHHD X X

source Immediate, destination data register

Source DestInation

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PeIN IHHD X X

3) source Implied to be 1 (single bit shift) and destination taken from the following table Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PCIN IHHD X X X X X X X

APPENDIX D

68000 INSTRUCTIONS

187

Bee - branch conditionally Branch to address given by destination if condition is true. Address given In machine language offset. No addressing modes apply.

as

either

byte

or

word

Condition codes are not affected. Possible values for cc and their meanings are Code EQ

NE GT LT

GE LE HI LS PL

MI CC CS VC VS

Meaning equal not equal greater than less than greater or equal less or equal high low or same plus minus carry clear carry set overflow clear overflow set

Test (I=true, O=false)

z

-Z N~VQ-Z

+

-N~-VQ-Z

N"-V + -NQV N"V + -N"-V Z + N"-V + -N"V

N

-C C

-v V

means complement + means or " means and

BCHG - test a bit and change Tests bit In the destination and then changes it. The number of the bit to test is given by the source operand. The test result is reflected in the Z code. The tested bit is changed - set to 1 if it is initially 0, cleared if Initially I. The operation size is byte if the destination Is a memory location and long word If the destination is a data register. The Z code is set to 1 if the bit tested is zero and cleared if It is one. The other codes are not affected.

Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X X X X X X X X X

APPENDIX D

188

68000 INSTRUCTIONS

BCLR - test a bit and clear Tests bit In the destination and then clears It. The number of the bit to test Is given by the source operand. The test result Is reflected in the Z code. The tested bit is cleared - set to O.

",

The ope rat I on size I s byte I f the dest I nat I on I s a memory location and long word If the destination Is a data register. The Z code Is set to 1 If the bit tested Is zero and cleared if It is one. The other codes are not affected.

Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X X X X

BRA - branch always Branch to address given by destination. Address given In machine language offset. No addressing modes apply.

as

either

byte

or

word

Condition codes are not affected.

BSET - test a bit and set Tests bit In the destination and then sets It. The number of the bit to test Is given by the source operand. The test result is reflected In the Z code. The tested bit Is set to 1. The operat I on size I s byte I f the dest I nat I on I s a memory location. and long word If the destination Is a data register. The Z code Is set to 1 If the bit tested Is zero and cleared if It Is one. The other codes are not affected.

Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X X X X

BSR - branch to subroutine Branch to subroutine at address given by destination. The long word address of the word Immediately following the BSR instruction is pushed onto the system stack before the branch. Address given In machine language offset. No addressing modes apply. Condition codes are not affected.

as

either

byte

or

word

APPENDIX D

68000 INSTRUCTIONS

189

BTST - bit test Tests bit in the destination. The number of the bit to test Is given by the source operand. The test result Is reflected In the Z code. The operat Ion size I s byte I f the dest I nat I on I s a memory location and long word If the destination Is a data register. The Z code Is set to 1 If the bit tested Is zero and cleared If It Is one. The other codes are not affected. Address mode combinations following two tables:

can

be

taken

from

one

of

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 111110 Source Destination

X X

X

X

X

X

X

X

X

X

X

X

or Source Destination

CHK -

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 111110 X )( X X X X X X X X X

check data register against bounds Tests a data register given by the destination against an upper bound given by the source operand. 1f" the dest I nat Ion va I ue I s positive and less than or equal to the source value, then the only eff"ect of" the I nstruct I on I s on the cond I t Ion codes. 1f the dest I nat Ion va I ue Is negat I ve or greater than the source va I ue, then a trap through address $18 takes place. The operation size must be word. The N code Is set to 1 If" the data register tested is negative and cleared If" It Is positive. The X code Is not af"f"ected. The Z, V, and C codes are lef"t undefined - they could be 0 or I with no real way of" knowing which. DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 111110

Source Destination

X

)()()(

X

)(

)(

)(

)(

)(

)(

X

CLR - clear C I ears (sets to zero) the dest.1 nat I on I ocat Ion. The operation size may be byte. word, or long word. set.

The N. C. and V bits are always cleared. The X bit Is not af"fected.

The Z'bit Is always

APPENDIX D

190

68000 INSTRUCTIONS

Address mode can be taken from the following table: Destination

C"P - compare

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X X

{see also CMPA. CMPI. CMPM}

Subtracts the source operand from the destination but does not change the destination. Only condition codes are affected by this instruction. The operation size may be byte. word. or long word. The N bit is set if the result is negative. cleared if positive. The Z bit is set if the re"sult is zero. cleared if not. The V bit is set if an overflow is generated. cleared if not. The C bit is set if a borrow is generated. cleared If not. The X bit is not affected. Address table: Source Destination

mode

combinations

can

be

taken

from

the

following

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PeIN IHMD X X X X X X X X X X X X X

C"PA - compare address

{see also CMP. CMPI. CMPM}

Subtracts the source operand from the destination but does not change the destination. Only condition codes are affected by this instruction. The operation size may be word or long word. but word length source operands are sign extended to 32 bits before the operation is done. The N bit is set if the result is negative. cleared if positive. The Z bit Is set If the result Is zero. cleared if not. The V bit Is set If an overflow is generated. cleared If not. The C bit is set if a borrow is generated. cleared if not. The X bit is not affected. Address table: Source Destination

mode

combinations

can

be

taken

from

the

following

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PCIN IMMD X X X X X X X X X X X X X

APPENDIX D

68000 INSTRUCTIONS

CMPI - compare Immediate

191

{see also CMP, CMPA, CMPM}

Subtracts the source operand from the destination but does not change the destination. Only condition codes are affected by this instruction. The operation size may be byte, word. or long word. The N bit is set If the result Is negative, cleared If positive. The Z bit Is set If the result Is zero, cleared if not. The V bit Is set If an overflow Is generated, cleared If not. The C bit is set If a borrow is generated. cleared If not. The X bit Is not affected. Address table:

mode

combinations

can

be

taken

from

the

fol lowing

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN I""D Source Destination

X X

C"P" - compare memory

X

X

X

X

X

X

X

{see also CMP, CMPA. CMPI}

Subtracts the source operand from the destination but does not change the destination. Only condition codes are affected by this instruction. The operation size may be byte, word, or long word. The N bit is set if the result is negative, cleared if positive. The Z bit is set if the result Is zero, cleared if not. The V bit Is set If an overflow is generated, cleared if not. The C bit Is set If a borrow Is generated, cleared If not. The X bit Is not affected. Both source and destination operands must be autoincrement:

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PCIN 1""0 Source Destination

X X

DBcc - decrement and branch conditionally Branch to address gIven by destInatIon and decrement source data regIster If condItIon Is false and the source data regIster Is posItIve. Source operand must be a data reg I ster • Oest I nat I on address that Is gIven In machIne language as an offset.

I s an

APPENDIX D

192

68000 INSTRUCTIONS

Source operation size must be word. Condition codes are not Possible values Code T F

~or

a~~ected.

cc and their meanings are Test (I=true. O=~alse) I (always true) o (always ~else)

Meaning true ~alse

egual not equal greater than less than greater or equal less or equal high low or same plus minus carry clear carry set over~low clear over~low· set

EQ

NE GT LT

GE LE HI

LS PL MI CC CS VC VS

Z

-Z

N*V·-Z + -N"-V·-Z N*-V + -N"V N*V + -N*-V Z + N"-V + -N"V -C*-Z

-C C

-V V

means complement

+ means or * means and Note: Many programmers ~ I nd that the most use~u I vers I on o~ this Instruction Is OBF (some assemblers accept OBRA). This can be used to program a counting loop very e~~Iclently as ~ollows:

LOOP

MOVE EQU

#n-I,OO

OBRA

OO,LooP

OIVS - divide signed

;LooP n TIMES

"

(see also DIVU)

Divides the destination operand by the source operand and stores the resu I t I n the dest I nat i on. The dest i nat Ion I s a long word operand and the source I s a word operand. The d f vis i on Is done using Signed arithmetic (MSBs are viewed as sign bits). The lower word o~ the destinatIon Is set to the integer quotient, and the upper word to the remainder. Division by zero causes a trap. If overflow Is detected before the completion of the operation, the destination is not changed. The N bit is set if the quotient Is negative, cleared if positIve, undefIned if overflow. The Z bit Is set if the quotient Is zero. cleared if not, undefined if overflow. The V bit is set if an overflow Is generated, cleared If not. The C bIt is always cleared. The X bit is not affected. The destination operand must be a data register, the source may be any mode except address regIster dIrect.

APPENDIX D

68000 INSTRUCTIONS

Source Destination

193

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X X X X X X

DIVU - divide unsigned

(see also DIVS)

o I v I des the dest I nat Ion operand by the source operand and stores the resu I t i n the dest I nat I on. The dest I nat I on I s a long word operand and the source I s a word operand. The d I v I s I on Is done using unsigned arithmetic (MSBs are not viewed as sign bits. the numbers are assumed positive). The lower word of the destination Is set to the Integer quotient. and the upper word to the rema I nder. 0 I v I s Ion by zero causes a trap. If overf I ow Is detected before the completion of the operation, the destination Is not changed. The N bit I s set to the MSB of the quot I ent I f no overf I ow. undefined If overflow. The Z bit Is set If the quotient Is zero. cleared If not. undefined If overflow. The V bit Is set If an overf low I s generated, c I eared I f not. The C bit I s a I ways cleared. The X bit Is not affected. The destination operand must be a data register. the source may be any mode except address register direct. Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X X X X X X

EOR - logical EXCLUSIVE OR

(see also EORI)

Forms the logical EXCLUSIVE OR of the source operand and the destination operand and stores the result In the destination. The operation size may be byte, word, or long word. The N bit Is set If the result Is negative, cleared If positive. The Z bit Is set If the result Is zero, cleared If not. The V and C bits are always cleared. The X bit Is not affected. Address table: Source Destination

mode

combinations

can

be

taken

from

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X X X

following

194

68000 INSTRUCTIONS

APPENDIX D

EORI -

logical EXCLUSIVE OR Immediate

(see also EOR)

Forms the logical EXCLUSIVE OR of the source operand and the destination operand and stores the result In the destination. The operation size may be byte, word, or long word. The N bit Is set IF the result Is negative, cleared iF positive. The Z bit is set iF the result is zero, cleared IF not. The V and C bits are always cleared. The X bit is not aFFected. Addres s table: Source Destination

EORI to CCR -

mode

como I nat Ions

can

be

taken

From

the

Fo I low I ng

DDIR ADIR INOR AINC ADCR DISP INDX ABSH ABLO PeDS PeIN 1""0 X X X X X X X X X X

logical EXCLUSIVE OR immediate to condition code register

Forms the logical EXCLUSIVE OR of the source operand and the CCR (condition code register, the low byte of the SR) and stores the result In the CCR. The operation size must be byte. The condition codes are set based on the result of the logical operation. The source operand must be Immediate.

EORI to SR -

logical EXCLUSIVE OR immediate to status register

Forms the logical EXCLUSIVE OR of the source operand and the SR and stores the result In the SR. The operation size must be word. The condition codes are set based on the result of the logical operation. The source operand must be immediate.

EXG - exchange two registers Exchanges the contents of the source and destination registers. The operation size must be long word (Full register exchange). Condition codes are not aFFected.

APPENDIX D

195

68000 INSTRUCTIONS

Both operands must be reg i ster direct but may be either data registers or address registers (or one of each). DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD

X X

Source Destination

X X

EXT - sign bit extend Extends the sign bit of the specified data register. sized operations it copies bit 7 Into bits 8 through 15. word operations It copies bit 15 Into bits 16 through 32.

For word For long

The operation size can be either word or long word. The N bit is set If the result Is negative, cleared if positive. The Z bit Is set If the result Is zero, cleared if not. The V and C bits are always cleared. The X bit Is not affected. There is no source operand. data register. Destination

The destination operand must be a

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMHD X

ILLEGAL - Illegal Instruction This Is an assembly language instruct Ion that generates the It same machine language as the DC.W $4AFC pseudo-instruction. causes an Illegal Instruction trap. Condition codes are not affected. There are no operands for this Instruction.

J"P - jump

(see also BRA)

Causes an unconditional branch to the address specified by the destination operand. This operation is unslzed. Condition codes are not affected. There I s no source operand. The mode of the operand can be taken from the following table. Destination

dest I nat Ion

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X X X X X X

68000 INSTRUCTIONS

APPENDIX D

196

JSR - jump to subroutine

(see also BSR)

Jump to the subroutine at the address given by the destination. The long word addres s of' the word I mmed I ate I y f'o I low I ng the JSR instruction Is pushed onto the system stack bef'ore the branch. This operation Is unslzed. Condition codes are not af'f'ected. There I s no source operand. The mode operand can be taken f'rom the f'ollowing table. Destination

of'

the

dest I nat Ion

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X

LEA - load ef'f'ectlve address Set the dest I nat i on address source operand.

reg I ster to the

address of' the

The operation size must be long word. Condition codes are not af'f'ected. The destination must be an address register. The mode of' the source operand can be taken f'rom the f'ollowlng table. Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X )()()( X X X X

LINK - link and allocate

(see also UNLK)

The long word contents of the source address register Is pushed onto the stack. Next, the updated SP I s moved I nto the source address register. Finally, the Immediate destination operand value I s added to the SP. A negat I ve dest I nat Ion operand I s used to a I locate stack area since the system stack grows toward lower addresses. Thus, the LINK and UNLK I nstruct Ions can be used to allocate and deal locate space for local variables In subroutines. Condition codes are not aff'ected. The source operand must be an destination must be Immediate data.

address

register,

DDIR ADIR INDR AINC ADCR DISP IMDX ABSH ABLO PCDS PCIM IMHD Source Destination

X X

and

the

APPENDIX D

LSL -

68000 INSTRUCTIONS

197

logical shift left Sh i fts the dest i nat i on operand I eft. The number of bits to shift is given by the source operand. The bits shifted out of the leftmost bit are put In the C and X flags. Bit 0 is filled with a after every bit shift. The operation size may be byte. word. or long word. AI I cond i t i on codes are affected by th I s I nstruct I on. bit Is set If the result is negative. cleared If positive. bit Is set If the result is zero. cleared if not. C and described above If the shift count is not zero. If the shift Is zero, the C bit Is cleared and the X bit Is unaffected. bit is always cleared (compare to ASL). There are three forms of the LSL Instruction. 1)

They are:

both operands data registers

Source Destination 2)

The N The Z X are count The V

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PCIN IMMD X X

source Immediate, destination data register DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMHD

Source Destination 3)

X

source Implied to be 1 (single bit shift) and destination taken from the following table

Destination

LSR -

x

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMHD X X X X X X X

logical -shift right Sh I fts the dest I nat Ion operand right. The number of bit s to shift Is given by the source operand. The bits shifted out of the rightmost bit are put in the C and X flags. The most significant bit Is filled with a after every bit shift (compare to ASR). The operation size may be byte. word. or long word. AI I cond i t i on codes are affected by th I s I nstruct Ion. bit Is set If the result Is negative, cleared If positive. bit Is set If the result Is zero, cleared If not. C and described above if the shift count is not zero. If the shift is zero, the C bit Is cleared and the X bit is unaffected. bit Is always cleared.

The N The Z X are count The V

APPENDIX D

198

There are three rorms or the LSR Instruction. I)

68000 INSTRUCTIONS

They are:

both operands data registers

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 Source Destination 2)

source Immediate, destination data register

Source Destination 3)

X X

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X X

source Implied to be 1 (single bit shift) and destination taken from the following table

Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X X X X X X X

ttOVE - move data rrom instructions)

source

to

dest i nat i on

(see

other

MOVE

Sets destination operand to value or source operand. The operation size may be byte, word, or long word. The N bit is set Ir the value moved Is negative, cleared ir positive. The Z bit is set ir the value moved is zero, cleared ir not. The V and C bits are always cleared. The X bit is not arrected. Addressing mode combinations can be taken rrom the rollowing table.

Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X X X X X X X X X X X X X X X X X X X X

ttOVE From SR - move data rrom status register to destination MOVE instructions)

(see other

Set destination operand to value In status register. The operation size must be word. Condition codes are not arrected. The source operand must be the status reg i ster (SR). The destination operand's mode can be taken rrom the rollowing table. Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X X X X X X X X

APPENDIX D

199

68000 INSTRUCTIONS

HOVE to CCR - move data rrom source to other MOVE Instructions)

cond I t I on

code

reg I ster

(see

Move value or source operand Into low byte or status register. Operation size must be word, but only the low byte Is actually moved. Th I s means that an even address must be spec I r I ed ror source operands that are In memory. Condition codes are set based on the source value. The destination must be "CCR", the source operand's mode can be taken rrom the rollowlng table.

Source

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN X X X X X X X X X X

ttOVE to SR - move data rrom source to status register Instructions)

I~HD

X

(see other MOVE

Move value or source operand Into the status register. The operation size must be word. Condition codes are set based on the source value. The destination must be "SR", the source operand's mode can be taken rrom the rol lowing table.

Source

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN X X X X X X X X X X

HOVE USP - move user stack pointer

IH~D

X

(see other MOVE Instructions)

Move the contents or the user stack pointer (USP) to an address register, or move the contents rrom an address register to the USP. The operation size must be long word (entire register moved). Condition codes are not arrected. Either the source or destination must be "USP", and the other must be an address register. [MOVE USP,An or MOVE An.USPJ

HOVEA - move address Move source destination.

(see other MOVE Instructions) operand

va 1 ue

to

addres s

reg i ster

spec I r i ed

by

Operation size may be word or long word. but word size operands are sign extended to ril 1 the entire destination register.

200

APPENDIX D

68000 INSTRUCTIONS

Condition codes are not affected. The destInation must be an address regIster. The addressing mode for the source operand may be taken from the fol lowing table. Source DestInatIon

OOIR AOIR INOR AINC AOCR OISP INOX ABSH ABLO PCOS PCIN IHHO X X X X X X X X X X X X X

OOOVE" - move multiple registers

A specified list of registers Is moved to or from consecutive memory locations. To specify the list of registers to move, a dash (-) Is used to Indicate a range of registers. and a slash (/> Is used to separate registers and ranges. For example. In order to specify that 00. 03. 04. 05. 06. AI. A2. A3. and A6 are to be moved. the register list DO/03-D6/AI-A3/A6 could be used. . The order of movement depends on the addressIng mode used. below for further explanation.

See

The operation size can be word or long word. ConditIon codes are not affected. If the source operand Is a register list. the destInation can be taken from the following table. DDIR ADIR INOR AINC ADCR OISP INDX ABSH ABLO PODS PCIN 1""0 DestInation

X

X

)(

X

X

If the destination operand Is a register list, the source can be taken from the following table. OOIR AOIR INDR AINC ADCR OISP INOX ABSH ABLO PCDS Pelt-! 114"0 Source

X

X

X

X

X

)(

X

X

1f the addres sIng mode Is anyth I ng except auotodecrement. the order of movement Is A7 ••••• AO. 07 ••••• 00. If the autodecrement mode I s used. the order of movement Is 00. •••• 07. AO. •••• A7. ThIs Insures that the r.eglsters moved to memory wIll be restored In the proper order.

~VEP

- move peripheral data

Move data from data reg i ster to alternate bytes I n memory or from alternate bytes in memory to data register. Thus a MOVEP of the value $1234 to the address $7001 will set byte $7001 to $12 and byte $7003 to $34. The operation sIze can be word or long word.

APPENDIX D

68000 INSTRUCTIONS

201

Condition codes are not aFFected The operand that is not a data register must be speciFied using address register indirect with displacement.

Source Destination Source Destination

~VEQ

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PC OS PCIN IHHD X X or DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X

- move quick Move immediate byte size number to data is automatically sign bit extended to Fi 11 The number is stored I n such a way as to Instruction than the other MOVE instructions

register. The number the entire register. make MOVEQ a Faster (see Appendix E).

The operation size must be long word. The N bit Is set IF the result Is negative, cleared IF positive. The Z bit is set IF the result is zero, cleared iF not. The V and C bits are always cleared. The X bit is not aFFected. The below. Source Destination

only

possible

addressing

mode

combination

is

indicated

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X

MULS - multiply signed

(see also MULU)

Multiply two signed word size operands and store the product as a long word value. The operand sizes must be word. word.

The product size must be long

The N bit Is set IF the result is negative. cleared IF positive. The Z bit is set IF the result Is zero. cleared IF not. The V and C bits are always cleared. The X bit is not aFFected. Address i ng mode comb I nat Ions can be taken From the Fo 1 low I ng table. Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X X X X X X

202

APPENDIX D

"ULU - multiply unsigned

68000 INSTRUCTIONS

(see also MULS)

Multiply two unsigned word size operands and store the product as a long word value. The operand sizes must be word. word.

The product size must be long

The N bit Is set Ir the MSB or the result Is one. cleared Ir It Is zero. The Z bit Is set Ir the result Is zero. cleared Ir not. The V and C bits are always cleared. The X bit Is not arrected. Address I ng mode comb I nat ions can be taken rrom the ro II ow i ng table.

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X X X X X X X X X X X

Source

DestinatIon

X

NBCD - negate binary coded decimal Negate (subtract rrom zero) the binary coded decImal value In the destination operand. Store the result in the destination. The operation size must be byte. The N and V bits are under I ned (no way to know what the I r values are). The Z bit is unchanged ir the result Is zero. cleared If not. The C bit Is set If a borrow Is generated. cleared if not. The X bit Is set the same as the C bit. There I s no source operand. The address I ng mode destination operand can be taken from the following table.

Destination

for

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X X X X X X X X

NEG - negate Negate (subtract from zero) the value operand. Store the result In the destination.

In

the

destination

The operation size may be byte. word. or long word. The N bit Is set If the result is negative. cleared if positive. The Z bit is set if the result is zero. cleared if not. The V bit Is set If an overflow Is generated. cleared if not. The C bit Is cleared if the result Is zero. set Ir not. The X bit is set the same as the C bit.

APPENDIX D

68000 INSTRUCTIONS

203

There Is no source operand. Addressing mode for destination operand can be taken from the following table. Destination

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X X X X X X X

NEGX - negate with extend Adds the destination operand and the X bit, and then the sum is negated (subtracted from zero). The result Is stored in the destination. The operation size may be byte, word, or long word. The N bit Is set If the result Is negative, cleared If positive. The Z bit is unchanged If the result Is zero, cleared If not. The V bit is set If an overflow is generated, cleared if not. The C bit is set If a borrow is generated, cleared If not. The X bit Is set the same as the C bit. There Is no source operand. Addressing mode for destination operand can be taken from the following table. Destination

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMHD X X X X X X X X

NaP - no operation Performs no operat Ion. Execut I on cont I nues with the next instruction. Used for putting space in programs for debugging and for self-modifying code. This operation Is

~nslzed.

There are no source or destination operands.

NOT -

logical not (complement) Forms logical complement of the value In operand. Stores the result In the destination.

the

destination

The operation size may be byte. word. or long word. The N bit Is set If the result Is negative, cleared if positive. The Z bit Is set If the result Is zero, cleared if not. The V and C bits are always cleared. The X bit Is not affected.

204

68000 INSTRUCTIONS

APPENDIX D

There Is no source operand. Addressing mode for destination operand can be taken from the following table. Destination

the

DOIR ADIR INOR AINC ADCR OISP INOX ABSH ABLO PCOS PeIN 1""0 X X X X X X X X

OR - logical or

(see also ORI)

Forms the logical OR of the source operand and the destination operand and stores the result In the destination. The operation size may be byte. word. or long

wor~.

The N bit Is set If the result Is negative. cleared If positive. The Z bit Is set If the result Is zero. cleared If not. The V and C bits are always cleared. The X bit Is not affected. Address mode combinations following two tables:

Source Destination

Source Destination

can

be

taken

from

one

of

the

DDIR ADIR INOR AINe ADCR DISP INDX ABSH ABlO PeDS PCIN 1""0 X

X

x

x

x

x

x

x

DDIR ADIR INDR AINe ADCR DISP INDX ABSH ABlO PCOS PCIN 1""0 X

X

X

X

X

X

X

X

X

X

X

X

ORr - logical or Immediate

(see also OR)

Forms the logical OR of the source operand and the destination operand and stores the result In the destinatIon. The operation size may be byte. word. or long word. The N bit Is set If the result Is negative. cleared If positive. The Z bit Is set If the result Is zero. cleared If not. The V and C bits are always cleared. The X bit Is not affected. Address table.

Source Destination

mode

combinations

can

be

taken

from

the

DDIR ADIR INOR AINC ADCR DISP INDX ABSH ABlO PCOS PCIN 1""0

x

x

X

x

x

X

X

following

APPENDIX D

68000 INSTRUCTIONS

ORI to CCR -

205

logical or Immediate to condition code register

Perrorms logical OR or source operand with the condition code register (the lower byte or the SR) and stores the result in the condition code register. The operation size must be byte. Condition operation.

codes

are

set

to

the

result

or

the

logical

OR

The source addressing mode must be Immediate. and the destination must be "CCR" (Indicating the condition code register).

ORI to SR -

logical or Immediate to status register

Perrorms logical OR or source operand with the SR and stores the result In the SR. The operation size must be word. Condition operation.

codes

are

set

The source addressing destination must be "SR".

to

the

mode

result

must

be

or

the

logical

Immediate.

OR

and

the

onto

the

PEA - push errectlve address Push the system stack.

errect i ve

address

or the

source

operand

The operation size must be long word. Condition codes are not arrected. The destination is Implied to be the system stack and is not speciried on the Instruction. The addressing mode ror the source operand can be taken rrom the rollowing table.

Source

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PeIN 1""0 X X X X X X X

RESET - reset external devices Sends a reset signal to all external devices. This operation Is unslzed.

206

APPENDIX D

68000 INSTRUCTIONS

Condition codes are not aFFected. There are no operands For this Instruction.

ROL -

rotate left Sh i fts the dest I nat Ion operand 1eft. The number of bits to shiFt is given by the source operand. The bits shifted out of the leFtmost bit are put In the C bit and bit 0 of the destination. Thus, the shift is circular. The operation size may be byte, word, or long word. The N bit is set if the result Is negative: cleared if positive. The Z bit is set If the result is zero, cleared if not. The C bit Is described above. The V bit Is always cleared. The X bit Is not affected. There are three forms of the ROL Instruction. I)

both operands data registers

Source Destination 2)

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X

source Immediate, destination data register

Source Destination 3)

They are:

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X

source Implied to be 1 (sIngle bit shift) and destination taken from the following table

Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMHD X X X X X X X

ROR - rotate right Shifts the destination operand right. The number of bits to shift Is given by the source operand. The bits shifted out of the rightmost bit are put in the C bit and the leftmost bit of the destination. Thus, the shift is circular. The operation size may be byte, word, or long word. The N bit Is set If the result is negative, cleared If positive. The Z bit Is set If the result Is zero, cleared If not. The C bit Is described above. The V bit is always cleared. The X bit is not affected.

APPENDIX D

68000 INSTRUCTIONS There are three Forms of the ROR Instruction. I)

207

They are:

both operands data registers

Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PeIN IMMD X X

source Immediate, destination data register

Z)

Source Destination 3)

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PeDS PeIN IMMO X X

source Implied to be 1 (single bit shift) and destination taken from the following table

Destination

DOIR ADIR INOR AINC ADCR DISP INOX ABSH ABLO PeDS PeIN IMMO X X X X X X X

ROXL - rotate leFt with extend Sh I Fts the dest i nat i on operand I eFt. The number of bit s to shiFt is given by the source operand. The bits shiFted out of the leFtmost bit are put In the C and X bits. Bit 0 of the destination Is set to the previous contents of the X bit. Thus.' the shiFt Is circular iF the X bit is viewed as being to the leFt of the leFtmost bit of the destination. The operation size may be byte, word. or long word. The N bit is set iF the result is negative. cleared iF positive. The Z bit Is set IF the result Is zero. cleared IF not. The C and X bits are described above. The V bit Is always cleared. There are three Forms of the ROXL Instruction. 1)

both operands data registers

Source Destination 2)

DOIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PeIN IMMO X X

source Immediate. destination data register

Source Oest I nat-Ion 3)

They are:

OOIR ADIR INOR AINC ADCR DISP INOX ABSH ABLO PCOS PCIN I"MO X X

source Implied to be I (single bit shift) and destination taken from the following table

Destination

DDIR ADIR INOR AINC ADCR DISP INDX ABSH ABLO PeOS PeIN IMMO X X X X X X X

208

APPENDIX D

68000 INSTRUCTIONS

ROXR - rotate right with extend ShiFts the destination operand right. The number 01' bits to shiFt Is given by the source operand. The bits shiFted out 01' the rightmost bit are put In the C and X bits. The leFtmost bit 01' the destInation Is set to the prevIous contents 01' the X bit. Thus, the shiFt Is circular IF the X bit Is viewed as being to the right 01' the rightmost bIt 01' the destinatIon. The operation size may be byte. word, or long word. The N bIt Is set IF the result Is negative. cleared IF posItIve. The Z bit Is set IF the result Is zero. cleared IF not. The C and X bIts are descrIbed above. The V bit Is always cleared. There are three Forms 01' the ROXR fnstructton. 1)

They are:

both operands data registers DDIR ADIR INDR AINe ADCR DISP KNOX ABSH ABlO PCDS PCIN 11lIII0

Source DestinatIon 2)

X X

source ImmedIate. destInatIon date regIster DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABlO PCOS PCIN nlro

Source DestInatIon 3)

X X

source IIJf)I fed to be I (sIngle bit shlf't) and destination taken from the followIng table DDIR ADIR INDR AINe ADCR DISP INDX A8SH ABlO PCOS PCIN IttII)

Destination

X

RTE - return f'rom exception

X

X

X

X

X

X

(see also RTR)

Pops the top word oFf' the system stack I nto the SR and then pops the new top long word of'F the stack Into the PC. This operation Is unslzed. ConditIon codes are set according to the SR value popped oFf' the stack. There are no operands.

RTR - return and restore condition codes

(see also RTE)

Pops the top word 01'1' the system stack and puts Its low byte Into the condition code register (the low byte 01' the SR) and then pops the new top long word oFf' the stack Into the PC.

APPENDIX D

209

68000 INSTRUCTIONS

This operation Is unslzed. Condition codes are set according to the CCR value popped 01"1" the stack. There are no operands.

RTS - return From subroutine Pops the top long word 01"1" the stack Into the PC. This operation Is unslzed. Condition codes are not aFFected. There are no operands.

S8CD - subtract binary coded decimal Subtracts the source operand and the X bit From the destination operand and stores the result In the destination. Both source and destination are viewed as binary coded decimal numbers. The operation size must be byte. The Z bit Is cleared IF the result Is not zero and unchanged IF the resu 1t f s zero. The C and X b f ts are set IF the operat Ion produced a borrow and cleared If' not. The N and V bits are undeFined (no way to know what the result Is). Source and destination operands must be either both data reg I ster direct or both autodecrement. No mI x I ng 01" modes I s allowed. OOIR ADIR INDR AINC ADCR OISP INOX ABSH ABlO PCDS PCIN IMMO

Source Destination

X X

or DDIR AOIR INOR AINe ADCR OISP INDX ABSH ABlO PCDS PCIM IMHO

Source Destination

X X

See - set according to condition

Set destinatIon to alII's ($FF) IF the conditIon speciFIed by cc Is true and to all O's ($00) IF it is False.

The operation size must by byte. Condition codes are not aFFected.

210

APPENDIX D

68000 INSTRUCTIONS

Possible values for cc and their meanings are Meaning equal not equal greater than less than greater or equal less or equal high low or same plus minus carry clear carry set overflow clear overflow set true false

Code

EO NE

GT LT

GE LE HI LS PL

MI CC CS VC VS

T F

Test (l=true. O=false) Z

-Z

N*V*-Z + -N"-V*-Z N*-V + -N"V N*V + -N*-V Z + N"-V + -N*V

N

-C C

-v V 1

o

means complement

+ means or " means and There I s no source operand. The addres sing destination can be taken from the following table.

Destination

mode

for

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD X X X X X X X X

STOP - stop CPU

The source operand (which must be Immediate) Is moved Into the SR, the PC Is incremented to point to the next Instruction, and the CPU stops fetching Instructions. Execution resumes when an Interrupt or reset occurs or If the trace bit Is set., An Interrupt must have higher priority than the CPU in order to restart execution. This operation Is unslzed. The condition codes are set according to the value moved Into the SR. There is no destination operand. source operand must be Immediate.

The addressIng mode for the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IHHD Source

SUB -

X

subtract binary

(see also SUBA, SUBI. SUBQ, SUBX)

Subtracts the source operand from the destInatIon operand and stores the result In the destInation. The operatIon sIze may be byte, word, or long word.

APPENDIX D

68000 INSTRUCTIONS

211

The N bit Is set Ir the result is negative. cleared Ir positive. The Z bit Is set Ir the result Is zero, cleared Ir not. The V bit Is set Ir an overrlow Is generated, cleared Ir not. The C bit Is set Ir a borrow Is generated, cleared Ir not. The X bit Is set the same as the C bit. Address mode combinations rollowlng two tables:

can

be

taken

rrom

one

or

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PeIN 1""0 Source Destination

X A

Source Destination

x X X X X X X Data register direct allowed In the following form.)

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X X X X X X X X X X X X X

SUBA - subtract address (see also SUB, SUBI. SUBQ. and SUBX) Subtracts the source operand rrom the destination operand and stores the result In the destination. The

The ope rat Ion size may be word or long word. destination register Is set regardless or the size.

ent I re

Condition codes are not arrected. Address table: Source Destination

mode

combinations

can

be

taken

rrom

the

rol lowing

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X X X X X X X X X X X X X

SUBI - subtract immediate (see also SUB, SUBA, SUBQ. and SUBX) Subtracts the source operand rrom the destination operand ar.d stores the result in the destination. The operation size may be byte, word. or long word. The N bit is set ir the result is negative. cleared ir positive. The Z bit is set if the result is zero, cleared if not. The V bit is set if an overflow Is generated, cleared Ir not. The C bit Is set If a borrow is generated, cleared if not. The X bit Is set the same as the C bit. Address table:

mode

combinations

can

be

taken

from

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN 1""0 Source Destination

X X

X

X

X

X

X

X

X

fol lowing

APPENDIX D

212

68000 INSTRUCTIONS

SUBQ - subtract quick (see also SUB, SUBA, SUBI, and SUBX)

Subtracts the source operand from the destination operand and stores the result in the destination. The operation size maybe byte. word, or long word. If the destination is an address register, the condition codes are not affected. Otherw I se, the bits are affected as fo I lows. The N bit Is set if the result Is negative, cleared If positive. The Z bit Is set if the result Is zero, cleared if not. The V bit is set iT an overflow is generated. cleared if not. The C bit is set If a borrow Is generated, cleared If not. The X bit is set the same as the C bit. The source operand must be an immediate number Trom 1 to 8. Address table.

Source Destination

mode

combinations

can

be

taken

from

the

following

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X

X

X

X

X

X

X

X

X

SUBX - subtract with extend (see also SUB, SUBA. SUBI. and SUBQ) Subtracts the source operand and the X condition code from the destination operand and stores the result In the destination. The operation size may be byte, word, or long word. The N bit Is set If the result Is negative. cleared IT posit ive. The Z bit is set if the resul t i s zero, unchanged iT not. (This Is to allow for a test for zero of a multiple-precision number.) The V bit Is set If an overflow Is generated, cleared If not. The C bit Is set If a carry Is generated, cleared If not. The X bit is set the same as the C bit. Source and destination operands must be either both data register direct or both autodecrement. No mI x I ng of modes Is allowed.

Source Destination Source Destination

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X

or DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD X X

213

68000 INSTRUCTIONS

APPENDIX D

SWAP - swap halves or register Swap halves or a data register. The upper word Is set to the previous contents or the lower word. and the lower word Is set to the previous contents or the upper word. The operation size must be word. The N bit is set ir bit 31 or the destination Is one. cleared ir it Is zero. The Z bit is set Ir the entire 32-blt result is zero, cleared Ir not. The V and C bits are always cleared. The X bit Is not arrected. There is no source operand. data register. Destination

The destination operand must be a

DDIR ADIR IHOR AINC AOCR DISP INDX ABSH ABLO PCDS PCIN 1""0 X

TAS - test and set Test the current value or the destination and set the Nand Z bits accordingly (see below). Arter the test. the MSB or the destination Is set. The operation IS Indivisible (using a readmod i ry-wr I te memory cyc Ie) to a I low ror the synchron I zat Ion or several processors. The operation size must be byte. The N bit Is set Ir the original destination value is negative. cleared Ir positive. The Z bit is set ir the original destination value Is zero. cleared Ir not. The V and C bits are always cleared. The X bit Is not arrected. There I s no source operand. The address I ng destination can be taken rrom the rollowlng table. Destination

mode

DOIR ADIR INOR AINC ADCR OISP INOX ABSH ABLO PCOS PCIN IMMO X X X X X X X X

TRAP - trap Trap through trap vector speciFied by source operand. This operation Is unslzed. Condition codes are not arrected.

ror

the

APPENDIX D

214

There Is no destination operand. valid trap vector number ($O-$F).

68000 INSTRUCTIONS

The source operand must be a

DDIR ADIR INOR AINC AOCR OISP INDX ABSH ABlO PCOS PeIM 1""0

Source

X

TRAPV - trap on overrlow Trap through vector at $IC Ir the V bit Is set. otherwise no operation Is perrormed. This operation Is unslzed. CondItIon codes are not arrected. There are no operands.

TST - test Compares the source operand with zero. The condition codes are set according to the result or the test (see below). The operatIon sIze may be byte. word. or long word. The N b f t f s set I r the operand f s negat I ve. c I eared I r positive. The Z bit Is set Ir the operand Is zero. cleared Ir not. The V and C bits are always cleared. The X bIt Is not arrected. There I s no dest I nat I on operand. Address I ng modes source operand can be taken rrom the followIng table.

ror the

DOIR ADIR INDR AINC AOCR DISP INDX ABSH ABLO PeDS PeIM l"ltD X X X X X X X X

Source

UNLK - unlink and deallocate

(see also LINK)

The stack pOinter is set to the destination address register. Then, the new long word on the top or the stack Is popped into the destination. The operation size must be long word. Condition codes are not affected. There is no source operand. The addressing destination must be address register direct.

mode

of

the

DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IltltD Destination

X

o

APPENDIX E 68000 MACHINE LANGUAGE

The following is a description of the machine language of the 68000. For further details, see the M68000 16/32-BIT MICROPROCESSOR Programmer's Reference Manual. For convenience, below is an alphabetical list of the instructions described in this appendix:

ABCD ADD ADDA ADDI ADDQ ADDX AND ANDI ANDI to CCR ANDI to SR ASL ASR Bee BCHG BCLR BRA BSET BSR BTST CHK CLR

CMP CMPA CMPI CMPM DBee DIVS DIVU EOR EORI EORI to CCR EORI to SR EXG EXT ILLEGAL JMP JSR LEA LINK LSL LSR MOVE

MOVE from SR MOVE to CCR MOVE to SR MOVE USP MOVEA MOVEM MOVEP MOVEQ MULS MULU NBCD NEG NEGX NOP NOT OR ORI ORI to CCR ORI to SR PEA RESET

ROL ROR ROXL ROXR RTE RTR RTS SBCD Sec STOP SUB SUBA SUBI SUBQ SUBX SWAP TAS TRAP TRAPV TST UNLK

215

APPENDIX E

216

68000 MACHINE LANGUAGE

In the tables that follow, abbreviations will be used for addressing modes. These abbreviations are: DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD

-

data register direct address register direct address register Indirect autoincrement autodecrement address register Indirect with displacement address register Indirect with Index and displacement absolute short absolute long program counter relative with displacement program counter relative with index and displacement immediate

The addressing modes are coded in the machine language of most instructions as six-bit numbers. Three bits are referred to as the mode field, and the other three are called the register field. The codes for the addressing modes are the same for most instructions. The usual codes are:

Addressing mode DDIR ADIR INDR AINC ADCR DISP INDX ABSH ABLO PCDS PCIN IMMD

Mode Tleld 000

RegIster Tleld regIster number regIster number regIster number regIster number regIster number register number regIster number 000 001 010 011 100

DOl

010 Oil

100 101 110 1 11 11 1 III III III

For DISP and INDX, the "register number" listed above is the number of the address register that has the displacement or index added to it. For INDX and PCIN, an extra word is needed for index and displacement information. The format of this word is:

15 14 13 12 11 10 D/ A Reg.Num. W/L 0

9

8

o o

7

6

543 2 Displacement

o

APPENDIX E

68000 MACHINE LANGUAGE

217

where D/A is 0 for a data register, 1 for an address register. Reg. Num. is the number of the index register. W/L is 0 for a word size index and 1 for long word size index. And the low byte is the displacement as a signed 2's-complement number. An absolute short or absolute long address is stored in the word or words following the instruction. An immediate value is stored in the word or words following the instruction. Byte size immediate data is stored in the low byte of the word with the high byte set to zero ($00). If extra words are needed for both source and destination, the extra words for the source precede the extra words for the destination. Abbreviations to be used in describing the machine language are:

D/A

data register If 0, address register If I a-bit displacement destination mode field destination register field destination register number (If mode must be register direct) source mode field source register field source regIster number (If mode must be register dIrect) standard two bIt size fIeld, OO=byte, 0l a word, 10=long o for word size operatIon, I for long word

dlspB dst.md.fld dst.rg.fld dst.rg.num src.md.fld src.rg.fld src.rg.num std.slz !rilL

ABeD - add binary coded decimal 15 1

14 I

12

13

o

ADD - add binary

o

11 10 9 dst.rg.num

7

8

o

1

14 1

o

5

o

4

320

o D/A

src.rg.num

(see also ADDA, ADDI, ADDQ, and ADDX)

For data register direct source: are data regIster dIrect] 15 1

6

13

o

12 1

11

10

9

src.rg.num

8 1

[do not use if both operands

76543 std.siz dst.md.fld

2 0 dst.rg.fld

For data register direct destInatIon: [use If both operands are data register direct] 15 1

14 1

13

o

12 1

11

10

9

dst.rg.num

8

76543

o std.slz src.md.fld

210

src.rg.fld

APPENDIX E

218

68000 MACHINE LANGUAGE

ADDA - add address (see also ADD, ADD!. ADDQ, and ADDX) 15

14

1

1

13

o

12 1

11 10 9 dst.rg.num

8

W/L

7 1

6 1

5 4 3 src.md.fld

2 0 src.rg.fld

ADDI - add immediate (see also ADD, ADDA. ADDQ, and ADDX) 15 14 13 12 11 00000

10 1

9 I

8

o

7

6

5

4

3

std.slz dst.md.fld

2

1

0

dst.rg.fld

ADDQ - add quick (see also ADD. ADDA. ADDl, and ADDX) 15

o

14 1

13

o

12 1

11 10 9 qulck.num.

8

76543

o std.slz dst.md.fld

2 I 0 dst.rg.fld

A val ue

Where quick.num. Is the source operand. Indicates that the number 8 Is to be added.

of

zero

ADDX - add with extend (see also ADD, ADDA. ADD!. and ADDQ)

AND -

IS

14

I

I

13

o

12 I

II 10 9 dst.rg.num

8 I

7

6

std.slz

5

o

4

o

320 D/A src.rg.num

logical and (see also ANDI) For data register direct source: are data register direct]

IS

14

I

I

13

o

12

II

9

8

o src.rg.num

I

10

[do not use If both operands

7 6 4 3 5 std.slz dst.md.fld

For data register direct destination: are data register direct]

AND! -

IS

14

I

I

13

o

12

II

10

9

o dst.rg.num

8

o

[use

2

0

dst.rg.fld

if both operands

7 6 5 4 3 std.slz src.md.fld

2 0 src.rg.fld

logical and Immediate (see also AND)

IS

o

14

o

13

o

12

o

II

o

10

o

9 1

8

o

4 7 6 5 3 std.siz dst.md.fld

2 0 dst.rg.fld

The Immediate source operand fol lows the word described above.

APPENDIX E

68000 MACHINE LANGUAGE

219

ANDI to CCR - add immediate to condition code register

15 14 13 000

12 11 10 000

9 1

8

o

7

o

6

5

o

1

4 1

3 1

2 1

1

o

o

o

The immediate source operand Follows the word described above.

ANDI to SR - and immediate to status register

15 14 13 000

12 11 10 000

9 1

8

o

7

o

6

5 1

1

4

3

2

1

1

1

1

a

a o

The immediate source operand Follows the word described above.

ASL -

arithmetic shiFt leFt IF both operands are data registers:

15 1

15 1

14 1

13 1

12 0

1 1 10 9 src.rg.num

8

IF source is immediate: 14 13 12 11 10 9 I 1 0 shFt.count

8

1

1

6 7 std.siz

5 1

4 0

0 3 2 1 0 " dst. rg. num

7 6 std.siz

5 0

4 0

3 0

0 2 dst.rg.num

4 5 3 dst.md.num

2 0 dst.rg.num

Where shFt.count is the source operand. IF source is impl fed 1 :

15 1

14 1

13 1

12 0

11 0

10 0

9

8

0

1

7 1

6

1

ASR - arithmetic shiFt right IF both operands are data registers:

15 1 15 1

14 1

13 1

12 0

1 1 10 9 src.rg.num

IF source is immediate: 14 13 12 11 10 9 1 1 0 shFt.count

8

0 8

0

7 6 std.siz

5 1

4 0

3 0

0 2 dst.rg.num

7 6 std.siz

5 0

4 0

3 0

2 0 dst.rg.num

5 4 3 dst.md.num

0 2 dst.rg.num

Where shFt.count is the source operand. IF source is impl ied 1 :

15 1

14 1

13 1

12 0

11 0

10 0

9

8

0

0

7 1

6

1

220

APPENDIX E

68000 MACHINE LANGUAGE

Bee - branch conditionally 15 0

14 1

Where rollows:

13 1

12 0

9 a 1 1 10 condition type

condition

type

ce

Is

a

7

rour

6

5

bit

4 3 dlspa code

2

spec:. I ry i ng

0

ee as

rour bit code 0111 0110 1110 1101 1100 1111 0010 0011 1010 1011 0100 0101 1000 1001

EO NE GT LT GE LE HI LS PL MI CC CS VC VS

lr the a-bit displacement Is zero, the next word holds a 16-bit displacement. The displacement is the value to add to the program counter to get to the target or the branch. Don' t rorget that the PC Is always 2 more than the starting address or the Instruction being processed.

BCHG - test a bit and change For data register direct source: 15 0

14 0

13 0

12 0

1 1 10 9 src.rg.num

a 1

7 0

6 1

5 4 3 dst.md.rld

0 2 1 dst.rg.rld

a 0

7 0

6 1

4 5 3 dst.md.rld

0 2 1 dst.rg.rld

For Immediate source: 15 0

14 0

13 0

12 0

11 1

10 0

9 0

The Immediate source operand rollows the word described above.

BCLR - test a bit and clear For data register direct source: 15

o

14

o

13

o

12

o

11 10 9 src.rg.num

a

7

1

1

6

5

432 1 0 dst.rg.rld

o dst.md.rld

221

68000 MACHINE LANGUAGE

APPENDIX E

For Immediate source: 15

o

14

o

13

o

12

o

11 1

10

o

7 1

8

9

o

o

6

5

4

3

210

o dst.md.fld

dst.rg.fld

The Immediate source operand follows the word described above.

BRA - branch always 15

o

14 1

13 1

12 0

11 0

10 0

8

9

o

o

7

6

5

4 3 dlsp8

2

o

If the 8-blt displacement Is zero. the next word holds a 16-bit displacement. The displacement Is the value to add to the program counter to get to the target of the branch. Don' t forget that the PC I s always 2 more than the starting address of the instruction being processed.

IBSET - test a bit and set For data register direct source: 15 0

14 0

13 0

12 0

9 1 1 10 src.rg.num

8 1

7 1

6 1

4 3 5 dst.md.fld

0 2 1 dst.rg.fld

8 0

7 1

6

4 3 5 dst.md.fld

0 2 1 dst.rg.fld

For Immediate source: 15 0

14 0

13 0

12 0

1I I

10 0

9 0

1

The Immediate source operand follows the word described above.

IBSR - branch to subroutine 15

o

14 I

13 1

12 0

11 0

10 0

9

o

8 1

7

6

5

4 3 dlsp8

If the 8-bit displacement is zero. the next word displacement.

2 ~olds

o a J6-bit

The displacement Is the value to add to the program counter to get to the target of the branch. Don't forget that the PC is always 2 more than the starting address of the Instruction being processed.

APPENDIX E

222

68000 MACHINE LANGUAGE

BTST - bit test For data register direct source: 14

IS

a

13

a

12

II

o

o

10

9

src.rg.num

6

o

o

5 432 I 0 dst.md.fld dst.rg.fld

7

6

5 432 I a dst.md.fld dst.rg.fld

7

8 I

For Immediate source: 14

IS

o

13

a

a

12

II

10

0

I

0

9

o

8

a

o

o

The immediate source operand follows the word described above.

CHK - check data register against bounds 14

IS

a

13

1

a

14

13

12

11

10

9

o dst.rg.num

7

8 1

1

6

a

543 src.md.flg

2 0 src.rg.fld

ClR - clear 15

a

14

o

1

II

a

a

13

12

I

I

14

a

a

14

a

9 1

8

o

7 6 5 432 0 std.slz dst.md.fld dst.rg.fld

13 I

12 I

13

a

12

a

8

o

7 654 3 std.slz src.md.fld

2 0 src.rg.fld

{see also CMP. CMPI. CMPM} 11 10 9 8 dst.reg.num W/L

7

6

1

1

4 3 5 src.md.fld

2 0 src.rg.fld

{see also CMP. CMPA. CMPM}

C"PI - compare Immediate 15

0

II 10 9 dst.rg.num

C"PA - compare address IS 1

10

{see also CMPA. CMPI. CMPM}

C"P - compare 15

12

a

1

11

10

1

1

9

o

8

o

7 6 5 432 1 0 std.siz dst.md.fld dst.rg.fld

The immediate source operand follows the word described above.

68000 MACHINE LANGUAGE

APPENDIX E

CHPK - compare memory 15 1

14

o

13 1

12 1

223

{see also CMP. CMPA. CMPI} 11 10 9 dst.rg.num

8

7

1

6

4

0

o

3 1

2 0 src.rg.num

5

4

3

2 0 src.rg.num

5

std.slz

OSee - decrement and branch conditionally 15

o

14

1

Where rollows:

13

o

12 1

11 10 9 8 condition type

cond i t Ion

type

ee

a

1

rour

6 1

o

bit

o

code

1

spec I ry I ng

ee as

rour bit code 0111 0110 1110 1101 1100 1111 0010 0011 1010 1011 0100 0101 1000 1001 0001 0000

EQ NE GT LT GE LE HI LS PL HI CC CS VC VS F T

A 16-blt Instruction.

is

7

displacement

is

stored

in

the

word

rollowing

the

The displacement is the value to add to the program counter to get to the target or the branch. Don' t rorget ·that the PC is always 2 more than the starting address or the Instruction being processed.

DIVS - divide signed 15

1

14

o

13

o

(see also DIVU)

12

DIVU - divide unsigned 15 1

14

o

13

o

11

10

9

o dst.rg.num

12

8 1

7 1

6 1

543 src.md.rld

2 0 src.rd.rld

7

6 1

543 src.md.rld

210 src.rg.rld

(see also DIVS) 11

10

9

o dst.rg.num

8

o

1

APPENDIX E

224

EOR - logical EXCLUSIVE OR 15 1

14

o

13 1

12 1

(see also EORI)

9

8

src.rg.num

1

11

10

EORI - logical EXCLUSIVE OR Immediate 15 14 13 000

12 0

11 1

68000 MACHINE LANGUAGE

10 0

9 1

8

o

765

4

3

std.siz dst.md.fld

2

1

0

dst.rg.fld

(see also EOR) 7

6

5

432

std.siz dst.md.fld

1

0

dst.rg.fld

The Immediate source operand follows the word described above.

EORI to

CCR 15 0

14 0

logical EXCLUSIVE OR Immediate to condition code register 13 0

12 0

11 1

10 0

9 1

8 0

7 0

6 0

5 1

4

I

3 1

2 1

1 0

0 0

The Immediate source operand follows the word described above.

EORI to

SR 15 0

14 0

logical EXCLUSIVE OR Immediate to status register 13 0

12 0

11 1

10 0

9 1

8 0

7 0

6 1

5 1

4 1

The Immediate source operand follows the word

3 1

2 1

descrl~ed

1 0

0 0

above.

EXG - exchange two registers Two data registers: 15 1

14 1

13 0

12 0

1 1 10 9 src.rg.num

8 1

2

0

7 0

6 1

5 0

4 0

3 0

dst.rg.num

7 0

6 1

5 0

4 0

3 1

dst.rg.num

5 0

4 0

3 1

add.rg.num

Two address registers: 15 1

14 1

13 0

12 0

9

8

src.rg.num

1

11

10

2

0

One data register and one address register: 15 1

14 1

13 0

12 0

10 9 11 dat.rg.num

8 1

7 1

6 0

Where dat.rg.num Is the number of the data add.rg.num Is the number of the address register

2

register

0

and

225

68000 MACHINE LANGUAGE

APPENDIX E

EXT - sign bit extend 15

14

o

13

12

o

o

I1

10

9

8

o

o

o

10 0

9 I

8

10 1

9 1

8

7

6

5

4

3

W/L

o

o

o dst.rg.num

7 1

6 1

5 1

4 1

3

7 1

6

5

4

3

2

0

ILLEGAL - Illegal instruction 15

o

J"P - jump 15

o

14 I

13 12 11 001

o

1

2 1

o

1

o o

2

I

0

(see also BRA) 14 I

13 0

12 0

11 1

JSR - jump to subroutine 15

o

14 1

13 12 11 001

o

I

dst.md.fld

dst.rg.fld

(see also BSR) 9 1

8

o

7 I

6

I

10

9

8

7

6

543

1

1

1

src.md.fld

10

o

5

4

3

dst.md.fld

2

I

0

dst.rg.fld

lEA - load effective address 15

o

14 1

13

o

12

11

o dst.rg.num

lHMK - link and allocate 15

o

14 1

13

o

12

o

11 1

2

I

0

src.rg.fld

(see also UNLK) 10 1

9 1

8

o

7

o

6

1

5

o

4 1

3

2

0

o src.rg.num

The immediate data occupying the destination field assembly language instruction Is put in the following word.

in

lSL - logical shift left If both operands are data registers: 15 I

14 1

13 I

12

11

10

9

o src.rg.num

876 1 std.siz

5 1

4

o

3 I

2 0 dst.rg.num

the

226

APPENDIX E

68000 MACHINE LANGUAGE

IF source Is Immediate: 15

13 1

14 1

I

12 0

11

9

10

7

B 1

shFt.count

6

std.slz

5 0

4 0

3 1

5

4

3

2

0

dst.rg.num

Where shFt.count Is the source operand. IF source Is Implied 1 : 15

14 1

I

LSR -

13 1

12 0

11 0

10 0

B 1

9 1

7

6

1

1

2

dst.md.num

0

dst.rg.num

logical shiFt right IF both operands are data registers: 9

B

src.rg.num

0

IF source Is Immediate: 14 13 12 I 1 10 9 1 1 0 shFt.count

B

14 1

15 1

15 1

12

13 1

11

0

10

7

6

std.slz 7

6

std.slz

0

2

0

5 1

4 0

3 1

dst.rg.num

5

4

0

0

3 1

dst.rg.num

5

4

3

2

0

Where shFt.count Is the source operand. IF source Is Implied 1 : 15 1

14

13 1

1

12

11

o

o

ttOVE - move data From Instructions) 15

o

14

13

12

o .size.

10

o

source

11

10

9

dst.rg.Fld

7

6

1

1

9 1

B

to

dest I nat ion

o

B

7

6

dst.md.Fld

2

5

(see 4

other 2

3

src.md.Fld

0

dst.rg.num

dst.md.num

MOVE 0

src.rg.Fld

Where .slze. Is 01 For byte operation. 11 For word. and 10 For long. Not I ce that the reg I ster and mode Fie 1ds For the dest i nat Ion operand are not In their usual order.

ttOVE

~rom

15

o

SR - move data from status register to destination MOVE Instructions) 14 1

13 0

12 11 10 000

9

o

B

o

7

6

1

1

5

4

3

dst.md.fld

(see other 2

ttOVE t:o CCR - move data From source to cond I t I on code reg I ster other MOVE Instructions) 15

o

14 1

13

o

12

o

11

o

10 1

9

o

B

o

7 1

6 1

5

4

3

src.md.Fld

0

dst.rg.fld

2

( see 0

src.rg.fld

APPENDIX E

227

68000 MACHINE LANGUAGE

noVE to SR - move data from source to status register

(see other MOVE

Instructions) IS

o

14 I

13

12

o

o

II

o

10 I

9 I

noVE UlSP - move user stack pointer

8

o

7 I

6 I

4 5 3 src.md.fld

2 0 src.rg.fld

(see other MOVE Instructions)

Move to U5P: IS 0

14 I

13 0

12 0

1I I

10 I

9 I

8 0

7

0

6 I

5 I

4 0

3 0

0 2 src.rg.num

12 0

II I

10 I

9 I

8 0

7 0

6 I

5 I

4 0

3 I

0 2 dst.rg.num

5 4 3 src.md.fld

2 0 src.rg.fld

Move from U5P: IS 0

~VEA

14 I

13 0

- move address IS

o

14

o

13 I

(see other MOVE Instructions)

12 II 10 9 L/W dst.rg.num

8

o

7

o

6 I

Where L/W Is 0 for long word operations. I for wor.d operations.

MOVE" - move multiple registers For moves to memory: IS 0

14 I

13 0

12 0

II I

10 0

9 0

8 0

7 I

6 5 4 3 W/L src.md.fld

2 0 src.rg.fld

10 I

9 0

8 0

7 I

6 5 4 3 W/L dst.md.fld

I 2 0 dst.rg.f"ld

For moves from memory: IS 0

14 I

13 0

12 0

II I

The register list Is coded as a word whose bits each stand for In this word, which f"ollows the word described above. a I Indicates the register Is to be moved and a 0 indicates the register is not to be moved. The registers are moved in order based on the bit positions. The register correspond i ng to I east sign I f" I cant bit that I s l i s the f" i rst moved; the one corresponding to the most signlf"icant bit that Is I is the last moved.

one of" the 16 possible registers.

For a II

but autodecrement address I ng,

the reg i ster

list word

Is: 15 A7

14 A6

13 AS

12 A4

II A3

10 A2

9 AI

8 AD

7 07

6 06

5 05

4 04

3 03

2 02

I 01

0 DO

68000 MACHINE LANGUAGE

APPENDIX E

228

For autodecrement, the register list word Is: 15

14 Dl

DO

13 02

12 03

11 04

10 05

9 06

a 07

7 AD

6 Al

5 A2

4 A3

3 A4

2 AS

1 A6

0 A7

The difference I n these two formats I nsures that reg I sters stored and retrieved using autodecrement and autolncrement are processed correctly.

- move peripheral data

~VEP

For move from memory: 15 0

14 0

13 0

12 0

1 1 10 9 dst.rg.num

a 1

7 0

6 W/L

5 0

4 0

3 1

2 0 src.rg.num

a 1

7 1

6 W/L

5 0

4 0

3 1

2 0 dst.rg.num

For move to memory: 14 0

15 0

13 0

12 0

1 1 10 9 src.rg.num

displacement The for the address register displacement mode follows the word described above.

~VEQ

indirect

with

- move quick 15

14

13

12

o

1

1

1

11 10 9 dst.rg.num

a o

7

6

5

4 quick

3 2 data

o

Where quick data Is an a-bit field holding the source operand.

HULS - multiply signed

~ULU

15

14

I

1

13

o

12

o

(see also MULU) 11 10 9 dst.rg.num

- multiply unsigned 15 1

14 1

13

o

12

o

8 1

6 1

543 src.md.fld

2 I 0 src.rg.fld

1

6 1

543 src.md.fld

210 src.rg.fld

7

6

7 1

(see also MULS)

11 10 9 dst.rg.num

a o

7

NBCO - negate binary coded decimal 15

o

14 13 12 100

11 1

10 0

9

o

a o

o

5

4

3

o dst.md.fld

2 I 0 dst.rg.fld

APPENDIX E

NEG -

68000 MACHINE LANGUAGE

229

negate

IS

o

14 I

13 12 II 000

10

9

I

o

876 5 432 I 0 o std.slz dst.md.fld dst.rg.fld

10 0

9

876 5 4 3 o std.siz dst.md.fld

10

9 I

8

o

o

10

9

8

7

I

I

NEGX - negate with extend

IS

o

14 I

13 0

12 0

II

II I

0

o

2 I 0 dst.rg.fld

HOP - no operation

IS

o

14

13

12

I

0

0

I

7

6

5 I

4 I

3

I

6

5

4

3

o

2

o

I

o

o I

NoT - logical not (complement) IS

o

OR -

14 I

13 12 II 000

logical or

o std.siz dst.md.fld

(see also DRI)

For data register direct source: are data reister direct]

IS I

14

o

2 I 0 dst.rg.fld

13

o

12

o

II 10 9 src.rg.num

8 I

[do not use If both operands

7654321 0 std.slz dst.md.fld dst.rg.fld

For data register direct destination: [use If both operands are data register direct]

IS I

ORI -

14

o

13

o

12

o

II 10 9 dst.rg.num

logical or Immediate

IS

14 13 000

8

o

7 6 4 5 3 std.slz src.md.fld

2

0

src.rg.fld

(see also DR)

12 II 10 000

9

o

8

7

6

5

4

3

o std.slz dst.md.fld

2 1 0 dst.rg.fld

The immediate source operand follows the word described above.

230

68000 MACHINE LANGUAGE

APPENDIX E

ORI to CCR - logical or immediate to condition code register 15 14 13 000

12 II 10 000

9

o

8

o

7

o

6

5 I

o

4 1

3 I

2 1

I

o

o o

The immediate source operand follows the word described above.

ORI

to SR - logical or Immediate to status register 15 0

14 0

13 0

12 0

I I 0

10 0

9

8

7

6

0

0

0

I

5 1

4 I

3 I

2 1

I 0

0 0

The immediate source operand follows the word described above.

PEA -

push effective address 14 I

15 0

13 0

12 0

11 1

10 0

9

8

7

6

0

0

0

1

9 1

B

7

6 1

5

4

3

src.md.fld

2

0

src.rg.fld

RESET - reset external devices 15

o

ROL -

14

13

12

11

10

1

0

0

1

I

o

o

5 1

4

3

1

d

2

o

I

o

o o

rotate left If both operands are data registers: 15 I

14 I

13 1

12 0

9

8

src.rg.num

1

11

10

7

5

6

std.siz

4 1

3 I

dst.rg.num

0

4 1

3 1

dst.rg.num

5

4

3

I

2

0

If source Is Immediate: 15 I

14 1

13 I

12 0

11

10

9

shft.count

B I

7

5

6

std.siz

2

0

Where shf"t.count Is the source operand. If" source is impl ied I : 15 1

14 1

13 1

12 0

11

0

10 I

9

B

1

1

7 1

6 1

dst.md.num

2

0

dst.rg.num

ROR - rotate right If both operands are data registers: 15 I

14 1

13 1

12

o

11

10

9

src.rg.num

8

o

7

6

std.siz

5

4

1

1

3 1

2

0

dst.rg.num

68000 MACHINE LANGUAGE

APPENDIX E

231

l'f source Is Immediate: 15 1

14 1

13 1

12 0

9

8

sh'ft.count

0

11

10

7

6

std.slz

5 0

4 1

3 1

5

4

3

0

2

dst.rg.num

Where shft.count Is the source operand. If source Is Implied 1 : 15 1

14 1

13 1

12 0

11 0

10 1

9

8

7

6

1

0

1

1

dst.md.num

2

0

dst.rg.num

ROXL - rotate left with extend

If both operands are data registers: 15 1

14 1

13 1

12 0

11

10

9

8

src.rg.num

1

7

6

std.siz

5 1

4 1

3 0

_, dst.rg.num

5 0

4 1

3 0

dst.rg.num

5

4

3

2

0

If source Is Immediate: 15 1

14 1

13 1

12 0

11

10

9

8

shft.count

1

7

6

std.slz

2

0

Where shft.count Is the source operand. If source Is Impl led 1 : 14 1

15 1

13 1

12 0

11 0

10 1

9

8

7

6

0

1

1

1

dst.md.num

2

0

dst.rg.num

ROXR - rotate right with extend

l'f both operands are data registers: 15 1

14 1

13 1

12 0

9

8

src.rg.num

0

11

10

7

6

std.siz

5 1

4 1

3 0

dst.rg.num

5 0

4 1

3 0

dst.rg.num

5

4

3

2

0

I'f source Is Immediate: 15 1

14 1

13 1

12 0

9

8

shft.count

0

11

10

7

6

std.siz

2

-I

0

Where shft.count Is the source operand. If source Is Implied 1 : 15 1

14 1

13 1

12 0

11 0

10 1

RTE - return from exception 15

o

14

1

13 12 11 001

9

8

7

6

0

0

1

1

dst.md.num

2

0

dst.rg . .num

(see also RTR) 10

1

9 1

8

o

7

o

6 1

5 1

4

1

3

o

2

o

o 1

232

68000 MACHINE LANGUAGE

APPENDIX E

RTR - return and restore condition codes 15 0

14 1

13 0

12 0

11 1

10 1

(see also RTE)

9

8

7

6

1

0

0

1

9

8

7

6

1

0

0

1

5 1

4 1

3 0

2 1

5 1

4 1

3 0

2 1

0 1

RTS - return f'rom subroutine 15 0

14 1

13 0

12 0

11 1

10 1

0 1

1 0

SeeD - subtract binary coded decimal 15 I

14 0

13 0

12 0

9

8

7

6

dst.rg.num

1

0

0

11

10

5 0

4 0

3 D/A

2

0

src.rg.num

See - set according to condition 15 0

14 1

Where f'ollows:

13 0

12 1

8

7

6

condition type

1

1

11

10

9

condition type

Is

a

f'our

cc

f'our bit code

EQ NE GT LT GE LE

0111 0110 1110 1101 1100 1111 0010 0011 1010 1011 0100 0101 1000 1001 0000 0001

HI

LS PL MI

CC CS VC VS T F

5

4

3

dst.md.f'ld

bit

code

2

I

0

dst.rg.f'ld

speclf'ylng

cc

as

STOP - stop CPU 15 0

14 I

13 0

12 0

11 I

10 1

9

8

7

6

5

I

0

0

1

1

4 1

3 0

2 0

0 0

The Immediate source operand f'ollows the word described above.

233

68000 MACHINE LANGUAGE

APPENDIX E

SUB - subtract binary

(see also SUBA. SUBI. SUBQ. SUBX)

For data register direct source: are data register direct] 15

14

o

1

13

o

12 1

11

10

8 1

9

src.rg.num

[do not use iF both operands

76543 std.slz dst.md.Fld

210

dst.rg.Fld

For data register direct destination: [use IF both operands are data register direct] 15 1

14

o

13

o

12 1

11

10

8

9

o

dst.rg.num

2 0 src.rg.Fld

7 6 5 4 3 std.slz src.md.Fld

SUBA - subtract address (see also SUB. SUBI. SUBQ. and SUBX) 15 1

14

o

13

o

12

1

11

10

9

dst.rg.num

8

7

W/L

1

6 1

543 src.md.Fld

2 0 src.rg.fld

SUBI - subtract Immediate (see also SUB. SUBA. SUBQ. and SUBX) 15

14

13

12

o

o

o

o

11

o

10 1

9

o

8

o

76543 std.slz dst.md.Fld

210

dst.rg.Fld

The Immediate source operand Follows the word desclbed above.

SUBQ - subtract quick (see also SUB. SUBA. SUB!. and SUBX) 15

o

14 1

13

o

12 1

9

8

quick.data

1

11

10

5 4 3 7 6 std.siz dst.md.fld

Where qulck.data specifies the source operand. (OOO) Indicates that 8 Is to be subtracted.

2 0 dst.rg.fld A value of zero

SUBX - subtract with extend (see also SUB. SUBA, SUBI, and SUBQ) 15

14

13

12

1

0

0

1

11

10

9

dst.rg.num

8 1

7 6 std.slz

5 0

4

o

3

2

0

D/A src.rg.num

234

68000 MACHINE LANGUAGE

APPENDIX E

SWAP - swap halves of register

15

o

14 1

13

o

12

o

11

10

9

1

o

o

8

7

6

o

o

8

7

6

1

1

7

6

1

5

4

3

5

4

3

o

o

2

0

o dst.rg.num

TAS - test and set

15

o

14 1

13 0

12 0

11 1

10 0

9 1

o

14

13

12

11

10 1

9 1

8

1

dst.md.fld

2

1

0

dst.rg.fld

TRAP - trap

15

o

1

o

o

o

o

1

5

o

4

3

2

o vector number

o

Where vector number 15 the Immediate operand (O-$F).

TRAPV - trap on overflow

15

o

14 1

13 0

12 0

11 1

10 1

9 1

8

14

13

12

11

10

9

8

o

7

o

6 1

5 1

4 1

3

o

2 1

o

o

TST - test

15

o

1

o

o

o

1

UNLK - unlink and deallocate

15

o

14 1

13

o

12

o

1

o

4 7 6 5 3 std.slz src.md.fld

2 0 src.rg.fld

(see also LINK)

11

10

9

1

1

1

8

o

7

o

6

1

5

o

4 1

3 1

2 0 dst. rg. n'Jm

o

APPENDIX F NOTES ON PROGRAMMING STYLE A good assembly language program must be correct, well structured, and properly documented. It is taken for granted that a fmal version of a program must provide correct answers. The remaining criteria can be classified as "programming style". Good programming style includes careful annotation and commentary, clear organization, and lucid coding. In writing your program, bear in mind that the reader knows relatively little about the problem you are trying to solve, and next to nothing about your programming habits. Here are some specific pieces of advice:

1. Programs should be modular. Well-defined portions of an algorithm should be coded as subroutines. 2. Each program or subroutine should have a concise introductory comment describing the purpose of the program or subroutine, the algorithm used, the significance of important internal variables, and thP. meaning and formats of required inputs and generated outputs. For subroutines, describe the meaning and format of arguments; also list the registers used by the subroutine. 3. Standardize your jnstruction format. For example: Label field - column 1 Operation field - column 9 Operand field - column 17 Comment field - column 33 If the operand field extends beyond column 32, simply leave a space and start the comment. 4. A comment should appear with almost every instruction. Such a "marginal" comment should not be simply a literal translation of the instruction, but an explanation of its effect on the program. For example, a comment for BRA LOOP should not be "branch to LOOP", but "return for processing next character". 5. If marginal comments do not make the operations clear enough, do not hesitate to insert full-line commentary between instructions.

235

APPENDIX F

236

NOTES ON PROGRAMMING STYLE

6. A marginal comment extending over several lines should be successively indented. For example: CMP BLT

#'O',DO NONDIG

;IF DO < '0' PROCESS NON-DIGIT CASE

7. Separate distinct parts of the code with blank lines (or lines containing only ; in column 1). 8. Avoid "tricky" or "clever" instruction sequences. If you must include such sequences, provide them with full explanations. 9. Pay attention to all possibilities. For example, in writing a division routine, include a check for zero divisor. If a divisor is found to be zero, some specific action must be taken (an error message is to be printed out, a certain condition code is to be set, etc.). 10. Avoid writing self-modifying programs (where instructions or assembler-inserted constants are altered during execution). Such "nonreentrant" programs are extremely difficult to debug. 11. Subroutines that stand a good chance of being useful in other programs should be as "transparent" as possible to the calling program. All registers used by such subroutines should be saved on entry (a convenient place is the system stack) and restored before exit. 12. Storage areas should be grouped together in a single place in the program, not mixed with executable code. 13. To the extent possible, symbols should be mnemonic. For example, points in the program should be named LOOP, NEXTCH ("next character"), EXIT, etc., rather than Xl, X2, X3. Similarly, storage locations should be named TEMP, TABLE, CONST, etc., rather than P, Q, R. 14. For better readability and easier maintainability, predefine symbols for absolute addresses and constants used in your program: for example, BELL == 7, MASK = $F, TRMDATA =$10042. Write SP for A7. 15. Avoid wasteful instructions if efficient ones are just as lucid. For example, write CLR DO MOVEQ #1,DO

not not

MOVE #O,DO MOVE #I,DO

16. Do not insert a test instruction where it is not needed. For example, in SUB TST BEQ

#A,B B NEXT

the TST instruction is redundant. 17. Avoid using instructions as data. For example, do not use

APPENDIX F

NOTES ON PROGRAMMING STYLE

MOVE

237

LOOP,DO

if LOOP is a label on an instruction. 18. To reserve a word of storage, write DS.W 1, not DC.W O. (Both directives reserve a word of storage, but the latter directive indicates that the initial contents of the word is significant.)

APPENDIX G ANSWERS TO

SELECTED EXERCISES Chapter 1 1.1

1.2.

1.3.

1.4.

1.5. 1.6. 1.7.

(a) 100100100001 2,921 16 (b) 10011100010000 2,2710 16 (C) 11111111111111 2, 3 FFF 16 (a) 127,7F 16 (b) 129,81 16 (c) 42798, A72E 16 (a) 2303,100011111111 2 (b) 2472,100110101000 2 (c) 51966, 11001010111111102 (a) 11101002 (b) 10001011 2 (a) 1169 (b) 47B 1111100010011 2 Add 1 to 111 ... 12

Chapter 2 2.1.

(a) (b) 2.2. 2 15 2.3. (a) (b)

Byte DFFF DFFE , Word Byte 7FFFF , Word 7FFFE = 32K = 32768 Word6DB6,highbyte6D,lowbyteB6 Word 97D5, high byte 97, low byte D5

Chapter 3 3.1.

238

(a) FFFF (b) FC18

APPENDIX G

3.2. 3.3.

3.4.

3.5. 3.6. 3.7.

ANSWERS TO SELECTED EXERCISES

239

(C) FOOO (d) 85B4 (a) 04C4 (b) 5F (a) 01 EF (b) E3FD (c) FBC8 1000: 7B1F 1002: E536 1004: 5A9C 1006: OAOD 17 IS PRIME! (a) BEOO 0000 (b) 41A4 0000 (a) 31.875 (b) -0.03125

Chapter 4 4.1.

In the condition code values, -- will mean "unchanged". Actual values of affected codes are given even though not required by question. (A2) unchanged XNZVC - - - - (a) (A3) =00007002 (b) (D1) = 6F4A0021 (A2) unchanged XNZVC -0000 (c) (D2) = 12348000 XNZVC -1000 (d) (D2) = 00008000 XNZVC -0000 (e) (D1) = 6F4A2300 (A2) =00007003 XNZVC -0100 (f) (D2) = 12340152 (A2) = 00007000 XNZVC -0000

4.2.

In the condition code values, - will mean "unchanged". Actual values of affected codes are given even though not rcquired by qucstion. XNZVC 01000 (a) (D2) = A4BlEF3C (b) (D2) = A4B1983C XNZVC 10001 (c) (D2) = 98C4A4B1 XNZVC -1000 (d) (D2) = A4B19981 (AI) unchanged XNZVC 11001 (e) (D2) = FFF3FACE (A2) = 0000600A XNZVC -1000 (f) (Dl) = 00000078 XNZVC -0000 DA44 DClD 67FA DOA8 0014 DE7C 0032

4.3.

APPENDIX G

240

4.4.

6DOO 04FO ADD.B ADD.B BEQ.L ADD BGT.S ADD.L

ANSWERS TO SELECTED EXERCISES

#5,D5 D5,(Al) $6000 (A7)+,D4 $705A D3,D7

Chapter 5 5.3. The program converts an ASCII string of hex digits into binary. (AO) = $6045, (D!) = $D, (D2) = $2BC7

Chapter 6 6.1. 6.2.

6.3.

(DO) +- (Dl) * (D2) SP = 00006FEA Contents of system stack: 006FEA 00 00 70 28 00 05 00 00 70 28 00 06 00 00 70 28 006FF A 00 07 00 00 70 OE (a) (DO) = $A (b) SP = 00006FE8 Contents of system stack: 006FE8 00 00 70 3E 00 00 70 3E 00 00 70 3E 00 00 70 3E 006FF8 00 00 70 3E 00 00 70 16 (c) (DO) +- smallest number in ARRAY

Chapter 7 7.1. CLR SUBQ ADD ADD NOT SUB ADD SUBQ AND ASL ASR NEG ROR

DO #1,DO #$7FFF,DO #2,DO DO #$FFFF,DO #$8000,DO #1,DO #$ABCD,DO #l,DO #l,DO DO #l,DO

SR=2704 SR=2719 SR=2711 SR=270A SR=2700 SR=271B SR=2717 SR=2719 SR=2718 SR=2713 SR=2700 SR=2719 SR=2719

DO=OOOO DO=FFFF DO=7FFE DO=8000 DO=7FFF DO=8000 DO=OOOO DO=FFFF DO=ABCD DO=579A DO=2BCD DO=D433 DO=EA19

APPENDIX G

ANSWERS TO SELECTED EXERCISES

7.2.

(a) L1

7.3. 7.4.

ZNCV: 01xx, (a) BGE, BLE, (b) BGE, BLE, (c) BLE, BLT, (d) BGE, BGT, (e) BGE, BGT, (f) BLE, BLT, (g) BLE, BLT, (h) BLE, BLT,

(b) L1

(c) L2 (d) L4 (e) 13 01xx, OOxx, OOxx, 10xx, 01xx, 0000, 1010 BLS BLS BBI BBI BBI BLS BLS BBI

7.5. The instruction should be BLS LOOP 7.6. If 2p>q then (DO) ~ 1; else (DO) ~ 2 7.7. (a) $FF (b) If (X) has n I-bits, then (Y) ~ 11 ... 1 (n times). Chapter 8 8.1.

(PC) = $7016

($6FFC) = $00007012

8.2. 8.3. 8.4. 8.5.

MOVE.L #NOW,2(SP) or ADD.L #2,2(SP) (PC) = $7018 ($6FFC) = $000070lE (PC) = $7034 ($6FFC) = $00007030 (a) 5 (b) 4 (c) 6 (d) impossible

Can be interrupted by Routine INT2, INT3, INT4 ENTER 1 INT4 ENTER2 none INTI none INT2 all INT3 none INT4 8.7. Change the MOVE #$2nOO,SR instruction in each routine as follows: Number on MOVE to SR Routine 2200 ENTER 1 2100 ENTER2 2200 INTI 2000 INT2 2400,2500,2600, or 2700 INT3 2000 INT4

8.6.

Chapter 9 9.1.

NEG MOV

Run time error (odd address with word instruction) Assembly error (wrong op code)

241

APPENDIX G

242

RTE JMP MOVE CLR

ANSWERS TO SELECTED EXERCISES

OK (comment) Run time error (illegal address) OK (contents of SP is always even) Assembly time error (invalid address field)

9.2. (a) Object module ofPROG2 (starting at $1000) 33FCI000 00000016 33FCFFEA 00001016 3B780FFB 0016 4AFC 1000FFED (b) Load module ofPROGl and PROG2 (starting at $1000) 4AFC 33FCI002 00000016 33FCFFEA 00001018 3B780FFD 0016 4AFC 1002FFED 9.3. Object module: 33F8000C 00001056' 317CFFFA 1008' 337CI062' 0004 4AFC 1010' FFCO Load module: 33F8000C 00002256 317CFFFA 2208 337C2262 0004 4AFC 2210 FFCO

Symbol table: A OOOOOOOC B 00001056' C FFFFFFFA D 00000004 E 00001008' F 0000100E' G 00001016'

APPENDIX G

9.4.

ANSWERS TO SELECTED EXERCISES

(a) MAIN: SUB1: SUB2:

GLOBAL GLOBAL GLOBAL

243

A,B,K,L,SUB1,X B,K,L,SUB1,SUB2,X A,L,SUB2,X

(b) Object module for MAIN: (l000)337C04000100 317A0022102C' 31FC,L,OlSO 31FA,X,0060 33F9,K,0000102C' 4EB9,SUB1 4AFC 100C' Symbol table: A 0000 102ARG K ********* G START 00001000R Global symbol table: 0000102AR A

B L SUB1

B

0000102CRG ********G ********G

C X

0000100CR ********G

L SUB2

0000002CRG ********G

0000102CR

Object module for SUB1: (0)33E9002D0000002C' 377C0012,B 31FC,B,0076 33FA,X,000000SO 4EB9,SUB2 31FAOFCC',B 4E7S ,X,(SO)FFF2 Symbol table: B ********G M OOOOOOSOR X ********G Global symbol table: K 00000012

K SUB1

L

00000012G OOOOOOOORG

0000002CR

SUB1

OOOOOOOOR

Object module for SUB2: (0)31FC0012,L 3B7A001C,A 33FA02F2'00000036' 6A000006 4EE9,L 31E900441234 4E7S 0036' Symbol table: ********G A 00000024RG X Global symbol table: SUB2 OOOOOOOOR

********G 00000036R

L Y X

SUB2 Z

OOOOOOOORG 0000001CR

00000024R

(c) Load map: MAIN 1000-1066, SUB1 1068-10B8, SUB2 lOBA-10FE Merged global symbol table: A 0000102AR B 0000102CR K 00000012 L 00001094R SUB1 00001068R SUB2 000010BAR X 000010DER (d) Load module for MAIN, SUB1, SUB2: (1000) 337C04000100 317A0022102C 31FC109401S0

APPENDIX G

244

ANSWERS TO SELECTED EXERCISES

3lFAOOCA0060 33F9000000l20000l02C 4EB900001068 4AFC 100C (1068) 33E9002DOOOO1094 377C0012l02C 3lFCl02C0076 33FA00600000l0B8 4EB90000l0BA 3lFAFF64l02C 4E75 lODE (10B8) FFF2 3lFC0012l094 3B7AOOlCl02A 33FAF2380000l0FO 6A000006 4EE9l094 3lE90044l234 4E75 10FO 9.5.

CLR LEA LEA MOVE

$100 K(PC),A3 L(PC),A4 0(A3,A4),A4

Chapter 10 10.1.

10.2

10.3.

MAC2 stores the low bytes of DO, Dl, ... , D(N-l) in Z, Z+l, ... , Z+N-l. Expansion: DO,TEMP+O MOVE.B MOVE.B Dl,TEMP+l MOVE.B D2,TEMP+2 MOVE.B D3,TEMP+3 MOVE.B D4,TEMP+4 (a) MOVE.B #O,TAB+O MOVE.B #l,TAB+l MOVE.B #6,TAB+6 L5 CMP.B DO,Dl BPL L5 DC.W 5,25,3 DS.B 100 CMP BNE DC.W DS.W

DO,Dl L5 52

INDEX

ABCD, 181,217 Absolute addresses, 138 Absolute long, 30 Absolute short, 29 ACIA,12 Actual argument, 153 ADD instructions ADD, 36,182,217 ADD A, 36, 182,218 ADDI, 36,182,218 ADDQ, 36,183,218 ADDX, 96,183,218 machine language, 43 Addition, 92 binary, 7 hex, 7 2's-complement, 19 Address, 11 absolute, 139 effective, 26 nominal, 12 relocatable, 138 Address expression, 139 Address modification, 141 Address register direct, 27 Address register indirect, 28 with displacement, 29 with index and displacement,29 Address trap error, 117 Addressing modes, 26 absolute long, 30 absolute short, 29

Addressing modes (Contd.) address register direct, 27 address register indirect, 28 with displacement, 29 with index and displacement,29 autodecrement, 28 autoincrement, 28 data register direct, 26 immediate, 31 PC relative with displacement, 30 with index and displacement, 30 ALU, 11 AND,40, 184,218 ANDI, 184, 185,218,219 Argument, 66 transmission, 68 Arithmetic logic unit (ALU), 11 Arithmetic operations, 92 ASCII,20 ASCII-to-binary example, 105-110 ASL,4l,185,2l9 ASR, 41,186,219 Assembler, 48 two pass, 136 Assembler directive, 49 Assembly, 48 conditional, 163

Assembly language instructions, 180. (See individual instruction) Assembly language program, 48 format, 52 Assembly time, 49 Assignment directive, 50 Asynchronous communication interface adaptor (ACIA),12 Autodecrement, 28 Autoincrement, 28 Backward echo example, 66 Basis (of recursion), 79 Bee, 187,220 BCRG,187 BCLR, 116, 188,220 Binary equivalent, 1 Binary number system, 1 Binary point, 22 Binary-to-decimal conversion, 4 Binary-to-hexadecimal conversion, 6 Bit, 9 input ready, 12 output ready, 13 parity, 20 sign, 17 supervisor, 116 trace, 116 Branch instructions, 38 BCC, 39,187,220

245

246

INDEX

Branch instructions (Contd.) BCS,39,187,220 BEQ, 39,187,220 BGE, 39,187,220 BGT, 39,187,220 BHI,39,187,220 BLE, 39,187,220 BLS, 39, 187,220 BLT, 39,187,220 BMI, 39, 187,220 BNE, 39,187,220 BPL,39,187,220 BRA, 38, 188,221 BSR, 69,188,221 BVC, 39,187,220 BVS, 39,187,220 IMP, 38, 195,225 BSET, 188,221 BSR, 69, 188,221 BTST, 35, 189,222 Buffer, 56 Buffer input pointer, 56 Buffer output pointer, 56 Bus trap error, 117 Byte, 10 high byte, 11 low byte, 11

Compare instructions (Contd.) CMPI, 35,191,222 CMPM, 97,191,223 Concatenation, 157 Condition codes, 11 carry (C), 19 extend (X), 20 negative (N), 11 overflow (V), 20 zero (Z), 11 Conditional assembly, 163 Conditional block, 163 Conditional branch instructions, 39 Conversions binary-to-decimal, 4 binary-to-hexadecimal, 6 decimal-to-binary, 1 decimal-to-hexadecimal, 3 hexadecimal-to-binary, 6 hexadecimal-to-decimal, 5 Coroutine, 84 CP,9 CP priority, 124 DBcc, 101, 191,223

C bit, 19 C condition code values, 102 Call,66 Calling program, 66 Carry, 19 Central memory (CM), 9 Central processor (CP), 9 Characters ASCII,174 digits, 20 letters, 20 nonprinting, 20 null,22 special,20 strings, 22 CHK, 119, 189,222 Circular buffer, 56 Clock,125 Clock status register, 125 CLR, 34,189,222 Coding hints, 58 Comment field, 52 Compare instructions CMP, 35,190,222 CMPA, 35, 190,222

Decimal number, 1 Decimal-to-binary conversion, 1 Decimal-to-hexadecimal conversion, 3 Destination field, 26 Destination operand, 26 Digit, 1 Directives DC.B, DC.L, DC.W, 49 DS.B, DS.L, DS.W, 50 END,52 ENDC, 163 ENDM, 152 ENDR,160 EQU, 50 EVEN,52 IF,163 IFF,164 IRP, 162 LOAD, 52 MACRO, 152 ORG,51 REPT,160 Displacement, 38 Displacement addressing, 29

Divide instructions DlVS, 37, 192,223 DlVU, 37, 193,223 Double-operand instructions, 32 Double-precision, 95 Double-precision arithmetic, 95 Double-precision number, 95 Dummy argument, 152 Effective address, 26 END, 52 ENDC, 163 ENDM,152 ENDR,160 EOR, 193,224 EORI, 194,224 EQU,50 EVEN,52 Execution cycle, 25 EXG, 34, 194,224 Exponent, 22 Exponentiation algorithm, 71 EXT, 34,195,225

Data register, 11 Factorial function, 80 Fibonacci numbers, 79 Fields, 52 Floating point representation IEEE standard fonnat, 23 of real numbers, 22 Fraction, 22 General purpose register, 11 Global symbol, 143 Global symbol table, 144 Hand assembly, 42 Hand disassembly, 42 Hexadecimal digits, 7 Hexadecimal equivalents, 3 Hexadecimal number systern, 1 Hexadecimal-to-binary conversion, 6 Hexadecimal-to-decimal conversion, 5 High byte, 10 High level language, 135 High-order addition, 95 High-order long word, 95 Higher priority device, 124

INDEX

IF, 163 IFF,164 ILLEGAL, 195,225 Illegal address trap (See address trap error) Illegal instruction trap, 116 Immediate source, 43 Index, 29 Induction, 79 Initialization, stack, 65 Input interrupt enable, 120 Input ready bit, 12 Interface registers, 12 Interrupts, 120 Interrupt-driven device, 121 Interrupt handler, 120 Interrupt routine, 120 Interrupt vector, 120 IRP, 162

IMP, 33,195,225 ISR, 69, 196,225 K,ll Keyboard data register, 13 Keyboard input interrupts, 120 Labe1,52 LEA, 59,196,225 LINK, 75,196,225 Linkage, 69 Linkage editor, 140 LOAD,52 Load map, 144 Load module, 140 Loading origin, 139 Local symbols, 159 Location, 11 Location counter, 135 Logical instructions AND, 40,184,218 NOT, 40, 203, 229 OR, 40, 204, 229 Long word, 10 Low byte, 10 Low-order long word, 95 LSL,41, 197,225 LSR, 41,197,225 Machine language, 25 MACRO, 151, 152-158 Macros, 150 Macro body, 152

247

Macro call, 152 Macro definition, 152 Macro heading, 152 Macro recursion, 167 Mantissa, 22 Masking, 56 Merged global symbol table, 144 Microprocessor chip, 9 Mnemonic op code, 32 Modular programs, 67 Motorola 68000-based computer system, 9 MOVE, 32, 198, 226 MOVEA, 32, 199,227 MOVEM, 76, 200, 228 MOVEP, 125,201,228 MOVEQ, 32, 201, 228 MSB (most significant bit), 16 MULS, 37,201,228 Multiple echo example, 56 MULU, 37, 202, 228 NBCD, 202, 228 N bit, 11 N condition code values, 102 NEG, 37, 202, 229 NEGX, 96,203,229 Nested subroutines, 76 Nominal address, 12 N onprinting characters, 20 No-operand instructions NOP, 42, 203, 229 RESET,42,205,230 NOT, 40, 203, 229 Null character, 22 Number, 1 floating point representation,22 one's complement representation, 16 storing negatives, 16 two's complement representation, 15 Number systems, 1 Object module, 140 Object program, 48 Odd parity, 20 One's complement, 16 Op code, 32 Op code table, 135 Op mode field, 43

Open subroutine, 152 Operand field, 52 Operating modes, 117 Operation code, 32 Operator field, 52 OPR,32 OR, 40, 204, 229 ORG,51 ORI, 204, 205, 229 Output interrupt enable, 120 Output ready bit, 13 Overflow indication, 92 Parameter, 70 Parameter passing, 70 Parity bit, 20 PC,11 PC relative modes, 30 PEA, 206, 230 Peripheral devices, 9 Permutation example, 79 PIC, 145 PIIT, 14, 125 Polling, 54 Pop,65 Position independent code, 30, 145 Powers of 2,6 Powers of 16, 6 Preload counter, 125 Priority, 124 Priority field, 123 Priority of an interrupt, 124 Priority of a peripheral device, 124 Processor traps, 116 Program counter, 11 Program traps, 119 Programming style, 235 Pseudo-instructions, 49 Pure procedure, 67 Push,65 Quarter-byte, 62 Recursion, 79 Recursive function, 79 Recursive subroutine, 80 Reentrant code, 67 Register, 11 keyboard data, 13 terminal control, 13 terminal output data, 13

INDEX

248

Register (Contd.) terminal status, 12 timer control, 125 timer status, 125 Relocatable address, 139 Repeat block, 160 REPT,160 RESET,42,205,230 ROL, 40, 206, 230 ROR, 40, 206, 230 ROXL, 104,207,231 ROXR, 104,208,231 RTE, 118,208,231 RTR, 208, 232 RTS, 69, 209, 232 Run time, 49 SBCD, 209, 232 Sec, 209, 232

Scientific notation, 22 SET,161 Shift instructions, 40 Sign bit, 17 Signed conditional branch, 99 Single-operand instructions,32 Single precision, 22 Source field, 26 Source program, 48 Special characters, 20 Stack,64 Stack overflow, 66 Stack pointer (SP), 11

Stack underflow, 66 Statement, 52 Status register, 11 STOP, 210, 232 Subprograms (See subroutines) Subroutines, 66 Subtraction instructions, 36 SUB, 36, 210, 233 SUBA, 36, 211, 233 SUBI, 36, 211,233 SUBQ, 36, 212, 233 SUBX, 97, 212, 233 Subtraction of powers method,1 Supervisor mode, 117 SWAP, 34,213,234 Symbol table, 135 Symbolic address, 52 Symbols global, 143 loca1,159 System stack, 69 TAS, 213, 234 Terminal; 12 Terminal control register, 13 Terminal output data register, 13 Terminal status register, 12 Timer control register (TCR),125 Timer status register (TSR), 125 Top-down programming, 67

Tower of Hanoi example, 81 Trace bit, 116 Trace mode, 116 TRAP, 119,213,234 Trap errors address trap error, 117 bus trap error, 117 Trap handler, 116 Trap routine, 116 TRAPV, 119,214,234 Trap vector, 116 TST,97,214,234 Two-pass assembly, 136 Two's complement addition and subtraction, 19 representation, 15 UNLK, 75, 214, 234 Unsigned conditional branch, 99 Unsigned numbers, 99 User mode, 117 V bit, 20 V condition code values, 102 Word,10 high-order long word, 95 low-order long word, 95 X bit, 20 X condition code values, 102 Z bit, 12 Z condition code values, 102