Assembler (NASM) - dlaczego " nie porównuje "?

Assembler (NASM) - dlaczego " nie porównuje "?
CZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2557
0

Witajcie, otóż mam problem z zadaniem na wartość maksymalną.
W c++ posiadam main-a a funkcję napisana jest w assemblerze. Wysyłam tablicę i mam znaleźć największą wartość spośród wszystkich elementów. Kompilować kompiluje, ale wynikiem jest "3", czyli ostatni element z tablicy. Problem z tym, że nie wiem - dlaczego.
Oto kod z c++

Kopiuj
 #include <iostream>

using namespace std;

extern "C" int iloraz(int*,int);

int main()
{
	int wynik;
	int tab[]={2,2,7,2,3};
	wynik = iloraz(tab,5);
	cout << wynik;
	return 0;
}

A tu assembler :

Kopiuj
 section .data

section .text
global max
max:
mov rax, 0
mov rbx, 0
mov rdx, [rdi]
porownaj:
cmp rbx, rsi
je end

mov rcx, [rdi + rbx*4]
cmp rcx, rdx
ja przypisz
dodaj:
inc rbx
jmp porownaj

przypisz:
mov rdx, rcx
jmp dodaj

end:
mov rax, rdx
ret

Z gory dzieki za pomoc ;-)

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

A co mówi debuger? ;]

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
int tab[]={2,2,7,2,3};
Kopiuj
mov rcx, [rdi + rbx*4]
cmp rcx, rdx

Tablica jest liczb 32-bitowych, a wczytujesz i operujesz na 64-bitowych.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.