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
3054
Уфа
Попробуйте порешать эту:
Последовательность $\{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
3054
Уфа

(Оффтоп)

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

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


04/05/09
4582

(Оффтоп)

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

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


01/08/06
3054
Уфа

(Оффтоп)

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

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


04/05/09
4582

(Оффтоп)

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
4582
Плохое решение.
Использует команды переходов, а можно обойтись без них.
К тому же можно обойтись только одним дополнительным регистром, а если аргумент не в 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
4582
Нет я не про это. Всё можно сделать гораздо компактнее и быстрее на 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  След.

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



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

Сейчас этот форум просматривают: Facebook External Hit [crawler]


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

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