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。在labelm1
似乎是正确的位置。谢谢你的帮助。我已经理解了算法,如何实现这种验证,但不幸的是我不是我无法编写代码使此代码可行。最好在计算最大值的同一循环中计算最小值,也就是说,对于每个元素,在寄存器中存储它的时候,在测试它的最大值的同时测试它的最小值。标签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();
}