Factorial
Publicado por Pedro Ignacio (1 intervención) el 28/02/2007 14:06:02
Lee un byte de la posicion 00FEh. A dicho valor le calcula el factorial y lo almacena en la direccion 0AAAh.Imprime en pantalla fila 10 y columna 20 "OPERACION FACTORIAL CONCLUIDA ", imprime en pantalla fila 23 y columna 17 'Presione cualquier tecla para SALIR '
Necesitaria saber si si este ejercicio que hice se puede optimizar de alguna forma para que funcione mejor o utilice menos lineas o ya eta lo mejor posible?. Gracias
PILA SEGMENT PARA STACK 'STACK'
DB 64 DUP ('STACK ')
PILA ENDS
DATOS SEGMENT PARA PUBLIC 'DATA'
MENSAJ1 DB 'OPERACION FACTORIAL CONCLUIDA ', '$'
MENSAJ2 DB 'Presione cualquier tecla para SALIR ', '$'
DATOS ENDS
;--------------------------------------------------------
CSEG SEGMENT PARA PUBLIC 'CODE'
PRINCIPAL PROC FAR
;
ASSUME CS:CSEG,SS:PILA,DS:DATOS
MOV AX,SEG DATOS
MOV DS,AX
MOV Ax,0005h ; ;cargar un valor entre 1 y 8 decimal.
MOV CS:[00FAh],Ax ;se supone que ya estaria cargado.
; =================================
MOV Ax,CS:[00FAh] ;Leer valor de memoria
MOV Bx,Ax
VOLVER: DEC Bx
CMP Bx,00h ; Rutina central que calcula el factorial
JE SALTO
MUL Bx
JMP VOLVER
; ===================================
SALTO: MOV DS:[0AAAh],AX ; Almacena valordel factorial en Memoria.
MOV AH,06H
MOV AL,00H
MOV CX,0000H ; Rutina para limpiar la pantalla
MOV DX,184FH
MOV BH,7
INT 10H
; ====================================
MOV AH,02h
MOV BH,00
MOV DH,10 ; Rutina de posicionamiento del cursor (f=10,c=20)
MOV DL,20
INT 10h
; ====================================
MOV AH,09H
LEA DX,MENSAJ1 ;Rutina que imprime MENSAJ1
INT 21H
; ====================================
MOV AH,02h
MOV BH,00
MOV DH,23 ; Rutina de posicionamiento del cursor (f=23,c=17)
MOV DL,17
INT 10h
; ====================================
MOV AH,09H
LEA DX,MENSAJ2 ;Rutina que imprime MENSAJ2
INT 21H
; ----------------
MOV AH,01H ; Espera que se presione cualquier tecla
INT 21H
; ----------------
MOV AX,4c00h ; Salida al DOS.
INT 21h
; ------------------
PRINCIPAL ENDP
CSEG ENDS
END principal
Necesitaria saber si si este ejercicio que hice se puede optimizar de alguna forma para que funcione mejor o utilice menos lineas o ya eta lo mejor posible?. Gracias
PILA SEGMENT PARA STACK 'STACK'
DB 64 DUP ('STACK ')
PILA ENDS
DATOS SEGMENT PARA PUBLIC 'DATA'
MENSAJ1 DB 'OPERACION FACTORIAL CONCLUIDA ', '$'
MENSAJ2 DB 'Presione cualquier tecla para SALIR ', '$'
DATOS ENDS
;--------------------------------------------------------
CSEG SEGMENT PARA PUBLIC 'CODE'
PRINCIPAL PROC FAR
;
ASSUME CS:CSEG,SS:PILA,DS:DATOS
MOV AX,SEG DATOS
MOV DS,AX
MOV Ax,0005h ; ;cargar un valor entre 1 y 8 decimal.
MOV CS:[00FAh],Ax ;se supone que ya estaria cargado.
; =================================
MOV Ax,CS:[00FAh] ;Leer valor de memoria
MOV Bx,Ax
VOLVER: DEC Bx
CMP Bx,00h ; Rutina central que calcula el factorial
JE SALTO
MUL Bx
JMP VOLVER
; ===================================
SALTO: MOV DS:[0AAAh],AX ; Almacena valordel factorial en Memoria.
MOV AH,06H
MOV AL,00H
MOV CX,0000H ; Rutina para limpiar la pantalla
MOV DX,184FH
MOV BH,7
INT 10H
; ====================================
MOV AH,02h
MOV BH,00
MOV DH,10 ; Rutina de posicionamiento del cursor (f=10,c=20)
MOV DL,20
INT 10h
; ====================================
MOV AH,09H
LEA DX,MENSAJ1 ;Rutina que imprime MENSAJ1
INT 21H
; ====================================
MOV AH,02h
MOV BH,00
MOV DH,23 ; Rutina de posicionamiento del cursor (f=23,c=17)
MOV DL,17
INT 10h
; ====================================
MOV AH,09H
LEA DX,MENSAJ2 ;Rutina que imprime MENSAJ2
INT 21H
; ----------------
MOV AH,01H ; Espera que se presione cualquier tecla
INT 21H
; ----------------
MOV AX,4c00h ; Salida al DOS.
INT 21h
; ------------------
PRINCIPAL ENDP
CSEG ENDS
END principal
Valora esta pregunta


0