singlepost

СРОЧНО ПОМОГИТЕ С Assembler << На главную или назад  

задание/написать ф-ию вычисляющую по заданным точкам А В и С площадь треугольника АВС (на униксе)

и если будет не в падлу напишите плз где какая функция что делает(не обязательно)

25 ответов в теме “СРОЧНО ПОМОГИТЕ С Assembler”

  1. 25
    Серж Андреев ответил:

    А у меня в программе нет "fsubp".

  2. 24
    Пётр Юрьевич ответил:

    вообщем проблема такая(((
    в той проге что я выкладывал
    строки 42/44/46/48/50/52/86/87/89/93/98/103 error:ambiguos operand side for 'fild' и 'fist'
    строки 90/94/99-translating to 'fsubp'

    в том что выкладывал серж

    строки 42/44/46/48/50/52/86/87/89/93/98/103error:ambiguos operand side for 'fild' и 'fist'
    строки 90/94/99:warning:translating to 'fsubp'

  3. 23
    Пётр Юрьевич ответил:

    спасибо)

  4. 22
    Серж Андреев ответил:

    int trr(int xa,int xb,int xc,int ya,int yb,int yc)
    {
    _asm //S = 1/2 |xa*yb-xb*ya!+xb*yc-xc*yb+xc*ya-xa*yc|
    {
    mov eax,xa;
    mul yb
    mov ebx,eax
    mov eax,xb
    mul ya
    sub ebx,eax
    mov eax,xb
    mul yc
    add ebx,eax
    mov eax,xc
    push eax
    mul yb
    sub ebx,eax
    pop eax
    mul ya
    add ebx,eax
    mov eax,xa
    mul yc
    sub ebx,eax
    jns label1
    neg ebx
    label1:
    mov eax,ebx
    shr eax,1
    }
    }
    int _tmain(int argc, _TCHAR* argv[])
    {

    int xa = 10;
    int ya = 10;
    int xb = 20;
    int yb = 20;
    int xc = 30;
    int yc = 10;

    printf("Hello\n%i",trr(xa,xb,xc,ya,yb,yc));
    getchar();
    return 0;
    }

    Проверил, работает…

  5. 21
    Серж Андреев ответил:

    .387 – директива подтыкновения сопроцессора. Да и чем вам мой вариант не подошел?

  6. 20
    Жека Кирпичев ответил:

    Блин.
    Процитируй полностью и подробно сообщение компилятора.

  7. 19
    Пётр Юрьевич ответил:

    FILD a
    FIST a
    говорю же при компиле пишет что оибка типа и идти в баню….
    начало ошибки идёт от FINIT

  8. 18
    Жека Кирпичев ответил:

    В чем конкретно ошибка-то?
    Е-мое, прямо "Дядя, я знаю что у вас сломалось". Ты правда расчитываешь, что я смогу выяснить, что у тебя за проблема по описанию "Проге не нравится, прога не пашет т.к. думает что ошибка" ?

  9. 17
    Пётр Юрьевич ответил:

    ещё бы нужна)))

  10. 16
    Пётр Юрьевич ответил:

    .intel_syntax noprefix
    .global trr
    .type trr.@function

    trr:

    mov eax,[esp+12]
    sub eax,[esp+4]
    mul eax
    mov ebx,eax
    mov eax,[esp+16]
    sub eax,[esp+8]
    mul eax
    add eax,ebx
    mov a,eax

    mov eax,[esp+20]
    sub eax,[esp+12]
    mul eax
    mov ebx,eax
    mov eax,[esp+24]
    sub eax,[esp+16]
    mul eax
    add eax,ebx
    mov b,eax

    mov eax,[esp+4]
    sub eax,[esp+20]
    mul eax
    mov ebx,eax
    mov eax,[esp+8]
    sub eax,[esp+24]
    mul eax
    add eax,ebx
    mov c,eax

    FINIT

    FILD a
    FSQRT
    FIST a

    FILD b
    FSQRT
    FIST b

    FILD c
    FSQRT
    FIST c

    mov ax,a
    mov [esp+4],ax
    mov ax,b
    mov [esp+8],ax
    mov ax,c
    mov [esp+12],ax

    mov eax,[esp+4]
    add eax,[esp+8]
    cmp eax,[esp+12]
    jle _NETR
    sub eax,eax
    mov eax,[esp+8]
    add eax,[esp+12]
    cmp eax,[esp+4]
    jle _NETR
    sub eax,eax
    mov eax,[esp+12]
    add eax,[esp+4]
    cmp eax,[esp+8]
    jle _NETR

    mov eax,[esp+4]
    add eax,[esp+8]
    add eax,[esp+12]

    mov p,eax
    mov eax,2
    mov two,eax

    FILD p
    FIDIV two
    FLD ST(0)
    FILD a
    FSUB
    FXCH
    FLD ST(0)
    FILD b
    FSUB
    FMUL ST(0),ST(2)
    FXCH
    FLD ST(0)
    FILD c
    FSUB
    FMUL ST(0),ST(2)
    FMUL ST(0),ST(1)
    FSQRT
    FIST p
    mov eax,p
    jmp _EXITT

    _NETR:
    mov eax,0
    jmp _EXITT

    _EXITT:

    .lcomm two 4
    .lcomm p 4
    .lcomm a 4
    .lcomm b 4
    .lcomm c 4

    ret

    вот такое чудо получилось но есть одна трабла!!!!
    FILD a
    FIST a
    проге не нравятся она пишет что я упырь и прога не пашет т.к. думает что ошибка(((((

  11. 15
    Жека Кирпичев ответил:

    Так что, неужели помощь еще нужна? Уже прошло не 2 часа, а 2 дня.

  12. 14
    Пётр Юрьевич ответил:

    ну асем я када-то давно проходил в школе сейчас убей не помню в си уже малость шарю)….

  13. 13
    Жека Кирпичев ответил:

    Посмотреть в гугле как делать в си ассемблерные вставки, или посмотреть пару простых примеров программирования на асме типа "ввести число, вывести его квадрат" – это максимум полчаса. Формулу тебе тут уже написали; пораскинуть мозгами и прикрутить ее, даже если вообще в жизни асма в глаза не видел (несмотря на то, что такой предмет есть) – ну два часа, от силы. Можт, надо вуз сменить, раз слабо произвести такие манипуляции?

  14. 12
    Пётр Юрьевич ответил:

    ну просто надо полностью написать и показать преподу полностью прогу через компиляцию

  15. 11
    Серж Андреев ответил:

    Пишешь нечто типа
    int trr(int xa,ya,xb,yb,xc,yc); assembler; (не знаю, как в Си асмовские процедуры оформляются)

    asm{
    мой код
    }
    К моему коду достаточно один оператор приписать, чтобы выдавало результат
    _____MOV EAX,EBX
    т.к. Си возвращает значение функции типа int в аккумуляторе (регистр EAX/AX/AL)

  16. 10
    Серж Андреев ответил:

    _____MOV EAX,xa ; //EAX <- xa
    _____MUL yb ; //EAX = xa * yb
    _____MOV EBX,EAX ; EBX – accumulate result
    _____MOV EAX,xb
    _____MUL ya ; //EAX = xb * ya
    _____SUB EBX,EAX ; EBX = xa * yb – xb * ya
    _____MOV EAX,xb
    _____MUL yc ; EAX = xb * yc
    _____ADD EBX,EAX ; EBX = EBX + xb * yc
    _____MOV EAX,xc
    _____MUL yb ; EAX = xc * yb
    _____SUB EBX,EAX ; EBX = EBX – xc * yb
    _____MOV EAX,xc
    _____MUL ya ; AEX = xc * ya
    _____ADD EBX,EAX ; EBX = EBX + xc * ya
    _____MOV EAX,xa
    _____MUL yx ; EAX = xa * yc
    _____SUB EBX,EAX ; EBX = EBX – xa * yc
    _____JNS LABEL1 ; if result < 0
    _____NEG EBX ; result = 0-result
    LABEL1:
    _____SHR EBX,1 ; EBX = EBX / 2

    ЗЫ: Моно еще ускорить. Это без оптимизации )))

  17. 9
    Пётр Юрьевич ответил:

    а если полностью прога)?

  18. 8
    Серж Андреев ответил:

    ты же сам сказал, что функция, вычисляющая по ЗАДАННЫМ точкам. Вот функция, точки, исходя из условия, заданы.

  19. 7
    Серж Андреев ответил:

    Формулку дайте для целочисленной арифметики – облеку в код. Т.е. поставьте задачу, а уж мы напишем )

  20. 6
    Жека Кирпичев ответил:

    Формула: S = 1/2 |xa*yb-xb*ya+xb*yc-xc*yb+xc*ya-xa*yc|
    На асме сам напиши.

  21. 5
    Пётр Юрьевич ответил:

    #include <stdio.h>
    #include <stdlib.h>

    extern int trr(int x1,int y1,int x2, int y2, int x3, int y3);
    int main(int argc, char **argv)
    {
    int a;
    if (argc!=7) {printf( "Incorrect parameters! Example: ./a.out x1 y1 x2 y2 x3 y3\n");}
    else{
    a=trr(atoi(argv[1]),atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]));
    printf("Plowad treygolnika ravnaetsa %d+-1\n",a );

    };
    return 0;
    }
    вот что получилось на си а вот на ассемблере я не умею((((
    а для зачёта нужен ещё и ас(((

  22. 4
    Виктор Коновалов ответил:

    можно и через использование FPU.. если бы не сессия, то написал бы :( там в итоге немного кода выйдет, по крайней мере поменьше чем с формулой что в позапредыдущем посте)

  23. 3
    Пётр Юрьевич ответил:

    ну блин помогите)))

  24. 2
    Серж Андреев ответил:

    На асме площадь треугольника? Сложновато…

  25. 1
    Пётр Юрьевич ответил:

    ап

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.