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
No hay comentarios:
Publicar un comentario
Si gustas puedes dejar un comentario.