Codigo fuente:
;En este ejemplo se muestra una rutina que imprime un string, esta rutina imprime un
;string el cual tiene un byte O como terminador.
.MODEL SMALL
.DATA
.STACK 100H
STR1 DB 'Esta es una prueba',0
.CODE
INICIO PROC NEAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
; DS y ES apuntan al segmento donde estan los strings
MOV DX,OFFSET STR1
CALL PUTS
MOV AH,4CH
INT 21H
INICIO ENDP
PUTS PROC NEAR
; Entrada:
; DS:DX = Segmento:Offset dei string terminado con O
; Llama:
; PUTCHAR
PUSH AX
PUSH DX
PUSH SI
PUSHF
CLD ; Asegurar que SI y DI incrementaran
MOV SI,DX ; SI Apunta ai inicio dei string
OTRO_CAR:
LODSB ; Carga en AL ei byte que esta en DS:SI
MOV DL,AL
CALL PUTCHAR
OR AL,AL
JNE OTRO_CAR
;
POPF
POP SI
POP DX
POP AX
RET
PUTS ENDP
PUTCHAR PROC NEAR
; Entrada:
; DL = Caracter a imprimir
PUSH AX
MOV AH,2 ; Servicio para imprimir un caracter
INT 21h ; Llamar a MS—DOS
POP AX
RET
PUTCHAR ENDP
END INICIO
Ensamble del programa y corrida:
Programa 2 con procedimientoCodigo fuente del programa:
.MODEL small
.STACK 256
.DATA
MSG1 DB 'Escriba una letra minuscula: $'
MSG2 DB 0Dh,0Ah,'En mayuscula es: '
CHAR DB ?,'$'
exCode DB 0
.CODE
MAIN PROC
;initialize ds
mov ax,@data ; Initialize DS to address
mov ds,ax ; of data segment
;print user prompt
mov ah,9 ; display string fcn
lea dx,MSG1 ; get first message
int 21h ; display it
;input a character and convert to upper case
mov ah,1 ; read char fcn
int 21h ; input char into AL
sub al,20h ; convert to upper case
mov CHAR,al ; and store it
;display on the next line
mov dx,offset MSG2 ; get second message
mov ah,9 ; display string function
int 21h ; display message and upper case
;return to DOS
Exit:
Ensamble y corrida del programa:
Programas usando macros
Codigo del primer programa:
Este programa utiliza macros de forma externa llamando al archivo que contiene las instrucciones de macros para eso necesitamos 2 archivos un archivo .txt y el archivo usual .asm ambos archivos deben estar dentro de la carpeta de masm.
Codigo del archivo txt:
inicializa macro
mov ax,@data
mov ds,ax
MOV cx, 6
Mov di,offset max
MOV SI,offset a
endm
Codigo del archivo .asm:
INCLUDE macro.txt
.MODEL SMALL
.STACK
.DATA
a DB 12,5,34,75,10,25
max DB 0
numero DB '12$'
diez DB 10
msgl DB 'Numero maximo = $'
msg2 DB 1O,13,'Caracter ASCII = $'
.CODE
Inicio:
inicializa
Comparar:
MOV AL,[SI]
MOV BL,[DI]
CMP BL,AL
JNB Incrementa
MOV [DI],AL
Incrementa:
INC SI
LOOP Comparar
;convertir el numero a cadena intoString
MOV AL,max
MOV AH,0
DIV diez
ADD AH,'0'
MOV numero[1],AH
ADD AL,'0'
MOV numero[0] ,AL
; desplegar mensaje
MOV DX,OFFSET msgl
MOV AH,09H
INT 21H
MOV DX,OFFSET numero
MOV AH,09H
INT 21H
MOV DX,OFFSET msg2
MOV AH,09H
INT 21H
MOV DL,[DI]
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
END Inicio
END
Ejemplo 2 de macros:
Proceso de enlazado y ensamble(ejecucion):
La principal diferencia
entre una macro y un procedimiento es que en la macro se hace posible el paso
de parámetros y en el procedimiento no (esto es aplicable solo para el MASM,
hay otros lenguajes de Programación que si lo permiten). Al momento de
ejecutarse la macro cada parámetro es sustituido por el nombre o valor
especificado al momento de llamarla.
La principal diferencia
entre una macro y un procedimiento es que en la macro se hace posible el paso
de parámetros y en el procedimiento no (esto es aplicable solo para el MASM,
hay otros lenguajes de Programación que si lo permiten). Al momento de
ejecutarse la macro cada parámetro es sustituido por el nombre o valor
especificado al momento de llamarla.
Otra diferencia entre
una macro y un procedimiento es la forma de llamar a cada uno, para llamar a un
procedimiento se requiere el uso de una directiva, en cambio la llamada a las
macros se realiza como si se tratara de una instrucción del ensamblador.















No hay comentarios:
Publicar un comentario