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

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




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

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

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

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

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

 Re: Кто знает задачки по ассемблеру (x86)?
Магда Ю. Ассемблер для процессоров Intel Pentium

 Re: Кто знает задачки по ассемблеру (x86)?
Аватара пользователя
Попробуйте порешать эту:
Последовательность $\{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)?
Аватара пользователя
Обязательно решу эту задачу. Занёс в свой список TODO.

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

 Re: Кто знает задачки по ассемблеру (x86)?

(Оффтоп)

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

 Re: Кто знает задачки по ассемблеру (x86)?
Аватара пользователя

(Оффтоп)

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

 Re: Кто знает задачки по ассемблеру (x86)?

(Оффтоп)

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

 Re: Кто знает задачки по ассемблеру (x86)?
Аватара пользователя

(Оффтоп)

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

 Re: Кто знает задачки по ассемблеру (x86)?

(Оффтоп)

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

 Re: Кто знает задачки по ассемблеру (x86)?

(Оффтоп)

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

 Re: Кто знает задачки по ассемблеру (x86)?

(Оффтоп)

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)?
Нет я не про это. Всё можно сделать гораздо компактнее и быстрее на 386-ом.

 Re: Кто знает задачки по ассемблеру (x86)?

(Оффтоп)

Действительно, зачем считать биты?
Используется синтаксис 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  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group