Programación General > ASM (Ensamblador)

 Formula General

(1/1)

jes:
hola!! amigos del foro

alguien tiene el codigo para resolver una ecuacion cuadratica por la formula general en ensamblador que me lo pase

gracias!!!!

Bicholey:
No se resuelven tareas, solo te podemos ofrecer ayuda con lo que no entiendas

jes:
ok gracias...

el problema es como saco la raiz cuadrada o que rutina puedo aplicar para sacar la raiz cudarada, ya tengo todos los valores de cada solo me hace falta la raiz cuadrada

Bicholey:
:P
Yo tengo esta rutina, espero te pueda ayudar hace tanto que la tengo que ya ni me acuerdo si la hice yo o me la encontre por ahi :


--- Código: Text --- ; Rutina para sacar raiz cuadrada.model small.stack 100h.data SIZE_BUFFER     EQU     32BACK_SPACE      EQU     8KEY_ENTER       EQU     13 Temporal        DB      17 DUP(?)Salto           DB      13, 10, '$'Valores         DW      10000, 1000, 100, 10Buffer          DB      SIZE_BUFFER DUP (?)Longitud        DW      0Tecla           DB      0 .code LeeString       PROC NEAR                LEA     SI, Buffer                XOR     CX, CXCicloLS:               &#59; Leer un caracter                MOV     AH, 07H                INT     21h                CMP     AL, BACK_SPACE                JE      Back                CMP     AL, KEY_ENTER                JE      FinLee                MOV     [SI], AL                INC     SI                INC     CX                MOV     DL, AL                MOV     AH, 2                INT     21h                CMP     CX, SIZE_BUFFER                JL      CicloLSFinLee:         MOV     BYTE PTR [SI], '$'                RETBack:           CMP     SI, OFFSET Buffer                JE      CicloLS                MOV     DL, AL                MOV     AH, 2                INT     21h                DEC     SI                JMP     CicloLSLeeString       ENDP  ; Rutina que convierte a decimal el valor recibido en AX, y lo coloca en; el buffer apuntado por DS:DXConvierteDecimal PROC NEAR       &#59; Inicializacion de la rutina        PUSH    SI        PUSH    CX        PUSH    BX        PUSH    AX       &#59; Inicia la conversion        MOV     SI, DX        PUSH    DX        MOV     CX, 4         LEA     BX, ValoresCicloDec:  XOR     DX, DX &#59; Pone DX en 0, esta en el ciclo porque DIV cambia DX        DIV     WORD PTR [BX]        ADD     AL, 30h        MOV     [SI], AL       &#59; BYTE PTR ¡mplicito        MOV     AX, DX         &#59; Pasa el residuo de DX a AX        INC     BX             &#59; Mueve BX al siguiente Word        INC     BX        INC     SI        LOOP    CicloDec        ADD     AL, 30h        MOV     AH, '$'&#59; Para marcar fin del string        MOV     [SI], AX       &#59; Fin de la rutina        POP     DX        POP     AX        POP     BX        POP     CX        POP     SI        RETConvierteDecimal ENDP ; Rutina que convierte a decimal el valor recibido en AX, lo coloca en; el buffer apuntado por DS:DX y lo imprimeImprimeDecimal  PROC NEAR        CALL    ConvierteDecimal        PUSH    AX        MOV     AH, 9        INT     21h        POP     AX        RETImprimeDecimal  ENDP ; Rutina que salta una lineaSaltaLinea     PROC NEAR        PUSH    DX        PUSH    AX        LEA     DX, Salto        MOV     AH, 9        INT     21h        POP     AX        POP     DX        RETSaltaLinea     ENDP ; Segunda prueba de raiz: algoritmo de NewtonRaiz    PROC; y = (x/y +y)/2        MOV     DX, AX&#59; Para conservar x        MOV     BL, 2&#59; Para dividir        MOV     CL, 1&#59; YCiclo:  MOV     AX, DX &#59; AX = x        DIV     CL     &#59; CL = y => AL = x/y        ADD     AL, CL &#59; AL = x / y + y        MOV     AH, 0  &#59; AX = x / y + y        DIV     BL     &#59; AX = AX / 2 = (x / y + y)/2        MOV     BH, AL &#59; Guardar el resultado para ser nuevo y        SUB     AL, CL &#59; Calcula DY como Nuevo Y - Y anterior        MOV     CL, BH &#59; Ajusta el nuevo y        CMP     AL, 0  &#59; Es DY = 0? (ya no cambia)        JNE     Ciclo  &#59; No, sigue iterando       &#59; En CL queda el valor de la raiz (y)        RETRaiz    ENDP Inicio:        MOV     AX, @data        MOV     DS, AX;        CALL    LeeString        MOV     AX, 225        CALL    Raiz        MOV     AL, CL        XOR     AH, AH        CALL    ImprimeDecimal        MOV     AH, 4Ch        INT     21h        END     Inicio   

Navegación

[0] Índice de Mensajes

Ir a la versión completa