汇编程序任务 - 数组的最小值和最大值

时间:2010-01-20 11:57:41

标签: c++ algorithm assembly x86-16

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

任务是:“找到数组的最小和最大元素。”

我所做的就是搜索最大元素。我无法找到,如何检查最小元素以及我应该在哪里进行此类验证。或者,我可能在找到最大元素后第二次循环元素?

代码:

#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 个答案:

答案 0 :(得分:3)

如果用“jle”替换“jge”会怎样?试试吧,看看。

答案 1 :(得分: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标签,以将ax值与MAX进行比较。当cmp MIN, ax返回正值时,脚本会将ax寄存器的值分配给MIN变量,然后跳转到m2标签以递减循环计数器。查找最大值的算法类似地工作(标签m1)。