Qué es el Ensamblador El ensamblador (en inglés, Assembler o Assembly, que se suele abreviar como Asm) es un lenguaje de programación de ordenadores de bajo nivel (muy cercano al código máquina), por lo que es específico de cada tipo de ordenador (básicamente, de cada procesador). Es más difícil de aprender que los lenguajes de alto nivel, resulta mucho menos legible, y prácticamente no es portable, pero si se domina, es el que dará la mayor velocidad a nuestro programa. Características del código ensamblador: El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel. Los programas hechos, por un programador experto, en lenguaje ensamblador, son generalmente mucho más rápidos y consumen menos recursos del sistema (memoria RAM y ROM.)- (utilizados en programación de juegos) Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador ya que, se dispone de instrucciones del CPU que generalmente no están en los lenguajes de alto nivel. Descargar Tutorial rápido del código introducción al ensamblador: http://www.ganimides.ucm.cl/rcofre/manual2-8086.pdf Software necesario: Para poder crear un programa se requieren varias herramientas: Primero un editor para crear el programa fuente. Segundo un compilador (Turbo Assembler) que no es más que un programa que "traduce" el programa fuente a un programa objeto. Y tercero un enlazador (Turbo Linker), que genere el programa ejecutable a partir del programa objeto. El editor puede ser cualquier editor de textos que se tenga a la mano, como compilador utilizaremos el programa Turbo Assembler (TASM), y como enlazador utilizaremos el Turbo Link (TLINK). La extensión usada para que el TASM reconozca los programas fuente en ensamblador es .ASM, una vez traducido el programa fuente, el TASM crea un archivo con la extensión .OBJ, este archivo contiene un "formato intermedio" del programa, llamado así porque aún no es ejecutable pero tampoco es ya un programa en lenguaje fuente. El enlazador genera, a partir de un archivo .OBJ o la combinación de varios de estos archivos, un programa ejecutable, cuya extensión es .EXE. Instalación de Turbo Assembler (TASM): Paso 1: desempaquetar el instaladar y darle doble click en el archivo "INSTALL" Paso 2: en el cuadro de diálogo presionamos "Enter" Paso 3: seleccionamos la unidad donde se instalará (Disco local) Paso 4: Aparece la carpeta donde se instalará (presionarmos Enter) Paso 5: presionar f9 para inicial la instalación. Más información sobre Turbo Assembler, su uso, compilaciónes e información de código ensamblador en: http://www.taringa.net/posts/ebooks-tutoriales/9027981/Aprende-Ensamblador-sin-salir-de-este-post_.html ::::::::::::::::::::::::::::::OPERACIONES BÁSICAS EN ENSAMBLADOR EN 5 PASOS::::::::::::::::::::: SUMA DE DÍGITOS POSITIVOS DE 1 CIFRA Procedimiento: 1.- En un block de notas se escribe el código siguiente: .model small .stack .data var1 db ? .code .startup mov ah,01h int 21h sub al,30h mov var1,al mov ah,01h int 21h sub al,30h add al,var1 mov dl,al add dl,30h mov ah,02h int 21h .exit End 2.- Guardamos desde el Block de notas el archivo con la extensión "suma.ASM" que es la que utiliza el compilador; en la carpeta "BIN" en C:TASMBIN (la tuta varía según el destino donde se instalo C: o D: etc.) 3.- Abrimos la consola de msDos: - INICIO > EJECUTAR > CMD (se nos abrira la consola) - (Vamos a la ruta TASM/BIN). (donde esta el archivo "suma.ASM" cd.. cd.. cd tasm cd bin 4.- Creando el .obj y linkarlo. - Ahora que estamos en el directorio donde tenemos nuestro codigo, (el suma.asm) pasaremos a crear el .obj y linkarlo. Para ello usaremos los comandos: tasm suma tlink suma Si todo sale bien y no se produce ningun error, nos mostrara los mensajes de la imagen más abajo: 5.- Ejecutamos el programa finalmente escribiemos el nombre del programa "suma" aunque en realidad es ya un ejecutable pudiendo escibir lo asi "suma.EXE" y damos enter para que se ejecute. Siendo el resultado algo asi (se han omitido operadores y espacios en la sintaxis): si se quiere sumar"4+1" se escribe: "41" y dara en seguida el resultdo de "5", es decir visualmente sera "415" MULTIPLICACIÓN DE DÍGITOS POSITIVOS DE 2 CIFRAS * EL procedimiento viene a ser el mismo, con la variación del código y el preferentemente el nombre del archivo.. (Como es evidente) Código: .model small .stack .data .code chr1 db ? chr2 db ? chr3 db ? r1 db ? r2 db ? ac db 0 .startup ;cls mov ah,00h ;Function(Set video mode) mov al,03 ;Mode 80x25 8x8 16 int 10h ;Interruption Video mov ah,01h ;Function(character read) int 21h ;Interruption DOS functions sub al,30h ;ajustamos valores mov chr1,al ;.chr2 * chr3 = ac.r1.r2 mov ah,01h ;Function(character read) int 21h ;Interruption DOS functions sub al,30h ;Ajustamos valores mov chr2,al ;chr1. * chr3 = ac.r1.r2 mov ah,02h ;Function(character to send to standard output) mov dl,'*' ;Character to show int 21h mov ah,01h ;Function(Read character) int 21h ;Interruption DOS Functions sub al,30h ;Transform(0dec = 30hex) mov chr3,al ;chr1.chr2 * = ac.r1.r2 mov ah,02h ;Character to send to standar output mov dl,'=' ; int 21h ;Interruption DOS functions ;Realizamos operación mov al,chr3 ;al = chr3 mov bl,chr2 ;bl = chr2 mul bl ;AL = chr3*chr2 (BL*AL) mov Ah,0h ; AAM ;ASCII Adjusment mov ac,AH ;ac = AH (Acarreo) mov r2,AL ;r2 = AL (Unidad del resultado) mov al,chr3 ;AL = chr3 mov bl,chr1 ;BL = chr1 mul bl ;AL = chr1*chr3 (BL*AL) mov r1,al ;r1 = AL (Decena del resultado) mov bl,ac ;BL = Acarreo anterior add r1,bl ;r1 = r1+ac (r1 + Acarreo) mov ah,00h ; mov al,r1 ;AL = r1 (Asignación para el ajust) AAM ;ASCII Adjustment mov r1,al ;r1 = AL mov ac,ah ;ac = AH (Acarreo para la Centena del resultado) ;Mostramos resultado mov ah,02h mov dl,ac add dl,30h int 21h ;Mostramos ac (Centena) mov ah,02H mov dl,r1 add dl,30h int 21h ;Mostramos r1 (Decena) mov ah,02H mov dl,r2 add dl,30h int 21h ;Mostramos r2 (Unidad) .exit end SUMA DE DÍGITOS POSITIVOS DE 2 CIFRAS * EL procedimiento viene a ser el mismo, con la variación del código y el preferentemente el nombre del archivo.. (Como es evidente) Código: .model tiny .stack .data msg db 'Echame los numeros a sumar $' .code .startup mov ah,09h ;interrupcion para imprimir una cadena lea dx,msg ;ontenemos la direccion de memoria de ms int 21h ;ejecutamos la interrupcion mov ah,01h ;interr. lee el caracter 1 del numero 1 int 21h ;ejecutamos la interrupcion sub al,30h ;hacemos el aguste de caracter a numero mov bl,al ;guardamos el numero en bl int 21h ;lee el caracter 2 del numero 1 sub al,30h ;ajustamos el numero mov cl,al ;copeamos a cl int 21h ;lee el caracter 1 del numero 2 sub al,30h ;ajustamos el numero add bl,al ;lo sumamos a las decenas int 21h ;lee el caracter 2 del numero 2 sub al,30h ;ajustamos el numero add cl,al ;sumamos a las unidades mov ax,cx ;pasamos el R para convertirlo BCD aaa ;convierte BCD mov cx,ax ;respaldamos el resultado separado add bl,ch ;sumamos el acarreo a las decenas mov ax,bx ;pasamos ax para convertir a BCD aaa ;convertimos BCD separado mov bx,ax ;respaldamos el resultado mov dl,bh ;muevo las centenas a dl add dl,30h ;ajusto las centenas mov ah,02h ;interr. mostrar un caracter int 21h ;muestra las sentenas en pantalla mov dl,bl ;muevo las decenas a dl add dl,30h ;ajusto las decenas int 21h ;muestro las decenas mov dl,cl ;muevo las unidades a dl add dl,30h ;ajusto las unidades int 21h ;muestro las unidades .exit end DIVICIÓN DE NÚMEROS POSITIVOS DE 1 CIFRAS * EL procedimiento viene a ser el mismo, con la variación del código y el preferentemente el nombre del archivo.. (Como es evidente) * Si la respuesta no es exacta se generan 2 números coo resultado Código: .model small .stack .data num1 db 0 num2 db 0 r db 0 m1 db 13,10,10,10,"Dame el 1er numero: $" m2 db 13,10,"Dame el 2do numero: $" m3 db 13,10,10,10,"el resultado es: $" .code programa: mov ax,@data mov ds,ax mov dx, offset m1 mov ah, 09h int 21h mov ah,01h int 21h SUB AL,30H mov num1,AL mov dx, offset m2 mov ah, 09h int 21h mov ah,01h int 21h SUB AL,30H mov num2,AL ;PARTE DE LA OPERACION MOV AX,0000H MOV CX,0000H MOV al, num1 ;dividendo el acumulador MOV cl, num2 DIV cl PUSH AX mov dx, offset m3 mov ah,09h int 21h POP AX CMP AH,00h JE salida PUSH AX ;Transfiero el registro AX a la pila ADD AH,30H MOV DL,AH MOV AH,02H INT 21H MOV DL,' ' INT 21H POP AX salida: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H mov ax, 4c00h int 21h end programa ///////////////////////////Fin////////////////
Operaciones aritméticas en ensamblador
Datos archivados del Taringa! original
18puntos
2,914visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
2visitas
0comentarios
Dar puntos: