File: as31.1

package info (click to toggle)
as31 2.3.1-6
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch, wheezy
  • size: 1,344 kB
  • sloc: asm: 5,377; ansic: 1,510; yacc: 919; sh: 335; makefile: 78
file content (379 lines) | stat: -rw-r--r-- 10,171 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
.TH AS31 1
.SH NAME
as31 - An Intel 8031/8051 assembler
.SH SYNOPSIS
.B as31
[-h] [-l] [-s] [-v] [-Aarg] [-Ffmt] [-Ofile]
.BR infile.asm
.SH DESCRIPTION
.I As31
assembles
.IR infile.asm
into one of several different output formats. The output
will be in a file called infile.obj. The .asm extenstion
is required.

.SH OPTIONS
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.
.TP
.B \-h
This causes the assembler to print out a verbose message describing its options. 
The message is written to the standard error. 
.TP
.B \-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.
.IP
The listing file shows the assembler generated code in hex, and up to
60 characters are retained from the source file.
.TP
.B \-s
This causes the assembler to write output to standard output.
.TP
.B \-v
This causes the assembler to print a version number to the standard output.
.TP
.B \-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.
.TP
.B \-Fformat
This options specifies the output format that is to be used.
.IP
Currently the only options available for this are:
.RS
.IP "hex"
This format is the Intel HEX format which is expected by a
number of EPROM programmers and the PAULMON debugger.  For
use with some programmers, the output file's extension may
have to be changed to .HEX to be recognized by the programmer.
No -A option is used.  This format should be the
default if no -F option is used.

.IP "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.

.IP "byte"
This format is simply an address and a byte on each line, in ascii.
No -A option is used.

.IP "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.

.IP "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 \fBtdr\fP).
.RE
.IP
NOTE: This assembler allows for the output formats to be expanded to
include many different output formats.
.TP
.B \-Ofile
This option tells the assembler to write the output to a file.
.DE

.SH "ASSEMBLER INSTRUCTIONS"
This assembler accepts standard 8031/8051 instruction formats.
Below is a list of instructions
and addressing modes.
.IP
.RS
.nf
.ta +1i +2i +1i +1i
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
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
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
.fi
.RE

.SH "ASSEMBLER DIRECTIVES"
As31 includes the following assembler directives:
.IP ".ORG expr"
Start assembling at the address specified by the expression expr.
An error occurs if the assembler starts assembling over an address
space that has previously been assembled into.

.IP ".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.

.IP ".BYTE expr, expr, ..."
Assemble the bytes specified by the expression into memory. A
string may also be specified with this directive.

.IP ".WORD expr, expr, ..."
Assemble the words specified by the expression into memory.
The byte ordering used, is that used by the 8031.

.IP ".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.

.IP ".END"
This directive is ignored.

.IP ".SKIP expr"
Adds the value of expr to the location counter. Used
to reserve a block of uninitialized data. Expr should
be in bytes.

.SH "LEXICAL CONVENTIONS"
.IP "-"
All characters following a semi-colon are ignored until a newline
is encountered.

.IP "-"
All numbers default to decimal, unless the number starts with
one of the following:
.RS
.IP "0x or 0X"
This indicates a hexadecimal number. ie. 0x00ff
.IP "0b or 0B"
This indicates a binary number. (1's and 0's). ie. 0b1100110010
.IP "0"
This indicates an octal number. ie. 0377
.RE
.IP "-"
All numbers default to decimal, unless the number ends with
one of the following characters:
.RS
.IP "b or B"
This indicates a binary number. Unless 0x was used above.
ie. 1010101b
.IP "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.
.IP "d or D"
This forces a number to decimal. Unless 0X was used. ie. 129d
.IP "o or O"
This causes the number to be interpreted as octal. ie. 377o
.RE

.IP "-"
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.

.IP "-"
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.

.IP "-"
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".

.IP "-"
A symbol can be any alpha numerical character plus the underscore ('_').

.IP "-"
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):
.RS
.IP "-"
Unary minus
.IP "&"
Bit-wise AND.
.IP "|"
Bit-Wise OR.
.IP "*"
Integer multiplication.
.IP "/"
Integer division
.IP "%"
Integer modulus
.IP "+"
Integer addition.
.IP "-"
Integer subtraction.
.RE
.IP "-"
In addition to these operators, a special symbol '*' may be used
to represent the current location counter.

.SH EXAMPLES
.IP
Below is a sample assembly program.
.RS
.nf

                .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.
.fi


.SH AUTHORS
Ken Stauffer (University of Calgary) <stauffer@cpsc.ucalgary.ca>
.br
Martin Langer <martin-langer@gmx.de>