Trabajar con lenguaje ensamblador puede ser un verdadero reto para quién se va iniciando en la programación, sin embargo, puede ser un gran aliciente el aprender sus conceptos básicos para quienes deseen dominar cualquier programación.
De hecho, saber manejar lenguaje Ensamblador tiene varios beneficios, como pueden ser:
1- Un programa en ensamblador requiere considerablemente menos memoria y tiempo de ejecución que uno escrito en lenguajes como C#, C++, java, etc.
2- El manejo de este lenguaje de programación nos permite tener una mejor comprensión de la arquitectura de cualquier computadora.
Si bien los lenguajes de programación modernos han sido diseñados para eliminar la complejidad que puede tener ensamblador y acelerar los tiempos de desarrollo, siempre es importante conocer los movimientos con el procesador (o del software con el Hardware) para entender cuando existe algún desbordamiento en memoria o algo similar.
Así, para que practiques un poco respecto al lenguaje ensamblador, te dejo estos ejemplos de programación que recopilé de mi época de estudiante.
;Programa HOLA MUNDO
DATOS SEGMENT
MENSAJE DB «HOLA MUNDO$»
DATOS ENDS
PILA SEGMENT STACK «STACK»
DB 200 DUP(0)
PILA ENDS
CODIGO SEGMENT
ASSUME CS:CODIGO,DS:DATOS,SS:PILA
PRINCIPAL PROC
MOV AX,DATOS
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MENSAJE
INT 21H
MOV AH,4CH
INT 21H
PRINCIPAL ENDP
CODIGO ENDS
END PRINCIPAL
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
;Programa SUMA DE 3 NUMEROS
pila segment para stack «stack»
dw 32 dup (0)
pila ends
datos segment para «datos»
num1 dw 20
num2 dw 30
num3 dw ?
datos ends
codigo segment para «codigo»
empieza proc far
assume cs: codigo, ds: datos, ss:pila
mov ax,datos
mov ds,ax
mov ax,num1
add ax,num2
mov num3,ax
mov dx,num3
mov ax, 4C00H
int 21H
empieza endp
codigo ends
end empieza
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
;PROGRAMA OBTIENE EL COMPLEMENTO A 2 DE UN NUMERO
pila segment para stack «stack»
db 200 dup (o)
pila ends
datos segment para «data»
var db 40H
datos ends
codigo segment para «code»
empieza proc far
assume cs: codigo, ds: datos, ss: pila
mov ax,datos
mov ds,ax
mov al,var
mov dl,al
mov ah,2
int 21
not al
inc al
mov dl,al
mov ah,2
int 21
empieza endp
codigo ends
end empieza
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
;PROGRAMA CICLO LOOP, SUMAR 15D A 8 NUMEROS
PILA SEGMENT PARA STACK «STACK»
DB 200 DUP (0)
PIALA ENDS
DATOS SEGMENT PARA «DATA»
TABLA DB 20,26,15,28,19,27,16,29
DATOS ENDS
CODIGO SEGMENT PARA «CODE»
ASSUME CS:CODIGO,DS:DATOS.SS:PILA
EMPIEZA PROC FAR
MOV AX,DATOS
MOV DS,AX
MOV BX,OFFSET TABLA
MOV CX,8
ETA: ADD AL,15
INC BX
LOOP ETA
MOV AX,4C00H
INT 21H
EMPIEZA ENDP
CODIGO ENDS
END EMPIEZA
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
;CAMBIAR DE MAYUSCULAS A MINUSCULAS UNA CADENA DE CARACTERES
PILA SEGMENT PARA STACK «STACK»
DB 64 DUP(0)
PILA ENDS
DATOS SEGMENT PARA «DATA»
V1 DB «JKLMNOPQR»
DATOS ENDS
CODIGO SEGMENT PARA «CODE»
EMPIEZA PROC FAR
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
MOV AX,DATOS
MOV DS,AX
MOV BX, OFFSET V1
MOV CX, 9
ETA:
MOV AH, [BX]
MOV AH, 40H
MOV DL, AH
MOV AH, 2
INC BX
DEC CX
JNZ ETA
MOV AX,4C00H
INT 21H
EMPIEZA ENDP
CODIGO ENDS
END EMPIEZA
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
;DIRECTIVAS SIMPLIFICADAS CAMBIAR A MAYUSCULAS Y MINUSCULAS
.MODEL SMALL
.STACK 64
.DATA
MSS1 DB «parabra en minusculas»,13,10
DB «en mayusculas es:$»
NOMBRE DB «palabra$»
.CODE
EMPIEZA PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET MSS1
MOV AH, 9
INT 21H
MOV BX, OFFSET NOMBRE
MOV CX, 7
INICIO:
MOV AH, [BX]
AND AH, 11011111B
MOV DL, AH
MOV AH, 2
INT 21H
INC BX
LOOP INICIO
MOV AX,4C00H
INT 21H
EMPIEZA ENDP
END EMPIEZA
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
;PROGRAMA ENTRADA Y SALIDA DEL TECLADO CON MACROS, PROCEDIMIENTOS
FIN MACRO
MOV AH, 4CH
INT 21H
ENDM
;—————————————————
PILA SEGMENT PARA STACK «STACK»
DB 200 DUP (0)
PILA ENDS
;—————————————————
DATOS SEGMENT PARA «DATA»
VA DB «DESPUES DE MEDIO DIA (Y/N): «,»$»
VD DB 13,10,» BUENOS DIAS»,»$»
VT DB 13,10,» BUENAS TARDES»,»$»
DATOS ENDS
;—————————————————
CODIGO SEGMENT PARA «CODE»
EMPIEZA PROC FAR
ASSUME CS: CODIGO, DS: DATOS, SS: PILA
MOV AX, DATOS
MOV DS, AX
MOV AH, 0FH
INT 10H
MOV AH, 00H
INT 10H
MOV DX,OFFSET VA
MOV AH,9
INT 21H
CALL PREGUNTA
EMPIEZA ENDP
PREGUNTA PROC NEAR
MOV AH, 01H
INT 21H
CMP AL, «Y»
JZ TARDES
CMP AL, «N»
JZ DIAS
CMP AL, «y»
JZ TARDES
CMP AL, «n»
JZ DIAS
TARDES:
MOV DX, OFFSET VT
MOV AH, 09
INT 21H
FIN
DIAS:
MOV DX, OFFSET VD
MOV AH, 09
INT 21H
FIN
RET
PREGUNTA ENDP
CODIGO ENDS
END EMPIEZA
1 comentario en «Ejemplos básicos de lenguaje Ensamblador»