Не могу найти самый большой float в массиве, используя встроенную сборку - PullRequest
1 голос
/ 27 января 2012

Мне было поручено выполнить некоторые сборочные работы.Все шло хорошо, пока мне не пришлось преобразовывать программу из int в float.Я, наверное, упускаю что-то простое в своих попытках, но есть ли у кого-нибудь предложение?Я предоставлю версию int, которая работает.

#include <stdio.h>

int n;
int i;
int arr[50];
int output;

int main(void)
{
    scanf("%d", &n);

    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }

    __asm
    {
        jmp start

        switching:
            mov eax, ebx
            jmp looping

        looping:
            mov ebx, arr[ecx*4]
            inc ecx
            cmp ebx, eax

            jg switching

            cmp ecx, n
            jl looping
            ret

        start:
            mov ecx, 0
            mov eax, 0

            call looping

            mov output, eax
    }

    printf("%d", output);
    scanf("%d", &n);
}

1 Ответ

2 голосов
/ 27 января 2012

Вам нужно будет переписать большую часть вашего решения.Если вы новичок в поплавках и хотите использовать x87, здесь - хорошее руководство для чтения.

Для проверки поплавков вам понадобится что-то вроде этого условного перехода:

fld     <float to compare>
fcom    <maximum value>
fnstsw  ax
test    ah,$1
jnz     <notbigger>
...