Reparando tu compu!

Contáctanos

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

Juego en BASIC ensamblador

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.

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 

 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: video para operaciones simples en ensamblador https://www.youtube.com/watch?v=hczDiEqOYH4





 
  Ref: wikipedia.org