Поиск:

Ответ в темуСоздание новой темы Создание опроса
> При чем тут %rip ? 
:(
    Опции темы
delgado
Дата 22.11.2011, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.10.2011

Репутация: нет
Всего: нет



Всем доброго времени суток.

Я хотел бы познакомится с ассемблером, но по ходу столкнулся с одной проблемой:

у меня есть файл primes.s:

Код

.altmacro
.arch i386
.code32
.data

j:
    .long 0
k:
    .long 0
n: 
    .long 10
eol:
    .long 16
.section .bss
    .set PRIME_LENGTH,500 
    .set OUT_BUF_LENGTH,10
prime:
    .space  PRIME_LENGTH*4    
out_buf:
    .space  OUT_BUF_LENGTH

.macro print_string str,str_size
    movl $4,%eax
    movl $1,%ebx
    movl \str,%ecx
    movl \str_size,%edx
    int $0x80
.endm

.macro print_long 
    LOCAL div10 
    movl out_buf, %ecx
    
    decl %ecx
    /* movl \input,%eax */

div10:    
    movl $10,%ebx
    movl $0 ,%edx
    divl %ebx   
    addl $48,%edx
    mov %dl,out_buf(%ecx)
    decl %ecx
    cmpl $0,(%edx)
    jne div10
    movl $OUT_BUF_LENGTH,%edx
    sub %ecx,%edx
    leal out_buf(%ecx),%ecx
    movl $4,%eax
    movl $1,%ebx
    int $0x80
.endm
 
.text 
.globl main
main:
    movl $n,%eax
    movl $3,(%eax)
    movl $j,%eax
    movl $1,(%eax)
    movl $1,%ecx
    movl $2,prime(,%ecx,4)

prime_number:
/*----V Это здесь----------*/    
        incl j
    movl j,%ecx
    movl n,%eax
    movl %eax,prime(,%ecx,4) 

    cmpl $PRIME_LENGTH,j
    jna print_values

next_prime_candidate:
    add $2,n
    movl $2,k

check_rem:
    movl k,%ecx
    leal prime(,%ecx,4),%ebx
    movl $0,%edx
    movl n ,%eax
    divl (%ebx)
    cmpl $0,%eax
    je next_prime_candidate
    cmpl (%ebx),%edx
    jl prime_number
    incl k
    jmp check_rem

    movl $0, %ecx

print_values:
    
    pushl %ecx
    movl prime(,%ecx,4),%eax
    print_long 
    print_string eol,$1
    popl %ecx
    cmp $PRIME_LENGTH,%ecx
    jge exit
    incl %ecx
    jmp print_values

exit:
    movl $1 ,%eax
    movl $0,%ebx
    int $0x80

    
В строке 66 по задумке переменная j должна увеличиться на 1, но вместо этого вылетает segmentation fault
когда я смотрю этот участок кода под отладчиком и дизассемблирую его, то выходит:
Код


=> 0x00000000004004ba <+0>:    incl   0x601200(%rip)        # 0xa016c0
   0x00000000004004c0 <+6>:    mov    0x601200(%rip),%ecx        # 0xa016c6
   0x00000000004004c6 <+12>:    movabs 0x208d048900601208,%eax
   0x00000000004004cf <+21>:    adc    0x0(%rax),%ah
   0x00000000004004d2 <+24>:    cmpl   $0x1f4,0x601200(%rip)        # 0xa016dc
   0x00000000004004dc <+34>:    jbe    0x40051e <print_values>


Пожалуйста объясните что здесь делает этот %rip регистр и как сделать так, чтобы адресация была прямой без этого регистра.
    







PM MAIL   Вверх
500mhz
Дата 24.11.2011, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



может вам начать с 16 разрядных вариантов под мсдос?


--------------------

PM MAIL ICQ   Вверх
delgado
Дата 24.11.2011, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.10.2011

Репутация: нет
Всего: нет



Цитата

может вам начать с 16 разрядных вариантов под мсдос?

Линукс как-то ближе )
И мне кажется, что начинать  программировать под сегментную модель памяти тяжелее, чем плоскую.
С опцией .code16 ассемблируется верно, но мне все таки хочется разобраться что я сделал не так.

 
PM MAIL   Вверх
500mhz
Дата 24.11.2011, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



мне как то непонятно у вас сорец 32 разрадный, а дебуг 64.
а RIP при том что в 64 разрядном варианте все обращения к памяти релативные по rip


--------------------

PM MAIL ICQ   Вверх
delgado
Дата 25.11.2011, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.10.2011

Репутация: нет
Всего: нет



Мне непонятно тоже )
У меня 64 разрядами даже и не пахнет.
Все делаю очень просто 
Код

as -g -o primes.0 primes.s
ld -o primes primes.o 


Система: Linux  3.0-ARCH  x86_64 Intel® Celeron® CPU 2.66GHz

Я вот подумал может as по умолчанию в моей системе генерит 64 - битный код? Как тогда можно подавить настройки?
PM MAIL   Вверх
500mhz
Дата 25.11.2011, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



Цитата

0x00000000004004ba

что то мне подсказывает что это не 32 разрядный адрес )))
как в прочем и это - movabs 0x208d048900601208,%eax

мой вам совет, 
ставьте fasm под линюх и отладчик с INTEL ситаксисом, отпадет куча вопросов сразу



--------------------

PM MAIL ICQ   Вверх
delgado
Дата 25.11.2011, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.10.2011

Репутация: нет
Всего: нет



Спасибо, кажется разобрался, дело не в as  а в системе - по ходу у меня платформа x86-64, ну или система так думает )
Чтоб собрать правильно, нужно ковырять опции as и ld.  Жаль fasm в репах к arch нет - придется качнуть отдельно (



Это сообщение отредактировал(а) delgado - 25.11.2011, 22:37
PM MAIL   Вверх
500mhz
Дата 26.11.2011, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



мне вообще не понятно как as что то скомпилировал, он же вроде интел синтакс не понимает


--------------------

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.