home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
program
/
compiler
/
as32
/
as31.cat
< prev
next >
Wrap
Text File
|
1991-01-27
|
21KB
|
529 lines
A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓) A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓)
N✓N✓N✓NA✓A✓A✓AM✓M✓M✓ME✓E✓E✓E
as31 - An Intel 8031/8051 assembler
S✓S✓S✓SY✓Y✓Y✓YN✓N✓N✓NO✓O✓O✓OP✓P✓P✓PS✓S✓S✓SI✓I✓I✓IS✓S✓S✓S
a✓a✓a✓as✓s✓s✓s3✓3✓3✓31✓1✓1✓1 [ -✓-✓-✓-F✓F✓F✓Ff✓f✓f✓fo✓o✓o✓or✓r✓r✓rm✓m✓m✓ma✓a✓a✓at✓t✓t✓t ] [ -✓-✓-✓-A✓A✓A✓Aa✓a✓a✓ar✓r✓r✓rg✓g✓g✓g ] [ -✓-✓-✓-l✓l✓l✓l ] i✓i✓i✓in✓n✓n✓nf✓f✓f✓fi✓i✓i✓il✓l✓l✓le✓e✓e✓e.✓.✓.✓.a✓a✓a✓as✓s✓s✓sm✓m✓m✓m
D✓D✓D✓DE✓E✓E✓ES✓S✓S✓SC✓C✓C✓CR✓R✓R✓RI✓I✓I✓IP✓P✓P✓PT✓T✓T✓TI✓I✓I✓IO✓O✓O✓ON✓N✓N✓N
_✓A_✓s_✓3_✓1 assembles _✓i_✓n_✓f_✓i_✓l_✓e._✓a_✓s_✓m into one of several different
output formats. The output will be in a file called
infile.obj. The .asm extenstion is required.
O✓O✓O✓OP✓P✓P✓PT✓T✓T✓TI✓I✓I✓IO✓O✓O✓ON✓N✓N✓NS✓S✓S✓S
The options must appear before the input file name. Both
options are optional. The text of each flag must appear on
the same argument as the flag. For example, "-Fod" is a
valid argument, but "-F od" is not.
-_✓F_✓f_✓o_✓r_✓m_✓a_✓t
This options specifies the output format that is to be
used.
Currently the only options available for this are:
tdr This format generates an asci file of hex digits
formatted in such a way, so that they can be read
by tdr's debugger. An argument can be specified
(See -A option) which will pass a format specific
string to the format generator. In this case, the
argument string represents an offset to add to the
location counter. This offset is specified in
decimal and defaults to 64*1024 (0x10000). To
specify and offset of 100, you would need "-Ftdr
-A100" when invoking the assembler.
byte This format is simply an address and a byte on
each line, in ascii. No -A option is used.
od This format is similar to the output from od(1).
The format consists of an address followed by
sixteen hexadecimal bytes, followed by the
equivilant ASCII. No -A option is used.
srec2, srec3, srec4
The srecord generator is capable of generating
output with any one of 2, 3, or 4 byte addresses.
The -A option can be used to set the base address
offset, the default here is 0x0000 (unlike t✓t✓t✓td✓d✓d✓dr✓r✓r✓r).
- 1 - Formatted: January 25, 1991
A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓) A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓)
NOTE: This assembler allows for the output formats to
be expanded to include many different output formats.
-Aarg
This option specifies a format specific string which is
passed to the format generator. Both format "tdr" and
the srecord formats use this option.
-l This option tells the assembler to also generate a
listing file. A listing will be placed in the file
infile.lst. Where 'infile' is the file that is being
assembled. This option may appear anywhere before
infile.asm. The option must occur isolated on the
command line.
The listing file shows the assembler generated code in
hex, and up to 60 characters are retained from the
source file.
A✓A✓A✓AS✓S✓S✓SS✓S✓S✓SE✓E✓E✓EM✓M✓M✓MB✓B✓B✓BL✓L✓L✓LE✓E✓E✓ER✓R✓R✓R I✓I✓I✓IN✓N✓N✓NS✓S✓S✓ST✓T✓T✓TR✓R✓R✓RU✓U✓U✓UC✓C✓C✓CT✓T✓T✓TI✓I✓I✓IO✓O✓O✓ON✓N✓N✓NS✓S✓S✓S
This assembler accepts standard 8031/8051 instruction
formats. Below is a list of instructions and addressing
modes.
INSTRUCTION BYTES CYCLES
----------- ----- ------
ACALL addr11 2 24
ADD A, #data8 2 12
ADD A, @Ri 1 12
ADD A, Rn 1 12
ADD A, direct 2 12
ADDC A, #data8 2 12
ADDC A, @Ri 1 12
ADDC A, Rn 1 12
ADDC A, direct 2 12
AJMP addr11 2 24
ANL A, #data8 2 12
ANL A, @Ri 1 12
ANL A, Rn 1 12
ANL A, direct 2 12
ANL C, /bit 2 24
ANL C, !bit 2 24
ANL C, bit 2 24
ANL direct, #data8 3 24
ANL direct, A 2 12
CJNE @Ri, #data8, rel 3 24
CJNE A, #data8, rel 3 24
CJNE A, direct, rel 3 24
CJNE Rn, #data8, rel 3 24
CLR A 1 12
- 2 - Formatted: January 25, 1991
A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓) A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓)
CLR C 1 12
CLR bit 2 12
CPL A 1 12
CPL C 1 12
CPL bit 2 12
DA A 1 12
DEC @Ri 1 12
DEC A 1 12
DEC DPTR 1 12
DEC Rn 1 12
DEC direct 2 12
DIV AB 1 48
DJNZ Rn, rel 2 24
DJNZ direct, rel 3 24
INC @Ri 1 12
INC A 1 12
INC DPTR 1 24
INC Rn 1 12
INC direct 2 12
JB bit, rel 3 24
JBC bit, rel 3 24
JC relative 2 24
JMP @A + DPTR 1 24
JMP @DPTR + A 1 24
JNB bit, rel 3 24
JNC relative 2 24
JNZ relative 2 24
JZ relative 2 24
LCALL addr16 3 24
LJMP addr16 3 24
MOV @Ri, #data8 2 12
MOV @Ri, A 1 12
MOV @Ri, direct 2 24
MOV A, #data8 2 12
MOV A, @Ri 1 12
MOV A, Rn 1 12
MOV A, direct 2 12
MOV C, bit 2 12
MOV DPTR, #data16 3 24
MOV Rn, #data8 2 12
MOV Rn, A 1 12
MOV Rn, direct 2 24
MOV bit, C 2 24
MOV direct, #data8 3 24
MOV direct, @Ri 2 24
MOV direct, A 2 12
MOV direct, Rn 2 24
MOV direct, direct 3 24
MOVC A, @A + DPTR 1 24
MOVC A, @A + PC 1 24
MOVC A, @DPTR + A 1 24
MOVC A, @PC + A 1 24
- 3 - Formatted: January 25, 1991
A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓) A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓)
MOVX @DPTR, A 1 12
MOVX @Ri, A 1 24
MOVX A, @DPTR 1 24
MOVX A, @Ri 1 24
MUL AB 1 48
NOP 1 12
ORL A, #data8 2 12
ORL A, @Ri 1 12
ORL A, Rn 1 12
ORL A, direct 2 12
ORL C, /bit 2 24
ORL C, !bit 2 24
ORL C, bit 2 24
ORL direct, #data8 3 24
ORL direct, A 2 12
POP direct 2 24
PUSH direct 2 24
RET 1 24
RETI 1 24
RL A 1 12
RLC A 1 12
RR A 1 12
RRC A 1 12
SETB A 1 12
SETB bit 2 12
SJMP relative 2 24
SUBB A, #data8 2 12
SUBB A, @Ri 1 12
SUBB A, Rn 1 12
SUBB A, direct 2 12
SWAP A 1 12
XCH A, #data8 2 12
XCH A, @Ri 1 12
XCH A, Rn 1 12
XCH A, direct 2 12
XCHD A, #data8 2 12
XCHD A, @Ri 1 12
XCHD A, Rn 1 12
XCHD A, direct 2 12
XRL A, #data8 2 12
XRL A, @Ri 1 12
XRL A, Rn 1 12
XRL A, direct 2 12
XRL direct, #data8 3 12
XRL direct, A 2 12
A✓A✓A✓AS✓S✓S✓SS✓S✓S✓SE✓E✓E✓EM✓M✓M✓MB✓B✓B✓BL✓L✓L✓LE✓E✓E✓ER✓R✓R✓R D✓D✓D✓DI✓I✓I✓IR✓R✓R✓RE✓E✓E✓EC✓C✓C✓CT✓T✓T✓TI✓I✓I✓IV✓V✓V✓VE✓E✓E✓ES✓S✓S✓S
As31 includes the following assembler directives:
.ORG expr
Start assembling at the address specified by the
- 4 - Formatted: January 25, 1991
A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓) A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓)
expression expr. An error occurs if the assembler
starts assembling over an address space that has
previously been assembled into.
.EQU symbol, expr
Set symbol to the value of expr. The value for expr
must be known during the first pass, when the line
containing the .EQU is encountered.
.BYTE expr, expr, ...
Assemble the bytes specified by the expression into
memory. A string may also be specified with this
directive.
.WORD expr, expr, ...
Assemble the words specified by the expression into
memory. The byte ordering used, is that used by the
8031.
.FLAG symbol1, symbol.[0-7]
Sets symbol1 to the bit address specified by the
symbol.[0-7] expression. Where [0-7] denotes a
character between 0 and 7. The resulting bit address
is checked to see if it is a valid bit address.
.END This directive is ignored.
.SKIP expr
Adds the value of expr to the location counter. Used to
reserve a block of uninitialized data. Expr should be
in bytes.
L✓L✓L✓LE✓E✓E✓EX✓X✓X✓XI✓I✓I✓IC✓C✓C✓CA✓A✓A✓AL✓L✓L✓L C✓C✓C✓CO✓O✓O✓ON✓N✓N✓NV✓V✓V✓VE✓E✓E✓EN✓N✓N✓NT✓T✓T✓TI✓I✓I✓IO✓O✓O✓ON✓N✓N✓NS✓S✓S✓S
- All characters following a semi-colon are ignored until
a newline is encountered.
- All numbers default to decimal, unless the number
starts with one of the following:
0x or 0X
This indicates a hexadecimal number. ie. 0x00ff
0b or 0B
This indicates a binary number. (1's and 0's). ie.
- 5 - Formatted: January 25, 1991
A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓) A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓)
0b1100110010
0 This indicates an octal number. ie. 0377
- All numbers default to decimal, unless the number ends
with one of the following characters:
b or B
This indicates a binary number. Unless 0x was used
above. ie. 1010101b
h or H
This always indicates a hex number, However the if
the first character is non-numerical, then either
0x or 0 must be specified. This avoids confusing
the assembler into thinking a hex number is a
symbol. For example: 0ffh, 0xffh, 0XffH, 20h,
0x20 and 020h are means to specify a valid
hexdigit. But the following are not: ffh, 0ff.
d or D
This forces a number to decimal. Unless 0X was
used. ie. 129d
o or O
This causes the number to be interpreted as octal.
ie. 377o
- A character constant can be entered as 'c' where c is
some character. \b, \n, \r, \t, \' \0 are also valid. A
character constant can be used anywhere that an integer
value can.
- A string is entered as a set of characters enclosed in
double quotes "". A string is only valid with the
.BYTE directive. \b, \n, \r, \t, \" are also valid
escapes. However \0 is not.
- Instructions, directives, and the symbols: R0, R1, R2,
R3, R4, R5, R6, R7, A, AB, and C can be entered in
upper or lower case without assembler confusion. These
words however cannot be defined as a user symbol. Any
user symbol may be used, and case will be preserved. So
the user symbols "foo" and "Foo" are different, but
"addc" is the same as "aDdC".
- A symbol can be any alpha numerical character plus the
underscore ('_').
- 6 - Formatted: January 25, 1991
A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓) A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓)
- Expressions are accepted in most places where a value
or a symbol is needed. An expression consists of the
following operators. All operators evaulate to integer
objects (higher precedence opertors listed first):
- Unary minus
& Bit-wise AND.
| Bit-Wise OR.
* Integer multiplication.
\ Integer division
% Intieger modulus
+ Integer addition.
- Integer subtraction.
- In addition to these operators, a special symbol '*'
may be used to represent the current location counter.
E✓E✓E✓EX✓X✓X✓XA✓A✓A✓AM✓M✓M✓MP✓P✓P✓PL✓L✓L✓LE✓E✓E✓ES✓S✓S✓S
Below is a sample assembly program.
.org 0
start: mov P3, #0xff ; use alternate fns on P3
; leds on P1 are inverted.
setb F0 ; climbing up
mov A, #0x01 ; initial bit
write: cpl A ; write it
mov P1, A
cpl A
acall delay
jb F0, climbup ; climbing which way?
climbdn: rr A ; down - shift right
jnb ACC.0, write ; back for more
setb F0
ajmp write
climbup: rl A ; up - shift left
jnb ACC.7, write ; back for more
clr F0
ajmp write
.end ; this directive ignored.
- 7 - Formatted: January 25, 1991
A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓) A✓A✓A✓AS✓S✓S✓S3✓3✓3✓31✓1✓1✓1(✓(✓(✓(1✓1✓1✓1L✓L✓L✓L)✓)✓)✓)
A✓A✓A✓AU✓U✓U✓UT✓T✓T✓TH✓H✓H✓HO✓O✓O✓OR✓R✓R✓R
Ken Stauffer (University of Calgary)
stauffer@cpsc.ucalgary.ca
- 8 - Formatted: January 25, 1991