Страниц: [1]
  Печать  
Автор Тема: Ассемблер - что не так с регистром %ebx? (QNX 6.5)  (Прочитано 2349 раз)
talruns
Участник
*
Offline Offline

Сообщений: 40


Просмотр профиля
« : Января 31, 2018, 11:48:21 am »

Добрый день,
есть вызов функции, написанной на ассемблере


Код:
.globl  testrg
.type   testrg, @function
testrg:
        pushl   %ebp
        movl    %esp, %ebp


        pushl   %ebx // Base register — базовый регистр, применяется для хранения адреса (указателя) на некоторый объект в памяти.
pushl   %ecx // Counter register — счетчик, его неявно используют некоторые команды для организации циклов (см. loop).
        pushl   %edx // Data register — регистр данных, используется для хранения результатов промежуточных вычислений и ввода-вывода.
        pushl   %edi // Destination index register — индекс приёмника, в цепочечных операциях содержит указатель на текущий элемент-приёмник.
        pushl   %esi // Source index register — индекс источника, в цепочечных операциях содержит указатель на текущий элемент-источник.


        movl  $0x55555555, %eax
cmpl  $0x55555555, %eax
        jne   errexit


 
//movl    $0x55555555, %ebx
//cmpl    $0x55555555, %ebx
//jne     errexit




        movl    $0x55555555, %edx
        cmpl     $0x55555555, %edx
        jne     errexit

        movl    $0x55555555, %edi
        cmpl     $0x55555555, %edi
        jne     errexit

        movl    $0x55555555, %esi
        cmpl     $0x55555555, %esi
        jne     errexit

        movl    $0xAAAAAAAA, %eax
// movl    %eax, %ebx
        movl    %ebx, %ecx
        movl    %ecx, %edx
        movl    %edx, %edi
        movl    %edi, %esi
        cmpl     $0xAAAAAAAA, %esi
        jne     errexit

        movl    $0, %eax


        pushl   %esi
        pushl   %edi
        pushl   %edx
pushl   %ecx
        pushl   %ebx

movl %ebp, %esp


        popl    %ebp

        ret

errexit:
pushl   %esi
        pushl   %edi
        pushl   %edx
pushl   %ecx
        pushl   %ebx

movl %ebp, %esp
        movl    $1, %eax
        popl    %ebp


        ret

        .size   testrg, . - testrg



Строчки, на которых вылетает по SIGSEGV связанны с работай с регистром %ebx (они закомментированы).
В чем может быть причина?

Спасибо.
« Последнее редактирование: Января 31, 2018, 01:49:57 pm от talruns » Записан
talruns
Участник
*
Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #1 : Января 31, 2018, 02:58:36 pm »

Ну вроде поправила там, где ошиблась

Код:


.globl  testrg
.type   testrg, @function
.data
testrg:
        pushl   %ebp
        pushl   %ebx
        pushl   %ecx
        pushl   %edx
        pushl   %edi
        pushl   %esi

        movl    %esp, %ebp

        movl    $0, %eax       

        movl    $0x55555555, %eax
        cmpl    $0x55555555, %eax
        jne     errexit

        movl    $0x55555555, %ebx
        cmpl    $0x55555555, %ebx
        jne     errexit

        movl    $0x55555555, %edx
        cmpl    $0x55555555, %edx
        jne     errexit

        movl    $0x55555555, %edi
        cmpl    $0x55555555, %edi
        jne     errexit

        movl    $0x55555555, %esi
        cmpl    $0x55555555, %esi
        jne     errexit

        movl    $0xAAAAAAAA, %eax
        movl    %eax, %ebx
        movl    %ebx, %ecx
        movl    %ecx, %edx
        movl    %edx, %edi
        movl    %edi, %esi
        cmpl    $0xAAAAAAAA, %esi
        jne     errexit

        popl   %esi
        popl   %edi
        popl   %edx
        popl   %ecx

        popl   %ebx
        popl   %ebp

        movl    $0, %eax
        ret

errexit:
        movl    %ebp, %esp


        popl   %esi
        popl   %edi
        popl   %edx
        popl   %ecx

        popl   %ebx
        popl   %ebp

        movl    $1, %eax
        ret

        .size   testrg, . - testrg




« Последнее редактирование: Января 31, 2018, 03:45:54 pm от talruns » Записан
Страниц: [1]
  Печать  
 
Перейти в: