Я пишу код, чтобы найти последние 0 в массиве.
По сути, мне нужно переместить новое значение в «вершину» каждого массива, если оно имеет только нули, оно помещает его вend, и если он находит другое значение, он помещает его в последний 0 (я рассматриваю мои массивы как груды).
Пока что моя подпрограмма по большей части работает нормально, но иногда она перезаписывает значение, которое мне не нужно (вместо того, чтобы получить первое значение, отличное от 0, оно принимает следующее).Вот код, который я использовал, чтобы получить «вершину» массива.
TOP:
xor ecx,ecx
xor ebx,ebx
TOP_FOR:
mov bx,word[eax+ecx*2] ;eax has the pointer of the array
cmp ecx,n ;n is the array's length
je END_TOP
inc ecx
cmp bx,0
je TOP_FOR
;here i get the direction of the first value different
END_TOP: ;from 0 but in my code i need the last 0, so
dec ecx ;i decrease ecx (result of this subrutine)
ret
Например, если я поставлю массив с 0,2, я ожидаю ecx = 0
, но с этим вводом получим 1.
- С массивом 1,2Я получаю 0 (это то, что я хочу)
- с массивом 0,0 Я получаю 1 (что я хочу, снова)
Edit: попытался запустить цикл на n-1, и это дает мне еще более странные результаты.
TOP:
xor ecx,ecx
;xor ebx,ebx
mov ecx,n-1
TOP_FOR:
;mov bx,word[eax+ecx*2]
cmp word[eax+ecx*2],0
je FIN_TOPE
dec ecx
cmp ecx,0
jne TOP_FOR
END_TOP:
ret