汇编任务 - 分和阵列的最大值
题
我遇到的汇编代码的问题。我是一个新手,以汇编,所以似乎很难为我解决它自己。
的任务是:“要查找阵列的最小和最大的元素”
所有我已经做的是寻找最大的元素。我无法找到答案,如何使支票的最小元素,在那里我应该把这样的验证。或者,可能是,我应该通过元素找到最大元素之后第二次循环?
<强>代码:强>
#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”会发生什么?试试看。
不隶属于 StackOverflow