PDA

Просмотр полной версии : Гиперболический косинус



TITAN
17.12.2007, 23:32
Буду очень-очень благодарен за полный код!
Кто шарит помогите плиз, а то на днях сдавать.

somewhere
17.12.2007, 23:50
И чего? Гипорболический косинус? Что писать, на чем, что выводить-вводить и т.д.? Не полная информация!

TITAN
17.12.2007, 23:56
я же создал в теме ассемблер, значит речь идёт про ассемблер.
в досовсое окно выводит x= я вбиваючисло и он считает выводит cosh(x)= как-нибудь так

somewhere
17.12.2007, 23:59
1. Ассемблер для какого процессора?
2. Х вводится в радианах, градусах?
3. Числовой сопроцессор использовать?

TITAN
18.12.2007, 00:04
проц Intel
x вводится в градусах( ну как удобнеебудет, мне всё равно )
3. не знаю что это такое :), лишних замутов не надо
вооще у меня задание - сделать прогу совместно с сишником, но я так понимаю это не меняет код программы на асме?
грубо говоря мне надо посчитаь на си и на асме гиперболический косинус, тока с помощью бат файла одновременно и один и тотже аргумент

somewhere
18.12.2007, 00:14
3. не знаю что это такое , лишних замутов не надо
Числовой сопроцессор сократит объем кода, время разработки и сложность программы в несколько раз. Без него считать експоненту будет гораздо сложнее

вооще у меня задание - сделать прогу совместно с сишником, но я так понимаю это не меняет код программы на асме?
Асм и Си - два разных языка, ассемблер по уровню находится ниже Си, посему программы писать на нем сложнее и дольше - но и скорость работы гораздо выше

TITAN
18.12.2007, 00:19
ну наверно чтобы проще было тогда с числовым процессором. На счёт си и асма-то я понимаю, просто задание у меня "использовать стандарты свзяи с языком Си, (используя FPU) вычислить гиперболический косинус".
ну вощем мне нужен код ассемблера, чтобы я мог посчитать с его помощью гиперболический косинус, способы реализации значения не миеют, главное чтобы работало!

somewhere
18.12.2007, 00:23
Ладно, завтра напишу. Только на асме, никаких сишных стандартов - если надо переделай

TITAN
18.12.2007, 00:30
хорошо, я тебе там в личку написал. спокойной ночи

somewhere
18.12.2007, 12:18
.model tiny
.code
.386
jmp @start

Invitation db 'Input X = $'
Input db 8,0, 9 dup (0)
Ten dd 10.0
Value dq ?
Result db 13,10,13,10,'Cosh(x) = '
ResultValue db 25 dup(0)

;=============================================
; Input : DS:SI - Offset to string
; Output : ST(0) - Number
; No error checking to safe code
; Negative numbers supported
; "+" sign not supported
;
StrToFloat proc near
pusha
push es

movzx cx, [si+1]
inc cx
add si, 2
mov di, si
mov ax, ds
mov es, ax
cld
mov bx, cx
mov al, '.'
repnz scasb
sub bx, cx
sub bx, 2
dec di
movzx cx, [si-1]
fld1
sub dh, dh
cmp [si], byte ptr '-'
jnz @stf_positive
mov dh, 1
dec cx
dec bx
inc si
@stf_positive:
or bx, bx
jz @stf_floatpart
fmul Ten
dec bx
jmp @stf_positive
@stf_floatpart:
fstp @STF_Multiplier
fldz
@stf_loop:
cmp si, di
jz @stf_point
movzx ax, byte ptr [si]
sub al, 30h
mov @stf_digit, ax
fild @stf_digit
fmul @STF_Multiplier
fadd
fld @STF_Multiplier
fdiv Ten
fstp @STF_Multiplier
@stf_point:
inc si
dec cx
jnz @stf_loop
cmp dh, 1
jnz @stf_exit
fchs
@stf_exit:
pop es
popa
ret
@STF_Multiplier dd ?
@STF_Digit dw ?
StrToFloat endp

;=================================================
; Input: Number must be in St(0)
; DI - Offset to string
; DL - Digits in float number
; String will be terminated by '$'
;
FloatToStr proc near
pushad
movzx bp, dl
add bp, di
fnstcw @fts_cw
fwait
or @fts_cw, 0f00h
fldcw @fts_cw
fldz
fcomp
fstsw ax
test ax, 100h
jnz @fts_positive
fchs
mov [di], byte ptr '-'
inc di
@fts_positive:
fist @FTS_IntegerPart
mov eax, @FTS_IntegerPart
mov ebx, 10
sub ch, ch
@fts_int1:
sub edx, edx
div ebx
push dx
inc ch
or eax, eax
jnz @fts_int1
@fts_int2:
pop ax
add al, 30h
mov [di], al
inc di
dec ch
jnz @fts_int2
fisub @FTS_IntegerPart
mov [di], byte ptr '.'
inc di
@fts_loop:
cmp bp, di
jz @fts_exit
fmul Ten
fist word ptr @FTS_IntegerPart
fisub word ptr @FTS_IntegerPart
mov al, byte ptr @FTS_IntegerPart
add al, 30h
mov [di], al
inc di
jmp @fts_loop
@fts_exit:
mov [di], byte ptr '$'
fstp st(0)
popad
ret
@fts_IntegerPart dd ?
@fts_cw dw ?
FloatToStr endp

;=================================================
; Calculates E^x
; Input : st(0) = x
; Output: st(0) = e^x
;
Exp proc near
fldl2e ; y := x*log2e
fmul
fld st(0) ; i := round(y)
frndint
fsub st(1), st ; f := y - i
fxch st(1) ; z := 2**f
f2xm1
fld1
fadd
fscale ; z * 2**i
fstp st(1)
ret
Exp endp

;=================================================
@start:
push cs
pop ds
mov ax, 3
int 10h
mov ah, 9
mov dx, offset Invitation
int 21h
mov ah, 0Ah
mov dx, offset Input
int 21h
mov si, dx
call StrToFloat

fst Value ; cosh(x) = (e^x + e^(-x)) / 2
call Exp ; e^x
fld Value
fchs
call Exp ; e^-x
fadd
fld1
fld1
fadd ; st(0) = 2
fdiv

mov di, offset ResultValue
mov dl, 25
call FloatToStr
mov dx, offset Result
mov ah, 9
int 21h

mov ax, 4C00h
int 21h
end

Без коментов и объяснений, не люблю я их писать...

TITAN
18.12.2007, 14:18
огромнейшее спасибо!!!! дай Бог тебе здоровья!