160 likes | 350 Views
Introducción al NASM. The Netwide Assembler. Convenciones de colores. Rojo = Directivas propias del nasm sin traducción directa a ensamblador Morado = Directivas del ensamblador En fondo naranja la sintaxis general En fondo azul los ejemplos concretos. Esqueleto básico. [section .text]
E N D
Introducción al NASM The Netwide Assembler MIA J. Rafael Rojano C.
Convenciones de colores • Rojo= Directivas propias del nasm sin traducción directa a ensamblador • Morado= Directivas del ensamblador • En fondo naranja la sintaxis general • En fondo azul los ejemplos concretos MIA J. Rafael Rojano C.
Esqueleto básico [section .text] ..start: ;colocar código mov ah,4ch int 21h [section .data] ;variables inicializadas MIA J. Rafael Rojano C.
Pseudo-op • ORG 100h • Define la dirección de “origen”. En el caso de programas com la dirección es 100h • SECTION .text • Define el inicio de un grupo de instrucciones para ser ensambladas en un código ejecutable. • SECTION .data • Define el inicio de un grupo de declaraciones que son inicializadas en el segmento de datos. • SECTION .bss • Define el inicio de un grupo de declaraciones no inicializadas. El uso de la directiva SECTION puede ser intercalada en cualquier orden, ya que cuando el código se compila todas las secciones son concatenadas. Primero .text, luego .data y .bss. (la sección.bss no genera código en realidad pero el proceso de reservación de bloques de memoria provoca que las etiquetas asociadas tomen los valores correctos). MIA J. Rafael Rojano C.
Declarando etiquetas(1) • El uso de etiquetas permite hacer referencia a una dirección de memoria por medio de un nombre simbólico en lugar de un valor. • La declaración se hace con la directiva DB • Las declaraciones se asocian con la dirección del segmento en donde se declaran. MIA J. Rafael Rojano C.
Declarando etiquetas(2) • El formato de declaración es Nombre_et DB lista • Donde nombre es el nombre como si fuera “una variable” • DB define el tamaño del dato a asignar (pueden usarse DW, DQ o DT) Ejemplo: Nombre DB “juanito”, 0dh, 0ah ; CR y LF MIA J. Rafael Rojano C.
Declarando etiquetas(3) • Los valores que son asignados a la variable pueden ser numéricos o cadenas • Para los numéricos el default es decimal, pero si se desea otra base se usan: • h para hexadecimal • q para octal • b para binario • Los datos alfanúmericos se colocan entre apostrofes ´ o comillas ” MIA J. Rafael Rojano C.
Reserva de espacio • Existe otra directiva llamada RESB por medio de la cual se reserva un bloque de memoria de n bytes, ejemplo: Var1 resb 8 ;reserva 8 bytes Var2 resb 4 ;reserva 4 bytes • También se pueden reservar bytes de tamaño word con la directiva RESW MIA J. Rafael Rojano C.
Declaración de constantes • Existe el uso de una directiva para definición particular de constantes, así como la redefinición de etiquetas. Tal directiva es EQU. Etiqueta EQU valor • Asociados a esta declaración existen dos constantes especiales que son $ y $$ MIA J. Rafael Rojano C.
Constantes especiales(1) • El $ define la dirección de memoria al inicio de la declaración msj db “pepito” tamaño EQU $ - msj Aquí la variable tamaño tiene la diferencia de $ (valor de inicio de la dirección para la declaración tamaño) menos la dirección de donde se declaro msj. El valor de tamaño es 6 MIA J. Rafael Rojano C.
Constantes especiales(2) • El uso de la constante $$ evalúa la dirección al inicio del segmento de la declaración. Por ejemplo: var1 db “variable 1$” var2 db “variable 2$” valor db 10 espacio EQU $ - $$ • Obtiene en la variable espacio la cantidad de espacio utilizado en el segmento hasta la declaración actual. Para este ejemplo el valor es 23d o 17h. MIA J. Rafael Rojano C.
Compilación • Para compilar en un ambiente de windows se opta por tener dos formatos de salida: • Los obj que representan aplicaciones típicas .exe de 16 o 32 bits • Los bin que representan programas típicos como los .com • Para compilar desde la línea de comandos se hace tecleando: nasm –f obj archivo.asm MIA J. Rafael Rojano C.
Ligado • Un proceso necesario para la generación de archivos ejecutables es el ligado a través del cual se agregan todos los elementos necesarios para el ambiente de ejecución del programa. • La compilación en línea de comandos se hace tecleando: alink archivo.obj • Como resultado obtenemos un archivo con extensión .exe MIA J. Rafael Rojano C.
Ejemplos de programas(1) ;[File]: uniseg.asm ;[Author]: J. Rafael Rojano C. ;NASM-IDE ASM Assistant Assembler Project File [BITS 16] ;Set code generation to 16 bit mode [ORG 0x0100] ;Set code start address to 0000h [SEGMENT .text] ;Main code segment mov dx, msj mov ah,09 int 21h mov ah,4ch int 21h [SEGMENT .data] ;Initialised data segment msj db 'simple mensaje$' [SEGMENT .bss] ;Uninitialised data segment MIA J. Rafael Rojano C.
Ejemplos de programas(2) ;[File]: firstexe.asm ;[Author]: J. Rafael Rojano C. segment code ..start: mov ax,data mov ds,ax mov dx,msj mov ah,9 int 21h mov ah,4ch int 21h segment data msj db 'hola muchachitos...$' MIA J. Rafael Rojano C.
Ejemplos de programas(3) mov dx,longi mov ah,0ah int 21h mov dx,msj2 mov ah,9 int 21h mov ah,01 int 21h mov [B],al mov dx,msj3 mov ah,9 int 21h mov ah,01 int 21h mov [R],al ; coloca indice en cadena mov si,cadena mov di,cadena xor cx,cx mov cl,[numcar] ciclo: lodsb cmp al,[B] jne .siguiente mov al,[R] .siguiente: stosb loop ciclo mov al,'$' stosb mov dx,cadena mov ah,9 int 21h mov ah,01 int 21h mov ah,4ch int 21h ;[File]: firstexe.asm ;[Author]: J. Rafael Rojano C. segment datos data longi db 10 numcar db 0 cadena resb 10 msj1 db 'Teclea una cadena: $' msj2 db 'escribe caracter de busqueda: $' msj3 db 'escribe caracter de rempleazo: $' B db 0 R db 0 segment pila stack resb 0x64 segment codigo code ..start: ;Inicializa DS y ES mov ax,datos mov ds,ax mov es,ax ;inicia programa mov dx,msj1 mov ah,9 int 21h MIA J. Rafael Rojano C.