tarea Ensamblador - valores mínimo y máximo de la matriz
Pregunta
Me he encontrado problemas con el código ensamblador. Soy un novato en ensamblador, por lo que parece difícil para mí para resolverlo yo mismo.
La tarea es: "Para encontrar los elementos mínimos y máximos de la matriz"
Todo lo que ya he hecho es la búsqueda de elemento máximo. No puedo saber, cómo hacer de verificación del elemento mínimo y donde debo poner dicha verificación. O, probablemente, que debe reproducirse a través de elementos segunda vez después de encontrar elemento maximal?
Código:
#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();
}
Solución 2
Si es interesante para alguien, aquí está la solución para mi pregunta (me di cuenta que hoy en día con la ayuda de mi tutor):
#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();
}
Algoritmo : si cmp MIN, ax
tiene resultado negativo, significa ax
es mayor, que MIN
. Así guión salta a la etiqueta m1
para comparar el valor ax
con MAX
. Cuando vuelve cmp MIN, ax
valor positivo, el valor guiones cesionarios de registro ax
a la variable MIN
y después de eso salta a la etiqueta m2
al contador del bucle decremento. Algoritmo de búsqueda de valor máximo funciona de manera similar (m1
etiqueta).
Otros consejos
¿Qué ocurre si se reemplaza "JGE" con "JLE"? Probarlo y ver.