Гиперболический косинус

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

TITAN
Сообщения: 7
Зарегистрирован: 20 ноя 2007, 17:13

17 дек 2007, 23:32

Буду очень-очень благодарен за полный код!
Кто шарит помогите плиз, а то на днях сдавать.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

17 дек 2007, 23:50

И чего? Гипорболический косинус? Что писать, на чем, что выводить-вводить и т.д.? Не полная информация!
It's a long way to the top if you wanna rock'n'roll
TITAN
Сообщения: 7
Зарегистрирован: 20 ноя 2007, 17:13

17 дек 2007, 23:56

я же создал в теме ассемблер, значит речь идёт про ассемблер.
в досовсое окно выводит x= я вбиваючисло и он считает выводит cosh(x)= как-нибудь так
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

17 дек 2007, 23:59

1. Ассемблер для какого процессора?
2. Х вводится в радианах, градусах?
3. Числовой сопроцессор использовать?
It's a long way to the top if you wanna rock'n'roll
TITAN
Сообщения: 7
Зарегистрирован: 20 ноя 2007, 17:13

18 дек 2007, 00:04

проц Intel
x вводится в градусах( ну как удобнеебудет, мне всё равно )
3. не знаю что это такое :) , лишних замутов не надо
вооще у меня задание - сделать прогу совместно с сишником, но я так понимаю это не меняет код программы на асме?
грубо говоря мне надо посчитаь на си и на асме гиперболический косинус, тока с помощью бат файла одновременно и один и тотже аргумент
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

18 дек 2007, 00:14

&quot писал(а):3. не знаю что это такое , лишних замутов не надо
Числовой сопроцессор сократит объем кода, время разработки и сложность программы в несколько раз. Без него считать експоненту будет гораздо сложнее
&quot писал(а):вооще у меня задание - сделать прогу совместно с сишником, но я так понимаю это не меняет код программы на асме?
Асм и Си - два разных языка, ассемблер по уровню находится ниже Си, посему программы писать на нем сложнее и дольше - но и скорость работы гораздо выше
It's a long way to the top if you wanna rock'n'roll
TITAN
Сообщения: 7
Зарегистрирован: 20 ноя 2007, 17:13

18 дек 2007, 00:19

ну наверно чтобы проще было тогда с числовым процессором. На счёт си и асма-то я понимаю, просто задание у меня "использовать стандарты свзяи с языком Си, (используя FPU) вычислить гиперболический косинус".
ну вощем мне нужен код ассемблера, чтобы я мог посчитать с его помощью гиперболический косинус, способы реализации значения не миеют, главное чтобы работало!
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

18 дек 2007, 00:23

Ладно, завтра напишу. Только на асме, никаких сишных стандартов - если надо переделай
It's a long way to the top if you wanna rock'n'roll
TITAN
Сообщения: 7
Зарегистрирован: 20 ноя 2007, 17:13

18 дек 2007, 00:30

хорошо, я тебе там в личку написал. спокойной ночи
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

18 дек 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
Без коментов и объяснений, не люблю я их писать...
It's a long way to the top if you wanna rock'n'roll
Ответить