У нас было задание, в котором нам пришлось написать гипотезу collatz в 64-битной сборке nasm с 13 командами или меньше (включен RET). Теперь мы задаемся вопросом, насколько вы действительно можете его уменьшить. Мы в настоящее время 9
Херес Коллатца гипотеза в псевдокоде для справки:Конкуренция Collatz в кратчайшей форме сборки
Heres код, который мы имеем до сих пор. Несколько примечаний:
Наставник из нас сказал, что мы можем удалить XOR rax, rax из-за какого-то соглашения о вызове, что он уже равен нулю. Это не работает на моем компьютере, хотя я включил его здесь.
Я знаю, что два LEA, вероятно, являются наиболее очевидными для сокращения, но мы не можем придумать способ, так как * 6, кажется, единственное, что буквально невозможно сделать с LEA.
GLOBAL collatz
SECTION .text
collatz:
XOR rax, rax
.while:
SHR rdi, 1
JNC .even
LEA rdi, [rdi*2+1]
LEA rdi, [rdi*2+rdi+1]
.even:
INC rax
CMP rdi, 1
JA .while
RET
Не спам-теги! И какова ваша ** конкретная ** проблема? – Olaf
Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что это действительно более «кодовый гольф». –
@ DavidHoelzer ah Я не понимал, что это не разрешено, так как его техническая разрешимость. Где вы рекомендуете это задавать? – nn3112337