Задача ассемблера - минимальное и максимальное значения массива - PullRequest
0 голосов
/ 20 января 2010

Я столкнулся с проблемами с ассемблерным кодом. Я новичок в ассемблере, поэтому мне сложно решить это самому.

Задача: «Найти минимальные и максимальные элементы массива.»

Все, что я уже сделал, - это поиск максимального элемента. Я не могу узнать, как сделать проверку на минимальный элемент и где я должен поставить такую ​​проверку. Или, возможно, мне нужно перебрать элементы во второй раз после нахождения максимального элемента?

Код:

#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main() {
   int  N = 10, i;
   clrscr();
   // on this platform, int is 16-bit
   int a[] = { 1, 4, -6, 12, -25, 10, 3, -4, 15, 7}, MAX, MIN, RESULT;

    __asm{
    mov cx, N
    lea si, a
    lodsw
    mov bx, ax
    mov dx, ax
    dec cx }
    m:
       __asm{
     lodsw
     cmp dx, ax
     jge m1
     mov dx, ax
       }
    m1:
       __asm{
       loop m
       mov MAX, dx
    }

cout << "Max = " << MAX;
//cout << "Min = " << MIN;
getch();
}

Ответы [ 2 ]

3 голосов
/ 20 января 2010

Что произойдет, если вы замените «jge» на «jle»? Попробуйте и посмотрите.

0 голосов
/ 22 января 2010

Если кому-то интересно, вот решение для моего вопроса (я узнал об этом сегодня с помощью моего репетитора):

#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main() {
   int  N = 10, i;
   clrscr();
   int a[] = { 1, 4, -6, 12, -25, 10, 3, -4, 15, 7}, MAX, MIN, RESULT;

    __asm{
      mov cx, N
      lea si, a
      lodsw
      mov MIN, ax
      mov MAX, ax
      dec cx
    }
    m:
     __asm{
       lodsw
       cmp MIN, ax
       jle m1
       mov MIN, ax
       jmp m2
    }
    m1:
     __asm{
       cmp MAX, ax
       jge m2
       mov MAX, ax
    }
    m2:
     __asm{
       loop m;
    }

cout << "Max = " << MAX << "\n";
cout << "Min = " << MIN;
getch();
}

Алгоритм : если cmp MIN, ax имеет отрицательный результат, это означает, что ax больше, чем MIN. Таким образом, скрипт переходит на метку m1 для сравнения значения ax с MAX. Когда cmp MIN, ax возвращает положительное значение, сценарии присваивают значение регистра ax переменной MIN и после этого переходят к метке m2, чтобы уменьшить счетчик цикла. Алгоритм нахождения максимального значения работает аналогично (метка m1).

...