2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Кто знает задачки по ассемблеру (x86)?
Сообщение14.10.2010, 15:52 
Аватара пользователя


01/04/10
910
Привет.

Хочется порешать задачки по ассемблеру для платформы x86 желательно под *nix?

То есть я ищу наподобие вот этого (в своё время досконально решил все кроме пары штук), только для ассемблера.

P.S. Не надо спрашивать меня зачем мне ассемблер, сердцу не прикажешь :-)

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение14.10.2010, 18:22 
Заслуженный участник
Аватара пользователя


07/01/10
2015
На форуме wasm.ru (не знаю, существует ли он сейчас) раньше была серия тем "Мелкие задачки для крупных мозгов". Там давалась какая-то очень элементарная задача и её надо было решить, затратив минимум байтов; вначале давались какие-то тривиальные попытки, а к концу темы уже были супер-дзенские решения. В общем, советую поискать.

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение15.10.2010, 08:04 


07/02/10
7
Магда Ю. Ассемблер для процессоров Intel Pentium

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение15.10.2010, 15:07 
Заслуженный участник
Аватара пользователя


01/08/06
2868
Уфа
Попробуйте порешать эту:
Последовательность $\{a_n\}$ строится следующим образом:
1) $a_0=0$.
2) Последовательность $a_{m}, \dots, a_{2m-1}$ получается из последовательности $a_0, \dots, a_{m-1}$ путём замены всех 0 на 1, а всех 1 на 0 ($m=2^k$).
Получается такая последовательность: 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, ...

Напишите по возможности наиболее короткую функцию, принимающую на входе n (в eax) и возвращающую в том же регистре $a_n$.

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение15.10.2010, 18:38 
Аватара пользователя


01/04/10
910
Обязательно решу эту задачу. Занёс в свой список TODO.

Просьба тем, кто может выложить решение этой задачи скрыть решение в оффтопик.

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение16.10.2010, 10:27 


16/06/10
199

(Оффтоп)

Используется синтаксис ASM
parity_odd proc near
    or     eax, eax
    setnp  al
    movzx  eax, al
    ret
parity_odd endp

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение16.10.2010, 13:12 
Заслуженный участник
Аватара пользователя


01/08/06
2868
Уфа

(Оффтоп)

lim0n, браво!
Однако тут есть подводный камень... Функция перестаёт правильно работать при eax>=256

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение16.10.2010, 16:09 
Заслуженный участник


04/05/09
4546

(Оффтоп)

worm2 в сообщении #362686 писал(а):
lim0n, браво!
Однако тут есть подводный камень... Функция перестаёт правильно работать при eax>=256
Почему Вы так решили?

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение16.10.2010, 19:59 
Заслуженный участник
Аватара пользователя


01/08/06
2868
Уфа

(Оффтоп)

Я запустил и проверил результат :D $a_{256}=1$, а программа выдаёт 0.
Зверская задачка, да? :twisted:

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение16.10.2010, 20:52 
Заслуженный участник


04/05/09
4546

(Оффтоп)

worm2 в сообщении #362772 писал(а):
Я запустил и проверил результат :D $a_{256}=1$, а программа выдаёт 0.
Зверская задачка, да? :twisted:
Да, действительно. Флаг чётности так редко используют, что я забыл, что он показывает чётность только младшего байта результата.

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение18.10.2010, 06:48 


16/06/10
199

(Оффтоп)

Используется синтаксис ASM
parity_odd proc near
    mov    dl, 0
    mov    ecx, 4
    or     eax, eax
@@: setnp  dh
    xor    dl, dh
    shr    eax, 8
    loopnz @b
    mov    al, dl
    ret
parity_odd endp

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение18.10.2010, 17:27 
Заслуженный участник


04/05/09
4546
Плохое решение.
Использует команды переходов, а можно обойтись без них.
К тому же можно обойтись только одним дополнительным регистром, а если аргумент не в eax, то и вовсе без дополнительных регистров, кроме eax.

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение19.10.2010, 07:07 


16/06/10
199

(Оффтоп)

venco в сообщении #363280 писал(а):
Плохое решение.
Специально привёл пример кода, который будет работать даже на 80386. Конечно для любителей можно и поэкзотичнее:
Используется синтаксис ASM
parity_odd proc
    popcnt eax, eax
    and    eax, 1
    ret
parity_odd endp
Работоспособность проверить не могу по причине "древности" hardware (даже библиотека GeSHi 1.0.8.4 не знает такой инструкции :-) ).

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение19.10.2010, 13:38 
Заслуженный участник


04/05/09
4546
Нет я не про это. Всё можно сделать гораздо компактнее и быстрее на 386-ом.

 Профиль  
                  
 
 Re: Кто знает задачки по ассемблеру (x86)?
Сообщение20.10.2010, 12:23 


16/06/10
199

(Оффтоп)

Действительно, зачем считать биты?
Используется синтаксис ASM
parity_odd proc
    mov    edx, eax
    shr    eax, 16
    xor    eax, edx
    xor    al, ah
    setnp  al
    and    eax, 1
    ret
parity_odd endp

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group