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

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++

 #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 :

 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 ;-)

0

A co mówi debuger? ;]

1
int tab[]={2,2,7,2,3};
mov rcx, [rdi + rbx*4]
cmp rcx, rdx

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1