Primer programa para entender como utilizar los registros:
ORG 100h mov ax, 10 ;AX=10 mov bx, 00F9h ;BX=0xF9 inc bx ;BX++ add ax, 4 ;AX=AX+4 mov cx,45 ;CX=45 sub cx,cx ;CX=CX-CX ret
Utilizar Loop:
ORG 100h MOV CX, 5 MOV BX, 1 MOV DL, 2 comienzo: MOV AX, BX MUL DX MOV BX, AX LOOP comienzo RET
Potencia:
name "potencia" ;8 chars DOS org 100h ;counter to 100h mov cx, num2 mov ax, num1 inicio: mov bx,num1 mul bx ;ax = ax * bx loop inicio ;c-- mov num3,ax ;copiamos el resultado ret ;Variables "db" para byte y "dw" para word num1 dw 0Ah num2 dw 03h num3 dw 0h
Raiz cuadrada:
org 100h siguiente: inc r mov ax, r mul ax cmp ax, m jbe siguiente ;(r*r) MENOR O IGUAL a m dec r ret ;Variables m dw 146 r dw 0 ;Al final debe ser r=sqrt(m).
Arreglos:
name "arreglo" org 100h ;un areglo se puede acceder a travez de [] mov cx, 9 ;cuantos elementos voy a recorrer, empezamos con el 9 inicio: mov si, cx mov dl, v[si] cmp dl, mayor jng siguiente: mov mayor,dl siguiente: loop inicio ret v db 1,32,64,32,98,12,5,21,91,38 mayor db 0
Saber si un numero es mayor:
name "mayor" mov AX, 5 mov BX, 5 ;mov DX, AX ;CX el valor más grande entre AX Y BX ;AX-BX mayor a 0 sub AX,BX js A_MENOR_B mov CX,AX jmp FIN A_MENOR_B: mov CX,BX FIN: ;mov AX,DX ret
Multiplicacion:
ORG 100h MOV AL, 200 ; AL = 0C8h MOV BL, 4 MUL BL ; AX = 0320h (800) RET
Interrupciones (Ejemplo de 21h):
name "int01" org 100h mov ah, 1 ;Leer un caracter de la entrada estandar int 21h ;Llamada al sistema operativo (DOS) mov tecla, al mov ah, 2 ;imprime un simbolo a la consola mov dl, simbolo ;el caracter a mostrar, en este caso la E int 21h ;Llamada al DOS inc tecla mov ah, 7 ;NO imprime un simbolo a la consola mov dl, tecla ; int 21h ;Llamada al DOS ret ;Variables tecla db 0 simbolo db 45H ;ah que queres hacer ;ah = 1 guarda caracter en al ;ah = 2 escribe un caracter en la consola. El ascii del cacacter a imprimir se pone el dl ;AH = 7 es igual a el ah=2 pero el resultado no se ve en pantalla ;ah = 9 imprime una cadena en la consola. Considera el caracter $ como fin de cadena. ;La direccion de la cadena se expresa en DX
Cadenas:
org 100h mov msg[2], 34H mov dx, offset msg mov ah, 9 int 21h ret msg db "hello world $"
Cambiar a mayúsculas:
name "int02" ORG 100H lectura: mov ah,7 int 21h mov tecla, al cmp al,13 jz fin: cmp tecla, 122 ;si tecla es mayor a 122 entonces ir a fin3 (tecla > 122) ja fin3 cmp tecla,96 ;si tecla no es mayor a 96 ir a fin3 (tecla <= 96) jng fin3 sub tecla, 32 ;si es 'a' hasta 'z' entonces restarle 32 fin3: mov ah,2 mov dl,tecla int 21h jmp lectura fin: ret tecla db 0
Procedimientos:
org 100h mov bx, 5h mov ax, 10h call inicializar inc ax ret inicializar PROC MOV ax, 1234h ret inicializar ENDP
Archivos:
org 100h mov al, 0 ;modo de acceso para abrir arhivo, modo lectura/escritura mov dx, offset archivo ;offset lugar de memoria donde esta la variable mov ah, 3dh ;se intenta abrir el archivo int 21h ;llamada a la interrupcion DOS jc error ; si se prendio la bandera c ir a error mov handle, ax ;si no paso mover a lo que le dio el SO jmp leer error: ; .... ;leer archivo leer: mov bx, handle mov cx, 5 mov dx, offset leido mov ah, 3fh int 21h ;cerramos archivo mov bx, handle mov ah, 3eh int 21h ;imprimir el contenido de leido mov dx, offset leido mov ah, 9 int 21h ret archivo db "C:\prueba.txt", 0 ;ascii del nombre del archivo leido db "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" handle dw ? ;identificador del arhivo
Interrupción 13h (Gráficos)
mov cx,1 mov al, 13h mov ah, 0 int 10h ; set graphics video mode. bucle1: mov dx, cx mov al, color ;AL = pixel color mov ah, 0ch ;Change color for a single pixel int 10h ;set pixel cmp cx, 101 ;llegar hasta 100 x 100 (va en diagonal) jz fin inc cx ;DX = row. add color, 2 ;para cambiar colores jmp bucle1 ;CX = column fin: ret color db 1

