Programacion en Assembler

viernes, 18 de julio de 2008
Cuando hablamos del Assembler como un lenguaje ensamblador, podemos antes mencionar que la computadora maneja ciertos lenguajes para poder interactuar con los usuarios, ya que como bien sabemos ella conoce a la perfección el lenguaje binario de 1's y 0's que para nosotros es muy tedioso utilizarlo, por eso se crearon lenguajes de alto nivel y de bajo nivel.

Dentro de los lenguajes de alto nivel podemos decir que se encuentran java, visual c++ ( que he usado desde segundo ciclo)la particularidad de estos lenguajes de programación es que los códigos en binario fueron agrupados para poder utilizar palabras mas entendibles como un "if" o un "cout" que no son mas que una agrupación de tediosos y largos códigos en binario.

Ahora los lenguajes de bajo nivel, son los que mas comprende la pc, ya que la agrupacion de código binario es menor, en esta clasificación se encuentra el lenguaje ensamblador, el lenguaje binario.

En el lenguaje ensamblador se trabaja con los registros del procesador como son: AX,BX,CX y DX registros de propósito general ( son de 16 bits).

El registro AX que a su vez se divide en bits de alto nivel AH( de 8 bits) y de bajo nivel AL(de 8 bits);AX sirve fundamentalmente como acumulador y como registro para transferir informacion en las operaciones de E/S. BX, que de la misma manera que AX se divide en BH y BL;BX se usa como acumulador y como un registro base para calcular direcciones de memoria. CX, que maneja CH y CL, se usa como acumulador y se utiliza como contador para iteraciones y finalmente el registro DX (DH-DL) se usa como puntero de datos en ciertas instrucciones de E/S.

Registros de puntero de segmento (CS,SS,DS,ES)

Estos punteros definen los segmentos de 64k.El registro CS segmento de código(code segment) se usa para calcular direcciones de las instrucciones del programa; el registro SS segmento pila (stack segment) se emplea junto con el SP puntero de pila(Stack pointer), para calcular la dirección de las instrucciones que manejan la pila en su desarrollo como las instrucciones PUSH, POP CALL y RETURN; DS segmento de datos(data segment) se usa en instrucciones que manejan datos de memoria y el registro ES segmento extra(extra segment) se utiliza en las instrucciones donde se maneja cadena de caracteres.

Registros de desplazamiento dentro de los segmentos (SP,BP,SI,DI)

El SP es el puntero de pila
El SI índice de segmento (index segment)
El DI índice de destino contienen desplazamientos de los punteros de segmento DS y ES en el manejo de cadena de caracteres.
El BP es el puntero base.

Tambien existe un registro llamado contador de programa, el cual ya veremos la gran utilidad
del mismo.

Registros de estado

Un registro de estado, S, de 16 bits con la siguiente asignación: Bit bo(C) es el acarreo, Bit b2(P) es el de paridad, Bit b4(A) es el de acarreo auxiliar, Bit b6(Z) el de cero, Bit b7(S) el de signo, Bit b8 (T) el de Trap, Bit b9(I) que sirve para controlar el bloqueo de las intrusiones, Bit b10(D) que determinan si se han de autoincrementar o autodecrementar los punteros SI y DI en las intrusiones que manejan cadenas de caracteres, Bit b11(O) que especifica el desbordamiento (Overflow).

Ejemplo de programación en Assembler

Los comentarios van despues del ";"

.MODEL SMALL
.CODE
;leer un caracter e imprimir su codigo hexa en decimal.
INICIO: MOV AH,01 ;mov para asignar valor a un reg o pos de memoria aca se carga un serv.
INT 21H ;realizar el servicio cargado en ah
MOV BL,AL ;guardo lo que teclee del al al bl
MOV AH,02H
MOV DL,0AH ;salto de linea o retorno de carro no recuerdo jeje
INT 21H
MOV DL,0DH
INT 21H
MOV AL,BL
MOV CL,04
SHR AL,CL
ADD AL,30H ; suma de al +30 en hexa
MOV DL,AL
INT 21H
AND BL,0FH
CMP BL,09 ;instucción que hace comparaciones
JA sig ; sentencia afirmativa luego de la comparación
ADD BL,30H
MOV DL,BL
INT 21H
JMP FIN ;salto a posicion donde se encuentra la etiqueta FIN, sin condiciones
sig: ADD BL,37H
MOV DL,BL
INT 21H
FIN: INT 21H
END ; fin del programa

Espero hayan podido entender un poco lo que es assembler, dejo la promesa de hacer un post de intrucciones en assembler para explicar cada una de ellas.



5 comentarios:

Renato G. dijo...

jajajaj aki la malograste :P
desempolvar neuronas q sabian assembler :-|

Anónimo dijo...

imaginate vivir el mundo de la computación de hace 20 o 25 años, en que estariamos programando, que dolor de cerebros no?... en fin si fueran 20 0 25 años no hubiera esos blogs.... TAN UTILES xD

Renato G. dijo...

ah bueno... si hablamos de utilidad, tengo otro blog, mas productivo q el de http://natogs.blogspot.com
Seria el de informatica: http://infnato.blogspot.com ;)
pero es verdad! hace 20 o 25 anhos, fuera de q yo no estaba ni en proyecto... habria sido una pesadilla... y pensar q ahora tenemos un dolor de cabeza por un puntero a null... imaginate un error en assembler :P jjajajaa

Anónimo dijo...

muy bueno, les recomiendo una web dodne estanrealizando videocursos de programacionen ensamblador muy buenos, son completamente gratuitos, no olviden ar clic en la web para apoyar a esos manes por su colaboracion

Anónimo dijo...

la web es: www.zonebit.net