Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
cursos:ensamblador:ensambladores [16-01-2024 08:05] – [Directivas comunes entre ensambladores] sromero | cursos:ensamblador:ensambladores [24-01-2024 08:01] (actual) – sromero | ||
---|---|---|---|
Línea 15: | Línea 15: | ||
Aunque estos 3 ensambladores comprenden los **nmemónicos** del Z80 (las instrucciones que hemos estado viendo en los anteriores capítulos), | Aunque estos 3 ensambladores comprenden los **nmemónicos** del Z80 (las instrucciones que hemos estado viendo en los anteriores capítulos), | ||
- | * pasmo y sjasmplus usan el nmenónico '' | + | * pasmo y sjasmplus usan el nmenónico '' |
- | * sjasmplus soporta "Fake instructions" | + | * sjasmplus soporta "Fake instructions" |
Pero la mayor incompatibilidad viene en las **directivas** del lenguaje ensamblador, | Pero la mayor incompatibilidad viene en las **directivas** del lenguaje ensamblador, | ||
Línea 66: | Línea 66: | ||
ORG 35000 | ORG 35000 | ||
- | | + | |
| | ||
menu: | menu: | ||
- | | + | |
- | | + | |
main: | main: | ||
- | | + | |
- | | + | |
- | | + | |
| | ||
INCLUDE " | INCLUDE " | ||
Línea 143: | Línea 143: | ||
ORG 33500 | ORG 33500 | ||
- | 82DC CD 0DAF | + | 82DC CD 0DAF |
- | 82DF 06 FF | + | 82DF 06 FF |
bucle: | bucle: | ||
- | 82E1 | + | 82E1 |
- | 82E2 | + | 82E2 |
- | 82E3 06 00 | + | 82E3 06 00 |
- | 82E5 CD 82F1 | + | 82E5 CD 82F1 |
- | 82E8 | + | 82E8 |
- | 82E9 CD 8304 | + | 82E9 CD 8304 |
- | 82EC 10 F3 | + | 82EC 10 F3 |
- | 82EE | + | 82EE |
82EF | 82EF | ||
Línea 187: | Línea 187: | ||
_loop: | _loop: | ||
... | ... | ||
- | | + | |
- | | + | |
Rutina2: | Rutina2: | ||
Línea 194: | Línea 194: | ||
_loop: | _loop: | ||
... | ... | ||
- | | + | |
- | | + | |
</ | </ | ||
\\ | \\ | ||
Línea 221: | Línea 221: | ||
\\ | \\ | ||
<code z80> | <code z80> | ||
- | | + | |
drawsp8x8_loopLD: | drawsp8x8_loopLD: | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
</ | </ | ||
\\ | \\ | ||
Línea 236: | Línea 236: | ||
\\ | \\ | ||
<code z80> | <code z80> | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
(...) ; Y así 8 veces | (...) ; Y así 8 veces | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
</ | </ | ||
\\ | \\ | ||
Línea 267: | Línea 267: | ||
<code z80> | <code z80> | ||
REPT 8 | REPT 8 | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
ENDM | ENDM | ||
</ | </ | ||
Línea 280: | Línea 280: | ||
<code z80> | <code z80> | ||
REPT 7 | REPT 7 | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
ENDM | ENDM | ||
- | | + | |
- | | + | |
- | | + | |
</ | </ | ||
\\ | \\ | ||
Línea 322: | Línea 322: | ||
ORG 35000 | ORG 35000 | ||
- | BORDCR EQU $5C48 ; Spectrum' | + | BORDCR EQU $5c48 ; Spectrum' |
; | ; | ||
Línea 432: | Línea 432: | ||
.loop: | .loop: | ||
... | ... | ||
- | | + | |
- | | + | |
Rutina2: | Rutina2: | ||
Línea 439: | Línea 439: | ||
.loop: | .loop: | ||
... | ... | ||
- | | + | |
.loop2: | .loop2: | ||
- | | + | |
- | | + | |
</ | </ | ||
Línea 453: | Línea 453: | ||
<code z80> | <code z80> | ||
REPT 8 | REPT 8 | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
ENDR | ENDR | ||
</ | </ | ||
Línea 478: | Línea 478: | ||
inicio: | inicio: | ||
- | | + | |
bucle: | bucle: | ||
- | | + | |
;... | ;... | ||
- | | + | |
DISPLAY "-- Final del ensamblado --" | DISPLAY "-- Final del ensamblado --" | ||
Línea 543: | Línea 543: | ||
IF (MODO_DEBUG == 1) | IF (MODO_DEBUG == 1) | ||
- | | + | |
- | | + | |
- | | + | |
ENDIF | ENDIF | ||
Línea 601: | Línea 601: | ||
\\ | \\ | ||
- | Ahora, sjasmplus sólo ensamblará e incluirá en el BIN/TAP final el código máquina de la rutina, si esta es llamada ('' | + | Ahora, sjasmplus sólo ensamblará e incluirá en el BIN/TAP final el código máquina de la rutina, si esta es llamada ('' |
Veamos el caso de nuestra librería '' | Veamos el caso de nuestra librería '' | ||
Línea 615: | Línea 615: | ||
PrintSpace: | PrintSpace: | ||
IFUSED | IFUSED | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
ENDIF | ENDIF | ||
PrintCR: | PrintCR: | ||
IFUSED | IFUSED | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
ENDIF | ENDIF | ||
</ | </ | ||
Línea 659: | Línea 659: | ||
IF USAR_PRINTSPACE = 1 | IF USAR_PRINTSPACE = 1 | ||
PrintSpace: | PrintSpace: | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
ENDIF | ENDIF | ||
IF USAR_PRINTCR = 1 | IF USAR_PRINTCR = 1 | ||
PrintCR: | PrintCR: | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
ENDIF | ENDIF | ||
Línea 706: | Línea 706: | ||
La desventaja de '' | La desventaja de '' | ||
+ | |||
+ | \\ | ||
+ | De nuevo, **pasmo no tiene esta funcionalidad**, | ||
+ | |||
+ | <code z80> | ||
+ | ; Macro de alineacion para PASMO | ||
+ | align macro value | ||
+ | if $ mod value | ||
+ | ds value - ($ mod value) | ||
+ | endif | ||
+ | endm | ||
+ | |||
+ | align 256 | ||
+ | </ | ||
Línea 731: | Línea 745: | ||
$ cat bucle.sym | $ cat bucle.sym | ||
bucle = $0002 ; addr, local, , , , bucle.asm:4 | bucle = $0002 ; addr, local, , , , bucle.asm:4 | ||
- | variable | + | variable |
$ cat bucle.map | $ cat bucle.map | ||
- | bucle = $82DE ; addr, local, , bucle, , bucle.asm: | + | bucle = $82de ; addr, local, , bucle, , bucle.asm: |
- | variable | + | variable |
- | __head | + | __head |
- | __tail | + | __tail |
- | __size | + | __size |
$ cat bucle.lis | $ cat bucle.lis | ||
Línea 744: | Línea 758: | ||
| | ||
2 | 2 | ||
- | | + | |
| | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
9 | 9 | ||
- | 10 0007 10f9 | + | 10 0007 10f9 |
11 | 11 | ||
- | 12 0009 c9 | + | 12 0009 c9 |
13 | 13 | ||
14 000a ffff variable: | 14 000a ffff variable: | ||
Línea 781: | Línea 795: | ||
; Llamar a función C | ; Llamar a función C | ||
- | CALL _funcion_externa_de_C | + | call _funcion_externa_de_C |
; Acceder a variable C | ; Acceder a variable C | ||
- | LD A, _una_variable_global_de_C | + | ld a, _una_variable_global_de_C |
loop: | loop: | ||
(...) | (...) | ||
- | DJNZ loop ; do it for all five members of array a[] | + | djnz loop ; do it for all five members of array a[] |
- | RET | + | ret |
</ | </ | ||
\\ | \\ | ||
Línea 858: | Línea 872: | ||
\\ | \\ | ||
- | **[ [[.: | + | **[ [[.: |