martes, 12 de noviembre de 2013

Actividad #11

Ejemplos de programas usando procedimiento

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 procedimiento

Codigo 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