Значение регистра ebx изменяется после выполнения сборки "mov eax, [edx + ebx]" (NASM) - PullRequest
1 голос
/ 20 мая 2011

Я новичок в сборке и пытаюсь выполнить произвольную арифметику точности в сборке. Но я застрял в ошибке на целый день.

    mov eax,[ebp+8] ; the first parameter of c function
    mov edx,[ebp+12] ; the second parameter of c function
    sub ecx,ecx
    sub ebx,ebx

    for_loop2:
    cmp ecx,[noktadanSonraFark] ; [noktadanSonraFark] is a variable that contains the difference of the lenghts of the two parameters 
    je end_for2

    mov ebx,[length2] ; the length of the second parameter "9"

    sub ebx,1 ; if length is 9 the last chacter will be on 8. index

    sub ebx,ecx

    mov eax, [edx+ebx] ; must show the character at the 8.index

        mov eax,ebx ; this 4 line returns thee value stored in eax to the 
        pop ebx  ; c function. and the result is printed
        pop ebp
        ret

    inc ecx
    jmp for_loop2

Моя проблема в том, что на экран ничего не выводится. Но когда я комментирую эту строку mov eax, [edx+ebx], значение ebx выводится правильно "8", поэтому кажется, что эта строка mov eax, [edx+ebx] меняет значение в ebx или удаляет его. Потому что ничего не выводится на экран. Есть идеи?

1 Ответ

4 голосов
/ 20 мая 2011

Скорее всего, проблема в том, что инструкция mov eax, [edx+ebx] пытается получить доступ к адресу памяти, доступ к которому у вашей программы отсутствует.Это вызывает сбой программы.Таким образом, нет выхода.Несомненно, что доступ к [edx+ebx] не изменяет ни один из этих двух регистров.

Вы говорите, что если вы закомментируете эту строку, все будет работать так, как ожидается, и вы получите «8», что является значением ebx.Вы проверили значение edx?

...