1 asxxxx es una serie de cross assemblers para varias arquitecturas. En
2 particular, el asx8051 es para el 8051.
4 Todo lo que escribo funciona len Linux, no tengo idea si en Windows es igual,
5 pero debería funcionar.
10 asx8051 -los archivo.asm
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.
18 El linker es medio raro, creo que la mejor forma de ejecutarlo es:
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:
24 ------------ prog.lnk -------------
27 -----------------------------------
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).
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.
43 [label:] Operator Operand [;Comment(s)]
46 Instrucciones y operandos para el asx8051
47 -----------------------------------------
51 The following is a list of the 8051 registers used by AS8051:
53 a,b - 8-bit accumulators
54 r0,r1,r2,r3 - 8-bit registers
60 c - carry (bit in status word)
63 K.2 8051 INSTRUCTION SET
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:
73 r,r1,r2 register r0,r1,r2,r3,r4,r5,r6, or r7
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
80 addr direct memory address
84 label call or jump label
86 The terms data, addr, bitaddr, and label may all be expressions.
88 Note that not all addressing modes are valid with every in-
89 struction. Refer to the 8051 technical data for valid
93 K.2.1 Inherent Instructions
98 K.2.6 Move Instructions
100 mov a,#data mov a,addr
103 mov r,#data mov r,addr
106 mov addr,a mov addr,#data
107 mov addr,r mov addr,@r
108 mov addr1,addr2 mov bitaddr,c
110 mov @r,#data mov @r,addr
116 movc a,@a+dptr movc a,@a+pc
117 movx a,@dptr movx a,@r
118 movx @dptr,a movx @r,a
121 K.2.8 Single Operand Instructions
144 K.2.8 Two Operand Instructions
146 add a,#data add a,addr
148 addc a,#data addc a,addr
150 subb a,#data subb a,addr
152 orl a,#data orl a,addr
154 orl addr,a orl addr,#data
155 orl c,bitaddr orl c,/bitaddr
156 anl a,#data anl a,addr
158 anl addr,a anl addr,#data
159 anl c,bitaddr anl c,/bitaddr
160 xrl a,#data xrl a,addr
162 xrl addr,a xrl addr,#data
163 xrl c,bitaddr xrl c,/bitaddr
168 K.2.3 Call and Return Instructions
170 acall label lcall label
173 K.2.4 Jump Instructions
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
180 jb bitadr,label jnb bitadr,label
184 ljmp label sjmp label
187 Parece que no se puede usar simplemente 'jmp' o 'call', y hay que elegir una
188 de 'acall', 'lcall', 'ljmp', 'sjmp', etc.
194 Caracteres aceptados:
198 0-9 (menos el primer caracter - ver local symbols)
203 El label puede ser de cualquier tamaño, pero sólo los primeros 8 caracteres
213 'gl' es un label global, porque tiene dos ':'. Puede ser referenciado en otros
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.
232 a: ldx #atable ;get table address
233 lda #0d48 ;table length
237 b: ldx #btable ;get table address
238 lda #0d48 ;table length
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 ----------------------------------------------------------------
256 Table 4 Unary Operators
257 ----------------------------------------------------------------
259 < Left bracket <FEDC Produces the lower byte
260 value of the expression.
263 > Right bracket >FEDC Produces the upper byte
264 value of the expression.
267 + Plus sign +A Positive value of A
269 - Minus sign -A Produces the negative
270 (2's complement) of A.
272 ~ Tilde ~A Produces the 1's comple-
275 ' Single quote 'D Produces the value of
278 " Double quote "AB Produces the double byte
281 \ Backslash '\n Unix style characters
283 or '\001 or octal byte values.
284 ----------------------------------------------------------------
287 Table 5 Binary Operators
288 ----------------------------------------------------------------
290 << Double 0800 << 4 Produces the 4 bit
291 Left bracket left-shifted value of
294 >> Double 0800 >> 4 Produces the 4 bit
295 Right bracket right-shifted value of
298 + Plus sign A + B Arithmetic Addition
301 - Minus sign A - B Arithmetic Subtraction
304 * Asterisk A * B Arithmetic Multiplica-
305 tion operator. (signed
308 / Slash A / B Arithmetic Division
312 & Ampersand A & B Logical AND operator.
314 | Bar A | B Logical OR operator.
316 % Percent sign A % B Modulus operator.
319 ^ Up arrow or A ^ B EXCLUSIVE OR operator.
322 ----------------------------------------------------------------
329 El símbolo . (punto) representa la dirección de la instrucción. Ejemplos:
334 (También se puede usar 'sjmp .', sin el #).
339 En lugar de la directiva 'equ' se usa un '=':
349 El label G es global, porque está definido con '=='.
355 Por defecto, los números se expresan en decimal. Si se expresa un número
356 negativo, el ensamblador utiliza complemento a 2.
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 ----------------------------------------------------------------
372 Generan bytes sucesivos de datos binarios en el módulo objeto.
376 .byte exp ;Stores the binary value
377 .db exp ;of the expression in the
380 .byte exp1,exp2,expn ;Stores the binary values
381 .db exp1,exp2,expn ;of the list of expressions
382 ;in successive bytes.
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.
398 Reservan bloques de espacio. .blkw reserva bloques de 16 bits.
402 .ds N ; reserva N bytes
404 .blkw N ; reserva N words
406 .ascii, .ascis y .asciz
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.
415 where: string is a string of printable ascii characters.
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.
426 Define un segmento de código o datos.
430 .area name [(options)]
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.
437 options specify the type of program or data area:
438 ABS absolute (automatically invokes OVR)
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.
450 The options are specified within parenthesis and separated by
451 commas as shown in the following example:
453 .area TEST (REL,CON) ;This section is relocatable
454 ;and concatenated with other
455 ;sections of this program area.
457 .area DATA (REL,OVR) ;This section is relocatable
458 ;and overlays other sections
459 ;of this program area.
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
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
476 Las opciones por defecto son (REL,CON). El area _CODE está definida por
477 defecto y es REL,CON.
479 Específico para asx8051
480 -----------------------
482 Se agregan las siguientes opciones para la directiva .area:
485 DATA for internal data
486 BIT for internal bit-addressable
487 XDATA for external data.
489 These will typically be used as follows (names are examples):
492 .area MYXDATA (REL,CON,XDATA)
493 .area MYCODE (REL,CON,CODE)
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.
505 Válido solo en un area absoluta. Especifica la posición actual en el area.