Quobit

Cultura Digital, Tutoriales, tecnología y gadgets

Ejemplos básicos de lenguaje Ensamblador

Lenguaje Ensamblador

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