hola me da gusto saludarte y gracias por los ejemplos que pones, me ayudan a entender un poco este lenguaje ensamblador.
Hola, es un placer crear los tutoriales y recibir opiniones de este tipo, seguiré con más ánimos creándolos. Saludos!
hola Rodrigo me dejaron estos ejercicios pero todavia no los hago,
Escriba los siguientes programas en ensamblador de 16 bits con comentarios y estructura estándar. Para ello puede utilizar todos los programas que se han realizado con anterioridad. Puede reutilizar código de las clases y libros, pero no copiarlos en su totalidad.
1) Escriba un programa que reciba un hexadecimal de 2 cifras por teclado y regrese el valor en decimal por la pantalla.
2) Escriba un programa que reciba por teclado una palabra de 5 letras y la muestre al revés en la pantalla. (Por ejemplo si introduce Hotel, mostrará: letoH).
3) Escriba un programa que reciba por teclado un número entero positivo de tres cifras y lo muestre en binario (separado en nibbles) en la pantalla.
no se si me puedas ayudar
Hola, te comento que los ejercicios no te los voy a resolver pero si te puedo guiar en el proceso.
En el 1) es una conversión nada más, convertir de base 16 a base 10, no es nada complejo.
En el 2) guarda tu palabra en un vector, luego lo mostras al reves
En el 3) sería convertir de base 10 a base 2, tampoco lo veo muy complejo, con esos ejemplos que dejé los va a poder resolver sin problemas.
Acá solo hacemos los tutos y demás pero no resolvemos ejercicios, si hago eso te estaré perjudicando.
Saludos,
Hola buena tarde, estoy un aprendiendo un poco de esto. Son muy útiles tus ejemplos 🙂
pero tengo una pregunta. ¿Como compilo los programas o los corro?
Hola Nedy, yo uso el emu 8086 para realizar lo que estás buscando. Saludos,
Gracias por los ejemplos
Denada Oscar, me alegro que les sirva los ejemplos!
Gracias por comentar.
Saludos,
Gracias por los ejemplos. Tengo una duda, ¿como harías una caja registradora que te imprima el total de la Compra? Ayuda porfa 🙂
Denada! No te voy a resolver el ejercicio porque eso lo tenés que hacer vos para aprender 😉 en este post vas a encontrar muchos ejemplos para que puedas usarlos como base ya que básicamente tendrías que utilizar arreglos o archivos para luego recorrerlo y sumar todos los montos para tener el total de la compra. Espero que te sirva mi comentario. Saludo!
Hola, que ensamblador usas?, nasm, fasm, etc ?
Hola, utilizo: http://www.emu8086.com/ que es un emulador!!
el emu8086 utiliza el ensamblador fasm
Sí, gracias Valentin!!
el ejercio de la raiz cuadrada esta mal
Hola Alexiss, me ayudas a corregirlo?
Me podrias dar pistas para lograr hacer un dado con todo y display? Por favor.Saludos
Hola que tal? la verdad es que hace tiempo que no utilizo Ensamblador por lo que se me hace difícil poder ayudarte con eso. Pero si creo que otros te podrán ayudar 🙂 Saludos!
No lo tengo a mano o sino te lo pasaba sin dramas.