FUNDAMENTOS

El lenguaje ensamblador, o assembler (assembly language en inglés), es un lenguaje de programaciónde bajo nivel para los computadoresmicroprocesadoresmicrocontroladores y otros circuitos integradosprogramables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicosque simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portátiles.

Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.

Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y se llaman macro ensambladores.

Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, alto rendimiento, o un uso de recursos controlado y reducido. También es utilizado en el desarrollo de controladores de dispositivo (en inglés, device drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las instrucciones de la máquina. Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados.

Mas informacion en: es.wikipedia.org/wiki/Lenguaje_ensamblador

TIPOS DE SENTENCIAS (ASSEMBLER)

Un programa fuente en Ensamblador contiene dos tipos de sentencias:

1)     Directivas: Solo son utilizadas en el ensamblaje; en otras palabras estas se utilizan para que el ensamblador haga algo por nosotros.

 

Ej: .model, .stack, .data, .code, .startup, .exit, .end.

 

2)     Instrucciones: Estas se aplican en tiempo de ejecución. Esto quiere decir que estas son las que va a ejecutar el sistema operativo.

Las instrucciones tienen la siguiente sintaxis:

[etiqueta] instrucción [operados] [comentario]

EJ: inicio: mov ax,@data ;sintaxis de una instrucción

 

En este curso se explica mejor lo anterior:

CURSO ASSEMBLER:

VIDEO 01: www.youtube.com/watch?v=QLveYKdR8Qo

VIDEO 02: www.youtube.com/watch?v=ZSsCSR-frRg

VIDEO 03: www.youtube.com/watch?v=1sbFytgMoBE

Descargar Turbo Assembler en el siguiente link:

www.dropbox.com/home/Arquitectura%20de%20hardware?preview=GUI+Turbo+Assembler+Setup.rar

EJEMPLO (HOLA MUNDO EN ASSEMBLER)

; Primer programa "Andres Felipe Gonzalez Florez"

; Directiva para iniciar el tamaño del programa
.model small ;Tamaño del programa
.stack 80h
; Directiva para iniciar datos
.data
     mensaje1 db 10, 13, "___Hola Mundo___" , 10, 13, "$"
     mensaje2 db 10, 13,"Este es mi primer programa en ensamblador" , 10, 13, "$"
     mensaje3 db 10, 13,"Segunda cadena que quiero mostrar" , 10, 13, "$"
 
; Directiva para iniciar código
.code
     ProHola:
 
          mov ax, @data
          mov ds, ax
 
          mov dx, offset mensaje1
          mov ah, 09
          int 21h
 
          mov dx, offset mensaje2
          mov ah, 09
          int 21h
 
          mov dx, offset mensaje3
          mov ah, 09
          int 21h
 
          .exit
     end ProHola

EJEMPLO (CONDICIONAL EN ASSEMBLER)

;Mi primer condicional "Andres Felipe Gonzalez Florez"

.model small

.stack 100h

.data

            pregunta db 10,13,"para entrar al SI pulse s",10,13,"$"

            resSI db 10,13,"esta en SI",10,13,"$"

            resSINO db 10,13,"esta en NO",10,13,"$"

            dato db ?

.code

            ProgCondicional:

                        MOV AX,@DATA

                        MOV DS,AX

                       

                        MOV DX,offset pregunta

                        mov ah,09

                        int 21h

                       

                        mov ah,01

                        int 21h

                       

                        mov dato,al

                        cmp dato,'s';compara, lo que hay en dato si fuera igual a s

                        JE EtiquetaSI

                       

                        EtiquetaSINO:

                                   MOV DX,offset resSINO

                                   JMP EtiSalCondi

                       

                        EtiquetaSI:

                                   MOV DX,offset resSI

                                   JMP EtiSalCondi

                       

                        EtiSalCondi:

                                   MOV ah,09

                                   int 21h

                       

                        .exit

           

            end ProgCondicional

 

EJEMPLO (ARREGLO EN ASSEMBLER)

; Mi primer arreglo "Andres Felipe Gonzalez Florez"

.model small

.stack 300h

.data

            arre DB "1234567890ABCDEF"

            arrDB DB 1, 2, 3, 4, 5

            ; arrDW DW 1, 2, 3, 4, 5

            ; arrDD DD 1, 2, 3, 4, 5

            arreVa DW 2 dup(?)

           

.code

            ProgDAtos:

                        MOV AX, @DATA

                        MOV DS, AX

                       

                        mov di, 0h

                        mov cx, 7

                       

                        Ciclo1:

                                   mov es:[di], cx

                                   inc di

                                   inc di

                        loop Ciclo1

                       

                        lea bx, arre

                        mov cx, 7

                        Ciclo2:

                        mov ax, es:[bx]

                        ;mov ds: [bx], ax

                        mov arreVa  [bx], ax

                        inc bx

                        inc bx

                        loop Ciclo2

                       

                       

                        .exit     

            end ProgDAtos