• Domingo 22 de Diciembre de 2024, 14:26

Autor Tema:  Formula General  (Leído 10365 veces)

jes

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Formula General
« en: Miércoles 14 de Junio de 2006, 04:46 »
0
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

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Formula General
« Respuesta #1 en: Miércoles 14 de Junio de 2006, 10:19 »
0
No se resuelven tareas, solo te podemos ofrecer ayuda con lo que no entiendas
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


jes

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Formula General
« Respuesta #2 en: Viernes 16 de Junio de 2006, 14:14 »
0
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

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Formula General
« Respuesta #3 en: Viernes 16 de Junio de 2006, 23:53 »
0
: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
  1.  
  2. ; Rutina para sacar raiz cuadrada
  3. .model small
  4. .stack 100h
  5. .data
  6.  
  7. SIZE_BUFFER     EQU     32
  8. BACK_SPACE      EQU     8
  9. KEY_ENTER       EQU     13
  10.  
  11. Temporal        DB      17 DUP(?)
  12. Salto           DB      13, 10, '$'
  13. Valores         DW      10000, 1000, 100, 10
  14. Buffer          DB      SIZE_BUFFER DUP (?)
  15. Longitud        DW      0
  16. Tecla           DB      0
  17.  
  18. .code
  19.  
  20. LeeString       PROC NEAR
  21.                 LEA     SI, Buffer
  22.                 XOR     CX, CX
  23. CicloLS:
  24.                &#59; Leer un caracter
  25.                 MOV     AH, 07H
  26.                 INT     21h
  27.                 CMP     AL, BACK_SPACE
  28.                 JE      Back
  29.                 CMP     AL, KEY_ENTER
  30.                 JE      FinLee
  31.                 MOV     [SI], AL
  32.                 INC     SI
  33.                 INC     CX
  34.                 MOV     DL, AL
  35.                 MOV     AH, 2
  36.                 INT     21h
  37.                 CMP     CX, SIZE_BUFFER
  38.                 JL      CicloLS
  39. FinLee:         MOV     BYTE PTR [SI], '$'
  40.                 RET
  41. Back:           CMP     SI, OFFSET Buffer
  42.                 JE      CicloLS
  43.                 MOV     DL, AL
  44.                 MOV     AH, 2
  45.                 INT     21h
  46.                 DEC     SI
  47.                 JMP     CicloLS
  48. LeeString       ENDP
  49.  
  50.  
  51. ; Rutina que convierte a decimal el valor recibido en AX, y lo coloca en
  52. ; el buffer apuntado por DS:DX
  53. ConvierteDecimal PROC NEAR
  54.        &#59; Inicializacion de la rutina
  55.         PUSH    SI
  56.         PUSH    CX
  57.         PUSH    BX
  58.         PUSH    AX
  59.        &#59; Inicia la conversion
  60.         MOV     SI, DX
  61.         PUSH    DX
  62.         MOV     CX, 4
  63.         LEA     BX, Valores
  64. CicloDec:  XOR     DX, DX &#59; Pone DX en 0, esta en el ciclo porque DIV cambia DX
  65.         DIV     WORD PTR [BX]
  66.         ADD     AL, 30h
  67.         MOV     [SI], AL       &#59; BYTE PTR ¡mplicito
  68.         MOV     AX, DX         &#59; Pasa el residuo de DX a AX
  69.         INC     BX             &#59; Mueve BX al siguiente Word
  70.         INC     BX
  71.         INC     SI
  72.         LOOP    CicloDec
  73.         ADD     AL, 30h
  74.         MOV     AH, '$'&#59; Para marcar fin del string
  75.         MOV     [SI], AX
  76.        &#59; Fin de la rutina
  77.         POP     DX
  78.         POP     AX
  79.         POP     BX
  80.         POP     CX
  81.         POP     SI
  82.         RET
  83. ConvierteDecimal ENDP
  84.  
  85. ; Rutina que convierte a decimal el valor recibido en AX, lo coloca en
  86. ; el buffer apuntado por DS:DX y lo imprime
  87. ImprimeDecimal  PROC NEAR
  88.         CALL    ConvierteDecimal
  89.         PUSH    AX
  90.         MOV     AH, 9
  91.         INT     21h
  92.         POP     AX
  93.         RET
  94. ImprimeDecimal  ENDP
  95.  
  96. ; Rutina que salta una linea
  97. SaltaLinea     PROC NEAR
  98.         PUSH    DX
  99.         PUSH    AX
  100.         LEA     DX, Salto
  101.         MOV     AH, 9
  102.         INT     21h
  103.         POP     AX
  104.         POP     DX
  105.         RET
  106. SaltaLinea     ENDP
  107.  
  108. ; Segunda prueba de raiz: algoritmo de Newton
  109. Raiz    PROC
  110. ; y = (x/y +y)/2
  111.         MOV     DX, AX&#59; Para conservar x
  112.         MOV     BL, 2&#59; Para dividir
  113.         MOV     CL, 1&#59; Y
  114. Ciclo:  MOV     AX, DX &#59; AX = x
  115.         DIV     CL     &#59; CL = y => AL = x/y
  116.         ADD     AL, CL &#59; AL = x / y + y
  117.         MOV     AH, 0  &#59; AX = x / y + y
  118.         DIV     BL     &#59; AX = AX / 2 = (x / y + y)/2
  119.         MOV     BH, AL &#59; Guardar el resultado para ser nuevo y
  120.         SUB     AL, CL &#59; Calcula DY como Nuevo Y - Y anterior
  121.         MOV     CL, BH &#59; Ajusta el nuevo y
  122.         CMP     AL, 0  &#59; Es DY = 0? (ya no cambia)
  123.         JNE     Ciclo  &#59; No, sigue iterando
  124.        &#59; En CL queda el valor de la raiz (y)
  125.         RET
  126. Raiz    ENDP
  127.  
  128. Inicio:
  129.         MOV     AX, @data
  130.         MOV     DS, AX
  131. ;        CALL    LeeString
  132.         MOV     AX, 225
  133.         CALL    Raiz
  134.         MOV     AL, CL
  135.         XOR     AH, AH
  136.         CALL    ImprimeDecimal
  137.         MOV     AH, 4Ch
  138.         INT     21h
  139.         END     Inicio
  140.  
  141.  
  142.  
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]