0

アセンブラ コードで問題が発生しました。私はアセンブラーの初心者なので、自分で解決するのは難しいようです。

タスクは、「配列の最小要素と最大要素を見つけること」です。

私がすでに行ったことは、最大要素を検索することだけです。最小限の要素をチェックする方法と、そのような検証をどこに置くべきかを見つけることができません。または、おそらく、最大要素を見つけた後、要素を2回ループする必要がありますか?

コード:

#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();
}
4

2 に答える 2

3

「jge」を「jle」に置き換えるとどうなりますか? 試してみてください。

于 2010-01-20T14:01:51.753 に答える
0

誰かにとって興味深い場合、これが私の質問の解決策です(今日、家庭教師の助けを借りて見つけました):

#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比較します。正の値を返すと、スクリプトはレジスタの値を変数に代入し、その後、ラベルにジャンプしてループ カウンターをデクリメントします。最大値を見つけるアルゴリズムも同様に機能します(ラベル)。axMAXcmp MIN, axaxMINm2m1

于 2010-01-22T11:42:30.940 に答える