Bibliografiia
"JUEGOS PARA EL DRAGOON"
M.James / S.M. Gee / K. Ewbank, 1983.
ENSAMBLADOR, "BASIC" O "BEGINNERS ALL PURPOSE SYMBOLIC INSTRUCTION CODE"
Invasores
Bucle principal
Inicializacioon de la cadena de invasores
Inicializacioon de la pantalla
Loogica de movimiento y disparo
Disparo de los misiles
Movimiento de los misiles y comprobasioon del impacto
Rutina de explosioon
Borrado del invasor destruido
Visualizacioon de la cadena de invasores
Movimiento de los invasores de un lado al otro
Final del juego.
Programa
Rem Invasores
Clear 2000
Gosub 150
Gosub 260
Gosub 330
Gosub 280
If F=1 then gosub 480 else for Q=1 to 20:Next Q
if h=1 then gosub 540
M=M+1
If M>4 then M=0:Gosub 740
If RND(0)>.98 then print@L, B
$; :L+32:Gosub 720
If L>319 then gosub 800
If L$=B$ Then goto 890
goto 50
I$=CHR$(158)+CHR$(157)+CHR$()
FOR I=1 TO 8
L$=L$+I$+CHR$(128)
NEXT I
E=O
L$=L$+ST5RING$(65,128)+LEFT$(L$,LEN(L$)-2)
X=31
B$=STRING$(127,128)
K=0
L=32
RETURN
CLSO
PRINT@L,L$;
SET(X,31,2)
SET(X+1,31,2)
SET(X+2,31,2)
SET(X+1,30,2)
RETURN
X$=INKEY$
IF X$="" THEN RETURN
IF X$=CHR$(94) THEN GOTO 420
RESET(X,31)
RESET(X+1, 30)
RESET(X+2,31)
IF X$=CHR$(8) AND X>2 THEN X =X-1
IF X$CHR$(9) AND X<60 THEN
X=X+1
RETURN
RESET (XM, YM)
XM=X+1
YM=29
SET (XM,YM,0)
F=1
RETURN
RESET(XM, YM)
YM= YM-1
IF YM=0 THEN F=0:RETURN
IF POINT(XM,YM)=2 THEN H=1:R
RETURN
SET(XM, YM,0)
FOR Q=1 TO 10
SET (XM+2-RND(4),YM+1-RND(2),RND(5))
SOUND RND(255), 1
NEXT Q
FOR I=XM-2 TO XM+1
FOR J=YM-1 TO YM
RESET(I,J)
NEXT J
NEXT I
IF E=1 THEN RETURN
F=0
H=0
D=INT (XM/2)+INT(YM/2)*32-L
IF D=1 THEN D=2
L$=LEFT$(L$,D-2)+CHR$(128)+C HR$(128)+CHR$(128)+CHR$(128)+RIGHT$(L$,LEN(L$)-D-2)
GOSUB 720
YM=30
RETURN
PRINT@L,L$:
RETURN
IF K THEN L$=RIGHT$(L$,LEN(L$)-2)+CHR$(128)+CHR$(128) IF NOT K THEN L$=CHR$(128)
+CHR$(128)+LEFT$(L$, LEN(L$)-2) K=NOT K
IF K THEN SOUND 50,1
IF NOT K THEN SOUND 25.1
GO TO 720
XM=X:YM=31
E=1
GOSUB 540
PRINT@1."HAS PERDIDOO!!.";
INPUT"OTRA PARTIDA":A$
IF A$="S" THEN RUN
IF A$<>"N" THEN GOTO 840
CLS
END
PRINT@1, "HAS GANADO!!.";
GOTO 840
Este es un ejemplo, de un juego en lenguaje BASIC ensamblador.
Mostrando entradas con la etiqueta ensamblador. Mostrar todas las entradas
Mostrando entradas con la etiqueta ensamblador. Mostrar todas las entradas
miércoles, 31 de mayo de 2017
sábado, 22 de agosto de 2015
Recordando ensamblador
Las directivas
Comienzan con un punto.
Comentan los segmentos que se empiezan a crear
.stack
Segmento de la pila
.model
Tipo de modelo por ejemplo small.
.data
Sobre el segmento de datos.
.code
Comenta nuestro segmento de el código.
db
Define Bit
Software para programar en ensamblador
Software para programar en ensamblador
Ref: http://www.microsoft.com/en-us/download/details.aspx?id=12654 , http://emu8086.waxoo.com/
Punteros
Registro CS
2 bytes de tamaño.
Indica el segmento actual en que se encuentra el programa.
IP
2 bytes de tamaño.
Contiene el Offset actual.
CS: IP
Indica la dirección que se interpreta como próxima a ser
ejecutada.
DS, ES
También guardan direcciones.
Registro SS
Apunta a la pila
SP
Contiene el offset.
Registros más comunes
Ax, bx, cx, dx.
Ax se divide en ah, al. Es flexible, permite
multiplicaciones, divisiones, se denomina acumulador.
Bx en bh, bl. Es “handler”, abre/cierra archivos, etc, es un registro de propsito general también…
Cx en cl. Se suele usar como contador.
Dx en dh, dl. Suele ser el puntero, en lugares de memoria.
SI, DI se usan para copiar bytes.
La H implica High en inglés…. O de mayor valor y “l” de Low o menor valor.
Flags
O: Overflow D: Dirección I: Interrupciones rehabilitadas
T: Trampa S: Signo Z: Cero
A: Acarreo auxiliar P: Paridad C: Acarreo ±: No utilizado
Saltos
JO: Jump if overflow. Salta si el flag de desbordamiento está a uno
JNO: Jump if not overflow. Salta si el flag de desbordamiento está a cero.
JC, JNAE, JB: Los tres sirven para lo mismo. Significan: Jump if Carry, Jump if Not Above or Equal
y Jump if Below.
JZ o JE: Jump if Zero o Jump if Equal. Salta si el flag de cero
está a 1, o sea, si las dos instrucciones
comparadas son iguales.
JNZ o JNE: Jump if Not Zero o Jump if Not Equal. Salta si el flag
de ceroest a 0, o sea, si las dos
instrucciones comparadas no son iguales.
JBE o JNA: Jump if Below or
Equal o Jump if Not Above.
JA o JNBE: Jump if Above o
Jump if Not Below of Equal.
JS: Jump if Sign.
JNS: Jump if Not Sign.
JP, JPE: Jump if Parity o
Jump if Parity Even.
JNP, JPO: Jump if Not
Parity, Jump if Parity Odd.
JGE, JNL: Jump if Greater
or Equal, Jump if Not Less.
JLE, JNG: Jump if Lower or
Equal, Jump if Not Greater.
JG, JNLE: Jump if Greater,
Jump if Not Lower or Equal.
En una pila Last In First
Out “LIFO”
PUSH empuja una variable a la pila.
POP la saca.
PUSH DX ; Mete en la pila el contenido de DX
PUSH CX ; Y ahora el contenido de CX
POP AX ; Ahora saca el último valor introducido ( CX )
;y lo coloca en AX. Interrupción 21h
Para el tratamiento de archivos.
Referencia: http://platea.pntic.mec.es/jdelucas/ensamblador.htm
Ejemplo:
.data
caracter1 db ‘a$’
Se define el carácter “a”, el símbolo de “$” implica el fin
de la declaración.
.data
caracter1 db ‘a$’
caracter2 db 61h, ‘$’
61h indíca el carácter “a” en hexadecimal. Cuando es en bit,
se escribe “b”.
.data
caracter1 db
‘a$’
caracter2
db 61h, ‘$’
caracter3
db 97h, ‘$’
caracter4
db ‘hola mundo$’
caracter5
db ‘H’,’o’,’l’,’a’, ‘$’
character6 db 13,10, ‘Hola$’
db
13,10,’esto está en lista’
.code
inicio:
mov ax, @data
mov ds, ax
mov dx,
offset caracter1
mov ah, 09h
int 21h
mov ah, 4ch
int 21h
end inicio
@data hace referencia al segmento de datos… en registro ax
ds da a segmento de datos… o registro
dx es segmento de datos…
Un offset indíca un desplazamiento.
13, 10 es salto de línea… (retorno de carro y salto de
línea)
61h en hexadecimal
comenta el carácter a
97 versión decimal del carácter a
09h subfuncion para imprimir en pantalla
“int” interrupción 21 interrupcion 21h
“ah” parte alta del acumulador
Programa en turboasembler
“add” para sumaar registros
“sub” para restar registros
“multi” para miltiplicar registros
“div” para dividir
Ref: wikipedia.org
Suscribirse a:
Entradas (Atom)




