]> git.llucax.com Git - z.facultad/66.09/etherled.git/blob - doc/resumen-asx8051.txt
Ejemplo completo del módulo de leds implementado en assembly y llamado desde un
[z.facultad/66.09/etherled.git] / doc / resumen-asx8051.txt
1 asxxxx es una serie de cross assemblers para varias arquitecturas. En 
2 particular, el asx8051 es para el 8051.
3
4 Todo lo que escribo funciona len Linux, no tengo idea si en Windows es igual,
5 pero debería funcionar.
6
7 Para ensamblar
8 --------------
9
10         asx8051 -los archivo.asm
11
12 Las opciones l, o y s crean archivo.lst, archivo.rel y archivo.sym, 
13 respectivamente. El más importante es el archivo objeto: archivo.rel.
14
15 Para linkear
16 ------------
17
18 El linker es medio raro, creo que la mejor forma de ejecutarlo es:
19
20         1) crear un archivo prog.lnk que contiene la lista de los archivos
21            .rel que se van a linkear. Por ejemplo, si queremos linkear 
22            prog1.rel y prog2.rel:
23
24            ------------ prog.lnk -------------
25            prog1 prog2
26            -im
27            -----------------------------------
28
29            Al final pongo -i para que genere la salida en formato Intel HEX
30            (que después se convierte a binario con HEX2BIN) y la opción m 
31            para que genere prog.map (información).
32
33         2) Ejecutar:
34
35            aslink -f prog.lnk
36
37 La otra opción es hacer 'aslink -c' y escribirle a continuación exactamente 
38 lo mismo que iría en el archivo prog.lnk.
39
40 Instrucción genérica
41 --------------------
42
43 [label:]  Operator        Operand         [;Comment(s)] 
44
45
46 Instrucciones y operandos para el asx8051
47 -----------------------------------------
48
49         K.1  8051 REGISTER SET 
50
51         The following is a list of the 8051 registers used by AS8051:  
52
53                 a,b             -       8-bit accumulators
54                 r0,r1,r2,r3     -       8-bit registers
55                 r4,r5,r6,r7
56                 dptr            -       data pointer
57                 sp              -       stack pointer
58                 pc              -       program counter
59                 psw             -       status word
60                 c               -       carry (bit in status word)
61
62
63         K.2  8051 INSTRUCTION SET 
64
65
66            The  following tables list all 8051 mnemonics recognized
67         by the AS8051  assembler.   The  following  list  specifies  the
68         format for each addressing mode supported by AS8051:  
69
70                 #data           immediate data
71                                 byte or word data
72         
73                 r,r1,r2         register r0,r1,r2,r3,r4,r5,r6, or r7
74         
75                 @r              indirect on register r0 or r1
76                 @dptr           indirect on data pointer
77                 @a+dptr         indirect on accumulator plus data pointer
78                 @a+pc           indirect on accumulator plus program counter
79                 
80                 addr            direct memory address
81
82                 bitaddr         bit address
83         
84                 label           call or jump label
85
86         The terms data, addr, bitaddr, and label may all be expressions.  
87
88            Note  that  not all addressing modes are valid with every in-
89         struction.  Refer to  the  8051  technical  data  for  valid
90         modes.  
91
92
93         K.2.1  Inherent Instructions 
94
95                 nop
96
97
98         K.2.6  Move Instructions 
99
100                 mov     a,#data         mov     a,addr
101                 mov     a,r             mov     a,@r
102
103                 mov     r,#data         mov     r,addr
104                 mov     r,a
105
106                 mov     addr,a          mov     addr,#data
107                 mov     addr,r          mov     addr,@r
108                 mov     addr1,addr2     mov     bitaddr,c
109         
110                 mov     @r,#data        mov     @r,addr
111                 mov     @r,a
112
113                 mov     c,bitaddr
114                 mov     dptr,#data
115
116                 movc    a,@a+dptr       movc    a,@a+pc
117                 movx    a,@dptr         movx    a,@r
118                 movx    @dptr,a         movx    @r,a
119
120
121         K.2.8  Single Operand Instructions
122
123                 clr     a               clr     c       
124                 clr     bitaddr
125                 cpl     a               cpl     c       
126                 cpl     bitaddr
127                 setb    c               setb    bitaddr
128
129                 da      a               
130                 rr      a               rrc     a
131                 rl      a               rlc     a
132                 swap    a
133
134                 dec     a               dec     r       
135                 dec     @r
136                 inc     a               inc     r       
137                 inc     dptr            inc     @r
138
139                 div     ab              mul     ab
140
141                 pop     addr            push    addr
142
143
144         K.2.8  Two Operand Instructions
145
146                 add     a,#data         add     a,addr  
147                 add     a,r             add     a,@r
148                 addc    a,#data         addc    a,addr  
149                 addc    a,r             addc    a,@r
150                 subb    a,#data         subb    a,addr  
151                 subb    a,r             subb    a,@r
152                 orl     a,#data         orl     a,addr  
153                 orl     a,r             orl     a,@r
154                 orl     addr,a          orl     addr,#data
155                 orl     c,bitaddr       orl     c,/bitaddr
156                 anl     a,#data         anl     a,addr
157                 anl     a,r             anl     a,@r
158                 anl     addr,a          anl     addr,#data
159                 anl     c,bitaddr       anl     c,/bitaddr
160                 xrl     a,#data         xrl     a,addr
161                 xrl     a,r             xrl     a,@r
162                 xrl     addr,a          xrl     addr,#data
163                 xrl     c,bitaddr       xrl     c,/bitaddr
164                 xch     a,addr          xch     a,r     
165                 xch     a,@r            xchd    a,@r
166
167
168         K.2.3  Call and Return Instructions 
169
170                 acall   label           lcall   label
171                 ret                     reti
172
173         K.2.4  Jump Instructions 
174
175                 ajmp    label
176                 cjne    a,#data,label   cjne    a,addr,label
177                 cjne    r,#data,label   cjne    @r,#data,label
178                 djnz    r,label         djnz    addr,label
179                 jbc     bitadr,label
180                 jb      bitadr,label    jnb     bitadr,label
181                 jc      label           jnc     label
182                 jz      label           jnz     label
183                 jmp     @a+dptr
184                 ljmp    label           sjmp    label
185
186
187 Parece que no se puede usar simplemente 'jmp' o 'call', y hay que elegir una
188 de 'acall', 'lcall', 'ljmp', 'sjmp', etc.
189
190
191 Labels
192 ------
193
194 Caracteres aceptados:  
195
196                 A-Z 
197                 a-z 
198                 0-9 (menos el primer caracter - ver local symbols)
199                 . (Period) 
200                 $ (Dollar sign) 
201                 _ (underscore) 
202
203 El label puede ser de cualquier tamaño, pero sólo los primeros 8 caracteres
204 son significativos.
205
206 Ejemplos:
207
208 aaaa:   add     A,B
209 _aq:    nop
210 $abc:   sjmp    aaaa
211 gl::    sub     A,B
212
213 'gl' es un label global, porque tiene dos ':'. Puede ser referenciado en otros
214 módulos.
215
216   Local Symbols
217   -------------
218
219   Son labels locales al bloque en el que son definidos (creo que un label 
220   común comienza un nuevo bloque).
221   Genéricamente son del tipo n$, donde n es un número de 0 a 255.
222  
223   Ejemplos:
224
225   1$:
226   27$:
227   167$:
228   255$:
229
230   Ejemplo de uso:
231
232         a:      ldx     #atable ;get table address
233                 lda     #0d48   ;table length
234         1$:     clr     ,x+     ;clear
235                 deca
236                 bne     1$
237         b:      ldx     #btable ;get table address
238                 lda     #0d48   ;table length
239         1$:     clr     ,x+     ;clear
240                 deca
241                 bne     1$
242
243
244 Algunas tablas
245 --------------
246
247         Table 3         Assembler Operators 
248         ---------------------------------------------------------------- 
249         #   Number sign         Immediate expression indicator. 
250         .   Period              Current location counter.  
251         (   Left parenthesis    Expression delimiter.  
252         )   Right parenthesis   Expression delimeter.  
253         ---------------------------------------------------------------- 
254
255
256         Table 4         Unary Operators 
257         ---------------------------------------------------------------- 
258
259         <   Left bracket        <FEDC   Produces  the lower byte
260                                 value of the expression.
261                                 (DC) 
262
263         >   Right bracket       >FEDC   Produces  the upper byte
264                                 value of the expression.
265                                 (FE) 
266
267         +   Plus sign           +A      Positive value of A 
268
269         -   Minus sign          -A      Produces   the  negative
270                                         (2's complement) of A.  
271
272         ~   Tilde               ~A      Produces the 1's comple-
273                                         ment of A.  
274
275         '   Single quote        'D      Produces  the  value  of
276                                         the character D.  
277
278         "   Double quote        "AB     Produces the double byte
279                                         value for AB.  
280
281         \   Backslash           '\n     Unix style characters 
282                                         \b, \f, \n, \r, \t 
283                                         or '\001   or octal byte values.
284         ---------------------------------------------------------------- 
285
286
287         Table 5         Binary Operators 
288         ---------------------------------------------------------------- 
289
290         <<  Double          0800 << 4   Produces the 4 bit 
291         Left bracket                    left-shifted   value  of
292                                         0800.  (8000) 
293
294         >>  Double          0800 >> 4   Produces the 4 bit 
295         Right bracket                   right-shifted  value  of
296                                         0800.  (0080) 
297
298         +   Plus sign       A + B       Arithmetic      Addition
299                                         operator.  
300
301         -   Minus sign      A - B       Arithmetic   Subtraction
302                                         operator.  
303
304         *   Asterisk        A * B       Arithmetic   Multiplica-
305                                         tion operator.   (signed
306                                         16-bit) 
307
308         /   Slash           A / B       Arithmetic      Division
309                                         operator.        (signed
310                                         16-bit quotient) 
311
312         &   Ampersand       A & B       Logical AND operator.  
313
314         |   Bar             A | B       Logical OR operator.  
315
316         %   Percent sign    A % B       Modulus operator.  
317                                         (16-bit value) 
318
319         ^   Up arrow or     A ^ B       EXCLUSIVE OR operator.  
320                                         circumflex 
321
322         ---------------------------------------------------------------- 
323
324
325
326 Location Counter
327 ----------------
328
329 El símbolo . (punto) representa la dirección de la instrucción. Ejemplos:
330
331         sjmp    #.
332         sjmp    #.+0x10
333
334 (También se puede usar 'sjmp .', sin el #).
335
336 Constantes
337 ----------
338
339 En lugar de la directiva 'equ' se usa un '=':
340
341 LABEL   =       EXPRESSION
342
343 Ejemplos:
344
345 NUM     =       10
346 A       =       NUM + 0x12
347 G       ==      3
348
349 El label G es global, porque está definido con '=='.
350
351
352 Números
353 -------
354
355 Por defecto, los números se expresan en decimal. Si se expresa un número 
356 negativo, el ensamblador utiliza complemento a 2.
357
358         Table 6         Temporary Radix Operators 
359         ---------------------------------------------------------------- 
360         $%,   0b, 0B            Binary radix operator.  
361         $&,   0o, 0O, 0q, 0Q    Octal radix operator.  
362         $#,   0d, 0D            Decimal radix operator.  
363         $$,   0h, 0H, 0x, 0X    Hexidecimal radix operator.  
364         ---------------------------------------------------------------- 
365
366
367 Directivas
368 ----------
369
370 .byte y .db
371
372   Generan bytes sucesivos de datos binarios en el módulo objeto.
373
374         Format:  
375
376         .byte   exp             ;Stores the binary value
377         .db     exp             ;of the expression in the
378                                 ;next byte.
379
380         .byte   exp1,exp2,expn  ;Stores the binary values
381         .db     exp1,exp2,expn  ;of the list of expressions
382                                 ;in successive bytes.
383
384         where:  exp,    represent expressions that will be
385         exp1,   truncated to 8-bits of data.
386         .       Each expression will be calculated
387         .       as a 16-bit word expression,
388         .       the high-order byte will be truncated.
389         .       Multiple expressions must be
390         expn    separated by commas.
391
392 .word y .dw
393
394   Idem, pero 16-bits.
395
396 .ds, .blkb y .blkw
397
398   Reservan bloques de espacio. .blkw reserva bloques de 16 bits.
399
400         Format:
401
402         .ds     N ; reserva N bytes
403         .blkb   N ; idem
404         .blkw   N ; reserva N words
405
406 .ascii, .ascis y .asciz
407
408   Genera texto en el módulo objeto. Si se usa .ascis, el último caracter
409   tiene el MSB en 1. Si se usa .asciz, se añade un caracter '\0' al final.
410
411         Format:  
412
413         .ascii  /string/ 
414
415         where:  string  is a string of printable ascii characters.  
416
417         /  /    represent   the  delimiting  characters.   These
418                 delimiters   may   be   any   paired    printing
419                 characters,  as  long  as the characters are not
420                 contained within  the  string  itself.   If  the
421                 delimiting  characters  do not match, the .ascii
422                 directive will give the (q) error.  
423
424 .area
425
426   Define un segmento de código o datos.
427
428         Format:  
429
430         .area   name    [(options)] 
431
432         where:  name    represents the symbolic name of the program sec-
433         tion.   This  name  may  be  the  same  as   any
434         user-defined  symbol  as  the area names are in-
435         dependent of all symbols and labels.  
436
437         options specify the type of program or data area:  
438                 ABS     absolute (automatically invokes OVR) 
439                 REL     relocatable 
440                 OVR     overlay 
441                 CON     concatenate 
442                 PAG     paged area 
443
444         The .area directive provides a means of defining and separat-
445         ing multiple programming and data sections.   The  name  is  the
446         area  label used by the assembler and the linker to collect code
447         from various separately assembled modules into one section.  The
448         name may be from 1 to 8 characters in length.  
449
450         The options are specified within parenthesis and separated by
451         commas as shown in the following example:  
452
453         .area  TEST  (REL,CON)  ;This section is relocatable
454                                 ;and concatenated with other
455                                 ;sections of this program area.
456
457         .area  DATA  (REL,OVR)  ;This section is relocatable
458                                 ;and overlays other sections
459                                 ;of this program area.
460
461         .area  SYS   (ABS,OVR)  ;(CON not allowed with ABS)
462                                 ;This section is defined as
463                                 ;absolute. Absolute sections
464                                 ;are always overlayed with
465                                 ;other sections of this program
466                                 ;area.
467
468         .area  PAGE  (PAG)      ;This is a paged section. The
469                                 ;section must be on a 256 byte
470                                 ;boundary and its length is
471                                 ;checked by the linker to be
472                                 ;no larger than 256 bytes.
473                                 ;This is useful for direct page
474                                 ;areas.
475
476   Las opciones por defecto son (REL,CON). El area _CODE está definida por
477   defecto y es REL,CON.
478
479   Específico para asx8051
480   -----------------------
481
482   Se agregan las siguientes opciones para la directiva .area:
483
484         CODE for codespace
485         DATA for internal data
486         BIT  for internal bit-addressable
487         XDATA for external data.
488
489         These will typically be used as follows (names are examples):
490         .area   IDATA (DATA)
491         .area   IBIT (BIT)
492         .area   MYXDATA (REL,CON,XDATA)
493         .area   MYCODE (REL,CON,CODE)
494
495         ATENCION
496         --------
497   
498         The default segment, _CODE, should not be used for the 8051.  For
499         compatibility reasons, _CODE is allocated in "DATA" space.  You
500         should always define an area in the CODE space.
501
502
503 .org
504
505   Válido solo en un area absoluta. Especifica la posición actual en el area.
506
507 .include
508
509   Incluye un archivo.
510
511         Format:
512
513         .include "file"
514