我遇到的汇编代码的问题。我是一个新手,以汇编,所以似乎很难为我解决它自己。

的任务是:“要查找阵列的最小和最大的元素”

所有我已经做的是寻找最大的元素。我无法找到答案,如何使支票的最小元素,在那里我应该把这样的验证。或者,可能是,我应该通过元素找到最大元素之后第二次循环?

<强>代码:

#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

如果这是有趣的人,这里是我的问题的解决方案(我今天发现我的导师的帮助):

#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)。

其他提示

如果您替换“JGE”与“JLE”会发生什么?试试看。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top