Transcript lecture21
Machine Language, CrossAssembler, Loops
Today:
• First Hour: Machine Language, Cross-assembler
– Section 2.1-2.4 of Huang’s Textbook
– In-class Activity #1
• Second Hour: Branches, Loops
• Section 2.8 of Huang’s Textbook
– In-class Activity #2
1
Machine Language Programming
Example program
Add two 8-bit numbers N1 & N2
to form an 8-bit sum SUM
That is,
N1 + N2 SUM
2
N1 + N2 SUM
Program fragment
LDAA
ADDA
STAA
HALT
N1
N2
SUM
...
$C120
$C121
$C122
$C123
$C124
$C125
$C126
$C127
$C128
$C129
...
$C210
$C211
$C212
...
...
B6
C2
10
BB
C2
11
B7
C2
12
3F
...
12
34
FF
...
C1
20
PC
A
B
Let's go through it
instruction by instruction
3
Load Accumulator A
N1 A
LDAA
ADDA
STAA
HALT
N1
N2
SUM
...
$C120
$C121
$C122
$C123
$C124
$C125
$C126
$C127
$C128
$C129
...
$C210
$C211
$C212
...
...
B6
C2
10
BB
C2
11
B7
C2
12
3F
...
12
34
FF
...
C1
23
12
PC
A
B
The result of the first
instruction
4
Add to Accumulator A
A + N2 A
LDAA
ADDA
STAA
HALT
N1
N2
SUM
...
$C120
$C121
$C122
$C123
$C124
$C125
$C126
$C127
$C128
$C129
...
$C210
$C211
$C212
...
...
B6
C2
10
BB
C2
11
B7
C2
12
3F
...
12
34
FF
...
C1
26
46
PC
A
B
The result of the second
instruction
5
Store Accumulator A
A SUM
LDAA
ADDA
STAA
HALT
N1
N2
SUM
...
$C120
$C121
$C122
$C123
$C124
$C125
$C126
$C127
$C128
$C129
...
$C210
$C211
$C212
...
...
B6
C2
10
BB
C2
11
B7
C2
12
3F
...
12
34
46
...
C1
29
46
PC
A
B
The result of the third
instruction
6
Halt the Program
Return to the Buffalo Monitor
LDAA
ADDA
STAA
HALT
N1
N2
SUM
...
$C120
$C121
$C122
$C123
$C124
$C125
$C126
$C127
$C128
$C129
...
$C210
$C211
$C212
...
...
B6
C2
10
BB
C2
11
B7
C2
12
3F
...
12
34
46
...
C1
2A
46
PC
A
B
The result of the last
instruction
7
M6811 Cross-Assembler
Program assembles on one machine (host) and runs on another (target)
DOS instruction
Source Code
<prog.asm>
"asm prog"
Assembler Outputs
ASSEMBLER
Listing File
<prog.lst>
Load File
<prog.s19>
Script File
<prog>
"text"
"text"
"batch"
8
Assembly Language
Source Statement Content
Numbers
Decimal (default)
10, -15
Hexadecimal
$2C
Binary
Symbols
%00100000
Good for humans
Good for addresses
Good for bit patterns
1..6 Alphanumeric characters
1 character symbols not allowed: A, B, D, X, or Y
Avoid symbols that are identical to opcode mnemonics
Expressions
Symbols and numbers separated by arithmetic operators
Arithmetic operators are +, -, *, and /
No embedded spaces are allowed
The assembler
does the math
-- in any base!!
9
Source Statement Format
Label
Operation
Operand
Comment
Statement fields are separated by blanks†
Label
a symbol whose first
character is in column 1
Operation instruction mnemonic for
Opcode
Operand
can be empty, a symbol, a
number, or an expression
† Actually,tabs
are
allowed too.
What about a blank
in column 1?
Comment the remainder of the line,
may be blank
Example:
START
LDAA $C200
This is the beginning of the program
10
HC11 Assembly Program
1. Assembler Directives
define data and symbol
reserve and initialize memory locations
set assembler and linking condition
specify output format
2. Assembly Language Instructions
3. END directive
last statement of a program
any statement after END will be ignored
4. Comments
explain the function of a single or a group of instructions
11
Example Assembly
Program
Consider the C program:
main ()
{
int i, j, k;
i = 75;
j = 10;
k = i + j - 6;
}
; i, j, k are integer variables
; assign 75 to i
; assign 10 to j
12
Assembly Program
(1) * Data storage declaration section (includes assembly directives)
(2)
ORG $00
(3) i
RMB 1
; variable i
(4) j
RMB 1
; variable j
(5) k
RMB 1
; variable k
(6) * program instruction section
(7) start ORG $C000
; starting address of program
(8)
LDAA #75
(9)
STAA i
; initialize i to 75
(10)
LDAA #10
(11)
STAA j
; initialize j to 10
(12)
ADDA i
; compute i + j
(13)
SUBA #6
; compute i + j -6
(14)
STAA k
; store i + j - 6 to k
(15)
END
13
Special Assembler Directives
Behave like operators but are only used by the assembler, not processor
Asterisk - two usages
1.
* Putting a * in column 1 makes the entire line a comment
2.
DATA RMB
$4A
END
*
EQU
* is a substitute for the current value
of the location counter
Pound sign
Usage:
LDAA #$0A denotes IMM addressing mode
Quotes (' and ")
Usage of ':
Usage of ":
'a
denotes one ASCII character a (= $61)
"A b." denotes ASCII string ($41,$20,$62,$2E)
14
Basic Assembler Directives
1. END
- ends a program to be processed by an assembler
- any statement following the END directive is ignored
- not supported by the Motorola freeware as11
2. ORG
- sets a new value for the location counter of the assembler
- tells the assembler where to put the next byte it generates after the
ORG directive
The sequence
ORG $C000
LDAB #$FF
will put the opcode byte for the instruction LDAB #$FF at location
$C000.
15
Basic Assembler Directives
3.
RMB -- reserve memory bytes
- reserve memory bytes without initialization
[<label>] RMB <expression> [<comment>]
buffer
RMB 100
allocates 100 bytes for data and can be referred to by the label
“buffer”.
4. BSZ -- block storage of zeros
- assembler allocates a block of bytes that are initialized to zeros
[<label>]
BSZ <expression> [<comment>]
buffer
BSZ 80
reserves a block of 80 bytes and their value are initialized to 0.
16
Basic Assembler Directives
5. FCB -- form constant byte
- reserves as many bytes as the number of arguments in the
directive
- each argument specifies the initial value of the corresponding
byte
[<label>]
FCB
[<expression>][,<expression>,...,<expression>][<comment>]
The statement
ABC
FCB $11,$22,$33
reserves three consecutive memory bytes and initializes their
values to $11, $22, and $33.FDB -- form double byte
- reserves 2 bytes for each argument of the directive
- each argument specifies the initial value of the
17
Basic Assembler Directives
6. FDB -- corresponding double bytes syntax is
[<label>]
FDB
<expression>][,<expression>,...,<expression>]
[comment>]
Eg:
ABC
FDB $11,$22,$33
initialize 6 bytes to $00 $11 $00 $22 $00 $33
7. FCC -- form constant character
generates ASCII code bytes for the letters in the
arguments
[label] FCC “<string>“ [<comment>]
ALPHA
FCC “DEF”
will generate the values $44 $45 $46 in memory
18
Basic Assembler Directives
8. DCB -- define constant block
- reserve an area of memory and initialize each byte to the same
constant value
- syntax is
[label]
DCB <length>,<value>
- not supported by the Motorola freeware as11
space
DCB 80,$20
will generate a line of 80 space characters.
9. FILL -- fill a block of constant values
- serve as the same purpose as does the DCB directive
[<label>] FILL <value>,<length>
ones
FILL 1,40
will force the freeware assembler to fill each of the 40 memory
locations with a 1.
19
Basic Assembler Directives
10. EQU -- equate
- allows the user to use a symbolic name in place of a number
- syntax is
<label>
EQU <expression> [<comment>]
The directive
ROM
EQU $E000
tells the assembler that wherever ROM appears in the program, the
value $E000 is to be substituted.
20
Directives Summary
Behave like operators but are only used by the assembler, not processor
Directives
ORG v
RMB n
Example Usage
Origin. Sets value of
location counter for the
following instruction/data
USTACK RMB 20
Reserve memory byte(s)
DATA
ORG $D000
ZMB 15
ZMB n (=BSZ n) Zero memory byte(s)
MYDATA BSZ $17
DCB v,n
Define Constant Block
BLOCK
FCB v, (FDB v)
Form Constant Byte (Form ONE
Double Byte) stores
TWO
constants
THREE
Form Constant Character
QUERY
associates a symbol with
the value of an expression MESS
START
denotes the end of the
source program
FCC c
s EQU v
END
n = number of bytes, v = value of byte(s), s = symbol
DCB $FF,12
FCB 10
FDB $C21A
FCB 1,$F,3
FCC '?
FCC "end"
EQU $6200
END
21
Do Activity #1 Now
22
Branch Instructions
This is
an example of a
conditional branch
instruction
Examples:
BEQ
Branch on Equal to Zero (i.e., Z bit = 1)
if(Z == 1) go to <a_specified_address>;
BRA
Branch Always
go to <a_specified_address>;
JMP
Jump Always
go to <a_specified_address>;
These are examples of
unconditional branch
instructions
Now, how are these
two different?
Look in the PRG!
23
What’s Different?
Source
Form
Addressing
Boolean
Mode for Machine Code
Expression Operand Opcode Operand Bytes
Operation
BRA
Branch Always
?1=1
REL
20
rr
2
JMP
Jump
See Special
EXT
7E
hh ll
3
Operations
IND,X
6E
ff
2
IND,Y
18 6E
ff
3
Relative to what?
This is a new
addressing mode
Relative addressing
24
Relative Addressing
In this mode, addresses are specified relative to the program counter
Also known as PC-relative addressing
Example:
$6142 BRA $28
Relative
Offset
Program branches to address (PC + $28)
To figure out this address, we need to know the value in the PC.
Where is the instruction located in memory?
BRA is a 2-byte instruction.
After the instruction is fetched,
Therefore,
PC = $6142 + $02 = $6144.
PC + $28 = $6142 + $28 = $616A.
25
Backward Jumps
The relative offset is treated as a signed number
in two’s complement notation
Its an infinite
loop!!
Example:
$6142 BRA $FE
What does this say
about this
instruction?
PC = $6144
Relative offset = $FE
Extend the offset to 16 bits $FFFE
PC + relative offset = $6144 + $FFFE = ?
$6142
+
0110 0001 0100 0100
1111 1111 1111 1110
????
0110 ????
0001 ????
0100 ????
0010
26
Inherent Addressing Mode
Instructions with No Operands
Some of the instructions that have no operand:
ABA
A+BA
CLRB 0 B
INCA
A+1A
DECB B - 1 B
SEC
1 C (C = CCR<0>)
27
Condition Code Register
- - H - N Z V C
Condition Code Register
Carry/borrow (MSB)
oVerflow (2s C)
Zero
Negative
Half carry from (bit 3 to 4), used
for (BCD) corrections only
These CCR bits are set by
ALU operations
28
Simple Branches
Test only 1 or 0
Source
Form
Operation
Boolean
Expression
Opcode
BRA (opr)
Branch Always
?1 = 1
20
BRN (opr)
Branch Never
?1 = 0
21
29
Simple Conditional Branches
Test only one of N, Z, V, C
Boolean
Expression
Opcode
BMI (opr) Branch if Minus
?N = 1
20
BPL (opr) Branch if Plus
?N = 0
2A
BEQ (opr) Branch if Equal (zero)
?Z = 1
27
BNE (opr) Branch if Not Equal
?Z = 0
26
BVS (opr) Branch if oVerflow Set
?V = 1
29
BVC (opr) Branch if oVerflow Clear
?V = 0
28
BCS (opr) Branch if Carry Set
?C = 1
25
BCC (opr) Branch if Carry Clear
?C = 0
24
Source
Form
Operation
30
Signed Conditional Branches
Test combinations of N, Z and V
Boolean
Expression
Opcode
BGT (opr) Branch if > Zero
?Z + (N V) = 0
2E
BLE (opr) Branch if <= Zero
?Z + (N V) = 1
2F
BGE (opr) Branch if >= Zero
?N V = 0
2C
BLT (opr) Branch if < Zero
?N V = 1
2D
Source
Form
Operation
31
Unsigned Conditional Branches
Test combinations of Z and C
Boolean
Expression
Opcode
?C + Z = 0
22
BLS (opr) Branch if Lower or Same
?C + Z = 1
23
BHS (opr) Branch if Higher or Same
?C = 0
24*
BLO (opr) Branch if Lower
?C = 1
25**
Source
Form
BHI (opr)
Operation
Branch if Higher
* Same Opcode as BCC
** Same Opcode as BCS
32
Other Branch Instructions
Bit Manipulation Branches
Source Form
Operation
Boolean
Addr
Expression Mode Opcode
BRCLR (opr)(msk)(rel) Branch if bit(s) Clear ?M • mm = 0
BRSET (opr)(msk)(rel) Branch if bit(s) Set
DIR
13
IND,X 1F
IND,Y 18 1F
?M • mm = 0 DIR
14
IND,X 1C
IND,Y 18 1C
Branch to Subroutine
BSR (opr)
Branch to Subroutine
Special*
REL
8D
* See Special Operations page in the PRG
33
Comparison Instructions
8 Bit Comparisons
Source Form
Operation
Boolean
Expression
Addr
Mode Opcode
CMPA (opr) Compare A to Memory
A-M
IMM
81
DIR
91
EXT
B1
IND,X A1
IND,Y 18 A1
CMPB (opr) Compare B to Memory
B-M
IMM
C1
DIR
D1
EXT
F1
IND,X E1
IND,Y 18 E1
34
Comparison Instructions
16 Bit Comparisons
Source Form
Operation
Boolean
Addr
Expression Mode
Opcode
CPD (opr)
Compare D to Memory
D - M:M+1
IMM
DIR
EXT
IND,X
IND,Y
1A 83
1A 93
1A B3
1A A3
CD A3
CPX (opr)
Compare X to Memory
X - M:M+1
IMM
8C
DIR
9C
EXT
BC
IND,X AC
IND,Y CD AC
CPY (opr)
Compare Y to Memory
Y - M:M+1
35
Do Activity #2 Now
Due: End of Class Today.
RETAIN THE LAST PAGE(S) (#3 onwards)!!
For Next Class:
• Bring Huang Textbook, & HC11 PRG
• Required Reading:
– Sec 2.9– 2.10, 3.3, 3.6, 3.7 of Huang
• This reading is necessary for getting points in
the Studio Activity!
36