Domingo 22 de Diciembre de 2024, 13:09
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
ASM (Ensamblador)
(Moderador:
Eternal Idol
) »
Formula General
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Formula General (Leído 10364 veces)
jes
Nuevo Miembro
Mensajes: 3
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!!!!
Tweet
Bicholey
Moderador
Mensajes: 1234
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
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
Re: Formula General
«
Respuesta #3 en:
Viernes 16 de Junio de 2006, 23:53 »
0
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 32
BACK_SPACE EQU 8
KEY_ENTER EQU 13
Temporal DB 17 DUP(?)
Salto DB 13, 10, '$'
Valores DW 10000, 1000, 100, 10
Buffer DB SIZE_BUFFER DUP (?)
Longitud DW 0
Tecla DB 0
.code
LeeString PROC NEAR
LEA SI, Buffer
XOR CX, CX
CicloLS:
; 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 CicloLS
FinLee: MOV BYTE PTR [SI], '$'
RET
Back: CMP SI, OFFSET Buffer
JE CicloLS
MOV DL, AL
MOV AH, 2
INT 21h
DEC SI
JMP CicloLS
LeeString ENDP
; Rutina que convierte a decimal el valor recibido en AX, y lo coloca en
; el buffer apuntado por DS:DX
ConvierteDecimal PROC NEAR
; Inicializacion de la rutina
PUSH SI
PUSH CX
PUSH BX
PUSH AX
; Inicia la conversion
MOV SI, DX
PUSH DX
MOV CX, 4
LEA BX, Valores
CicloDec: XOR DX, DX ; Pone DX en 0, esta en el ciclo porque DIV cambia DX
DIV WORD PTR [BX]
ADD AL, 30h
MOV [SI], AL ; BYTE PTR ¡mplicito
MOV AX, DX ; Pasa el residuo de DX a AX
INC BX ; Mueve BX al siguiente Word
INC BX
INC SI
LOOP CicloDec
ADD AL, 30h
MOV AH, '$'; Para marcar fin del string
MOV [SI], AX
; Fin de la rutina
POP DX
POP AX
POP BX
POP CX
POP SI
RET
ConvierteDecimal ENDP
; Rutina que convierte a decimal el valor recibido en AX, lo coloca en
; el buffer apuntado por DS:DX y lo imprime
ImprimeDecimal PROC NEAR
CALL ConvierteDecimal
PUSH AX
MOV AH, 9
INT 21h
POP AX
RET
ImprimeDecimal ENDP
; Rutina que salta una linea
SaltaLinea PROC NEAR
PUSH DX
PUSH AX
LEA DX, Salto
MOV AH, 9
INT 21h
POP AX
POP DX
RET
SaltaLinea ENDP
; Segunda prueba de raiz: algoritmo de Newton
Raiz PROC
; y = (x/y +y)/2
MOV DX, AX; Para conservar x
MOV BL, 2; Para dividir
MOV CL, 1; Y
Ciclo: MOV AX, DX ; AX = x
DIV CL ; CL = y => AL = x/y
ADD AL, CL ; AL = x / y + y
MOV AH, 0 ; AX = x / y + y
DIV BL ; AX = AX / 2 = (x / y + y)/2
MOV BH, AL ; Guardar el resultado para ser nuevo y
SUB AL, CL ; Calcula DY como Nuevo Y - Y anterior
MOV CL, BH ; Ajusta el nuevo y
CMP AL, 0 ; Es DY = 0? (ya no cambia)
JNE Ciclo ; No, sigue iterando
; En CL queda el valor de la raiz (y)
RET
Raiz 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
[size=109]
LOS GATOS SIEMPRE CAEMOS DE PIE !!!
[/size]
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
ASM (Ensamblador)
(Moderador:
Eternal Idol
) »
Formula General