Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 汇编程序任务-数组的最小值和最大值_C++_Algorithm_Assembly_X86 16 - Fatal编程技术网

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

C++ 汇编程序任务-数组的最小值和最大值,c++,algorithm,assembly,x86-16,C++,Algorithm,Assembly,X86 16,我遇到了汇编代码的问题。我是一个装配新手,所以我似乎很难自己解决它 任务是:“找到数组的最小和最大元素。” 我所做的就是搜索最大元素。我不知道如何检查最小元素,以及应该在哪里进行验证。或者,我应该在找到最大元素后第二次遍历元素 代码: #include <conio.h> #include <stdio.h> #include <iostream.h> void main() { int N = 10, i; clrscr(); // on

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

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

我所做的就是搜索最大元素。我不知道如何检查最小元素,以及应该在哪里进行验证。或者,我应该在找到最大元素后第二次遍历元素

代码:

#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();
}
#包括
#包括
#包括
void main(){
int N=10,i;
clrsc();
//在这个平台上,int是16位的
inta[]={1,4,-6,12,-25,10,3,-4,15,7},最大,最小,结果;
__asm{
莫夫cx,N
莉丝,a
lodsw
mov-bx,ax
mov-dx,ax
dec cx}
m:
__asm{
lodsw
cmp-dx,ax
jge m1
mov-dx,ax
}
m1:
__asm{
环m
最大移动速度
}

cout如果你用“jle”替换“jge”会发生什么?试试看。

如果你用“jle”替换“jge”会发生什么?试试看。

如果某人感兴趣,下面是我问题的解决方案(我今天在导师的帮助下发现了这个问题):

#包括
#包括
#包括
void main(){
int N=10,i;
clrsc();
inta[]={1,4,-6,12,-25,10,3,-4,15,7},最大,最小,结果;
__asm{
莫夫cx,N
莉丝,a
lodsw
mov-MIN,ax
最大移动量
十二月十二日
}
m:
__asm{
lodsw
最小值,最大值
jle m1
mov-MIN,ax
jmp-m2
}
m1:
__asm{
最大化学需氧量
jge m2
最大移动量
}
m2:
__asm{
环m;
}

cout如果某人感兴趣,以下是我问题的解决方案(我今天在导师的帮助下发现了):

#包括
#包括
#包括
void main(){
int N=10,i;
clrsc();
inta[]={1,4,-6,12,-25,10,3,-4,15,7},最大,最小,结果;
__asm{
莫夫cx,N
莉丝,a
lodsw
mov-MIN,ax
最大移动量
十二月十二日
}
m:
__asm{
lodsw
最小值,最大值
jle m1
mov-MIN,ax
jmp-m2
}
m1:
__asm{
最大化学需氧量
jge m2
最大移动量
}
m2:
__asm{
环m;
}

cout最好在计算max的同一个循环中计算min,也就是说,对于每个元素,在寄存器中有它的时候,在测试max的同时测试它的min。在label
m1
似乎是正确的位置。谢谢你的帮助。我已经理解了算法,如何实现这种验证,但不幸的是我不是我无法编写代码使此代码可行。最好在计算最大值的同一循环中计算最小值,也就是说,对于每个元素,在寄存器中存储它的时候,在测试它的最大值的同时测试它的最小值。标签
m1
似乎是正确的位置。谢谢你的帮助。我已经理解了算法,如何实现这样的验证,但不幸的是我无法编写代码使此代码可行。结果将等于“-25”-数组的最小值。非常好。现在您有两个循环,一个用于计算最小值,一个用于计算最大值。要将它们组合成一个循环,您需要做什么?提示:您的循环已经在初始化两个寄存器(bx和dx),但目前仅使用其中一个。结果将等于数组的最小值“-25”。非常好。现在有两个循环,一个用于计算最小值,一个用于计算最大值。要将它们组合成一个循环,您需要做些什么?提示:您的循环已经在初始化两个寄存器(bx和dx)但目前只使用其中一种。
#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();
}