section .bss
x resd 1
m resb 0
section .text
global _start
out:
mov ecx, 32 ;счетчик цикла
xor r8, r8 ;кол-во битов
xor edx, edx
mov ebx, 1 ;регистр для получения текущего разряда
shl ebx, 31
.again:
mov esi, eax
and esi, ebx ;берем старший разряд в числе
shr esi, 31 ;получаем первую цифру числа
add esi, 48 ;переводим в char
mov [edi], esi ;записываем разряд в память
shl eax, 1
inc edi
inc edx
;записали число в память
;добавление символа пробела в память
cmp edx, 8 ; проверка условия
jnz .endif
cmp ecx, 32
jz .endif
mov esi, 32 ;добавление пробела
mov [edi], esi
inc edi
inc r8
xor edx, edx ;обнуление счетчика
.endif:
inc r8 ;добавляем 1 к общей длине числа
dec ecx
cmp ecx, 0 ;проверка условия цикла
jnz .again
mov byte [edi], 10 ;добавляем в конце перевод строки
mov byte [edi+1], 0 ; добавляем символ конца строки
add r8, 2
mov eax, 1 ;вывод числа на экран
mov edi, 1
mov esi, m ;начиная с этого адреса
mov rdx, r8 ; столько символов
syscall ;системный вызов syswrite
ret
main:
xor r9, r9
.for1: ;основной цикл сортировки пузырьком
xor ecx, ecx
.for2:
;получаем первый байт
mov edx, 3
sub edx, ecx
push rax ;сохраняем значение rax чтобы не испортить его
mov eax, edx
xor edx, edx
mov r12, 8
mul r12
mov edx, eax
pop rax
mov edi, eax
push rcx
mov cl, dl
shr edi, cl
pop rcx
and edi, 0b11111111
;получаем второй байт
mov edx, 2
sub edx, ecx
push rax
mov eax, edx
xor edx, edx
mov r12, 8
mul r12
mov edx, eax
pop rax
mov esi, eax
push rcx
mov cl, dl
shr esi, cl
pop rcx
and esi, 0b11111111
xor edx, edx ;cnt1
.while1:
cmp edi, 0
jz .endwhile1
inc edx
mov r10, rdi
dec r10
and rdi, r10
jmp .while1
.endwhile1:
xor ebx, ebx ;cnt2
.while2:
cmp esi, 0
jz .endwhile2
inc ebx
mov r10, rsi
dec r10
and rsi, r10
jmp .while2
.endwhile2:
;Побитово переписваиваем байты
cmp ebx, edx ;сравниваем ранги байтов
jng .endif1 ;если сравнение <= не выполнено переходим в конец условия
mov edx, 3 ;вычисляем с какого значения надо стартовать цикл для смены битов в байте
sub edx, ecx
push rax
mov eax, edx
xor edx, edx
mov r12, 8
mul r12
mov edx, eax
pop rax
mov r10, rdx ;счетчик цикла
mov r11, r10 ;цикл выполняется пока счетчик меньше этого значения
add r11, 8
.for3:
mov rsi, r10 ;получаем номера двух битов, n1
mov rdi, r10 ;n2
sub rdi, 8
mov ebx, eax ;получаем бит с номером n1
push rcx
mov ecx, esi
shr ebx, cl
pop rcx
mov edx, ebx
mov ebx, eax ;получаем бит с номером n2
push rcx
mov ecx, edi
shr ebx, cl
pop rcx
and edx, 1 ;получаем значение нужного бита
and ebx, 1
cmp edx, ebx ;условия того что два бита не равны
jz .endif3
mov ebx, 1 ;вычисляем смещение для инвертирования значения бита 1
push rcx
mov ecx, esi
shl ebx, cl
pop rcx
mov edx, ebx
mov ebx, 1 ;вычисляем смещение для инвертирования значения бита 2
push rcx
mov ecx, edi
shl ebx, cl
pop rcx
xor eax, edx ;инвертируем биты если они не равны
xor eax, ebx
.endif3:
inc r10
cmp r10, r11 ;проверка условия for3
jnz .for3
.endif1:
inc ecx
cmp ecx, 3 ;проверка условия for2
jnz .for2
inc r9
cmp r9, 3 ;проверка условия for1
jnz .for1
ret
_start:
rdtsc
mov[x], eax
mov eax, [x]
mov edi, m
call out
mov eax, [x]
call main
mov edi, m
call out
mov eax, 60
xor edi, edi
syscall
c2VjdGlvbiAuYnNzCgp4IHJlc2QgMQoKbSByZXNiIDAKCnNlY3Rpb24gLnRleHQKCmdsb2JhbCBfc3RhcnQKCm91dDoKCm1vdiBlY3gsIDMyIDvRgdGH0LXRgtGH0LjQuiDRhtC40LrQu9CwCgp4b3IgcjgsIHI4IDvQutC+0Lst0LLQviDQsdC40YLQvtCyCgp4b3IgZWR4LCBlZHgKCm1vdiBlYngsIDEgO9GA0LXQs9C40YHRgtGAINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0YLQtdC60YPRidC10LPQviDRgNCw0LfRgNGP0LTQsAoKc2hsIGVieCwgMzEKCi5hZ2FpbjoKCm1vdiBlc2ksIGVheAoKYW5kIGVzaSwgZWJ4IDvQsdC10YDQtdC8INGB0YLQsNGA0YjQuNC5INGA0LDQt9GA0Y/QtCDQsiDRh9C40YHQu9C1CgpzaHIgZXNpLCAzMSA70L/QvtC70YPRh9Cw0LXQvCDQv9C10YDQstGD0Y4g0YbQuNGE0YDRgyDRh9C40YHQu9CwCgphZGQgZXNpLCA0OCA70L/QtdGA0LXQstC+0LTQuNC8INCyIGNoYXIKCm1vdiBbZWRpXSwgZXNpIDvQt9Cw0L/QuNGB0YvQstCw0LXQvCDRgNCw0LfRgNGP0LQg0LIg0L/QsNC80Y/RgtGMCgpzaGwgZWF4LCAxCgppbmMgZWRpCgppbmMgZWR4Cgo70LfQsNC/0LjRgdCw0LvQuCDRh9C40YHQu9C+INCyINC/0LDQvNGP0YLRjAoKO9C00L7QsdCw0LLQu9C10L3QuNC1INGB0LjQvNCy0L7Qu9CwINC/0YDQvtCx0LXQu9CwINCyINC/0LDQvNGP0YLRjAoKY21wIGVkeCwgOCA7INC/0YDQvtCy0LXRgNC60LAg0YPRgdC70L7QstC40Y8KCmpueiAuZW5kaWYKCmNtcCBlY3gsIDMyCgpqeiAuZW5kaWYKCm1vdiBlc2ksIDMyIDvQtNC+0LHQsNCy0LvQtdC90LjQtSDQv9GA0L7QsdC10LvQsAoKbW92IFtlZGldLCBlc2kKCmluYyBlZGkKCmluYyByOAoKeG9yIGVkeCwgZWR4IDvQvtCx0L3Rg9C70LXQvdC40LUg0YHRh9C10YLRh9C40LrQsAoKLmVuZGlmOgoKaW5jIHI4IDvQtNC+0LHQsNCy0LvRj9C10LwgMSDQuiDQvtCx0YnQtdC5INC00LvQuNC90LUg0YfQuNGB0LvQsAoKZGVjIGVjeAoKY21wIGVjeCwgMCA70L/RgNC+0LLQtdGA0LrQsCDRg9GB0LvQvtCy0LjRjyDRhtC40LrQu9CwCgpqbnogLmFnYWluCgptb3YgYnl0ZSBbZWRpXSwgMTAgO9C00L7QsdCw0LLQu9GP0LXQvCDQsiDQutC+0L3RhtC1INC/0LXRgNC10LLQvtC0INGB0YLRgNC+0LrQuAoKbW92IGJ5dGUgW2VkaSsxXSwgMCA7INC00L7QsdCw0LLQu9GP0LXQvCDRgdC40LzQstC+0Lsg0LrQvtC90YbQsCDRgdGC0YDQvtC60LgKCmFkZCByOCwgMgoKbW92IGVheCwgMSA70LLRi9Cy0L7QtCDRh9C40YHQu9CwINC90LAg0Y3QutGA0LDQvQoKbW92IGVkaSwgMQoKbW92IGVzaSwgbSA70L3QsNGH0LjQvdCw0Y8g0YEg0Y3RgtC+0LPQviDQsNC00YDQtdGB0LAKCm1vdiByZHgsIHI4IDsg0YHRgtC+0LvRjNC60L4g0YHQuNC80LLQvtC70L7QsgoKc3lzY2FsbCA70YHQuNGB0YLQtdC80L3Ri9C5INCy0YvQt9C+0LIgc3lzd3JpdGUKCnJldAoKbWFpbjoKCnhvciByOSwgcjkKCi5mb3IxOiA70L7RgdC90L7QstC90L7QuSDRhtC40LrQuyDRgdC+0YDRgtC40YDQvtCy0LrQuCDQv9GD0LfRi9GA0YzQutC+0LwKCnhvciBlY3gsIGVjeAoKLmZvcjI6Cgo70L/QvtC70YPRh9Cw0LXQvCDQv9C10YDQstGL0Lkg0LHQsNC50YIKCm1vdiBlZHgsIDMKCnN1YiBlZHgsIGVjeAoKcHVzaCByYXggO9GB0L7RhdGA0LDQvdGP0LXQvCDQt9C90LDRh9C10L3QuNC1IHJheCDRh9GC0L7QsdGLINC90LUg0LjRgdC/0L7RgNGC0LjRgtGMINC10LPQvgoKbW92IGVheCwgZWR4Cgp4b3IgZWR4LCBlZHgKCm1vdiByMTIsIDgKCm11bCByMTIKCm1vdiBlZHgsIGVheAoKcG9wIHJheAoKbW92IGVkaSwgZWF4CgpwdXNoIHJjeAoKbW92IGNsLCBkbAoKc2hyIGVkaSwgY2wKCnBvcCByY3gKCmFuZCBlZGksIDBiMTExMTExMTEKCjvQv9C+0LvRg9GH0LDQtdC8INCy0YLQvtGA0L7QuSDQsdCw0LnRggoKbW92IGVkeCwgMgoKc3ViIGVkeCwgZWN4CgpwdXNoIHJheAoKbW92IGVheCwgZWR4Cgp4b3IgZWR4LCBlZHgKCm1vdiByMTIsIDgKCm11bCByMTIKCm1vdiBlZHgsIGVheAoKcG9wIHJheAoKbW92IGVzaSwgZWF4CgpwdXNoIHJjeAoKbW92IGNsLCBkbAoKc2hyIGVzaSwgY2wKCnBvcCByY3gKCmFuZCBlc2ksIDBiMTExMTExMTEKCnhvciBlZHgsIGVkeCA7Y250MQoKLndoaWxlMToKCmNtcCBlZGksIDAKCmp6IC5lbmR3aGlsZTEKCmluYyBlZHgKCm1vdiByMTAsIHJkaQoKZGVjIHIxMAoKYW5kIHJkaSwgcjEwCgpqbXAgLndoaWxlMQoKLmVuZHdoaWxlMToKCnhvciBlYngsIGVieCA7Y250MgoKLndoaWxlMjoKCmNtcCBlc2ksIDAKCmp6IC5lbmR3aGlsZTIKCmluYyBlYngKCm1vdiByMTAsIHJzaQoKZGVjIHIxMAoKYW5kIHJzaSwgcjEwCgpqbXAgLndoaWxlMgoKLmVuZHdoaWxlMjoKCjvQn9C+0LHQuNGC0L7QstC+INC/0LXRgNC10L/QuNGB0LLQsNC40LLQsNC10Lwg0LHQsNC50YLRiwoKY21wIGVieCwgZWR4IDvRgdGA0LDQstC90LjQstCw0LXQvCDRgNCw0L3Qs9C4INCx0LDQudGC0L7QsgoKam5nIC5lbmRpZjEgO9C10YHQu9C4INGB0YDQsNCy0L3QtdC90LjQtSA8PSDQvdC1INCy0YvQv9C+0LvQvdC10L3QviDQv9C10YDQtdGF0L7QtNC40Lwg0LIg0LrQvtC90LXRhiDRg9GB0LvQvtCy0LjRjwoKbW92IGVkeCwgMyA70LLRi9GH0LjRgdC70Y/QtdC8INGBINC60LDQutC+0LPQviDQt9C90LDRh9C10L3QuNGPINC90LDQtNC+INGB0YLQsNGA0YLQvtCy0LDRgtGMINGG0LjQutC7INC00LvRjyDRgdC80LXQvdGLINCx0LjRgtC+0LIg0LIg0LHQsNC50YLQtQoKc3ViIGVkeCwgZWN4CgpwdXNoIHJheAoKbW92IGVheCwgZWR4Cgp4b3IgZWR4LCBlZHgKCm1vdiByMTIsIDgKCm11bCByMTIKCm1vdiBlZHgsIGVheAoKcG9wIHJheAoKbW92IHIxMCwgcmR4IDvRgdGH0LXRgtGH0LjQuiDRhtC40LrQu9CwCgptb3YgcjExLCByMTAgO9GG0LjQutC7INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L/QvtC60LAg0YHRh9C10YLRh9C40Log0LzQtdC90YzRiNC1INGN0YLQvtCz0L4g0LfQvdCw0YfQtdC90LjRjwoKYWRkIHIxMSwgOAoKLmZvcjM6Cgptb3YgcnNpLCByMTAgO9C/0L7Qu9GD0YfQsNC10Lwg0L3QvtC80LXRgNCwINC00LLRg9GFINCx0LjRgtC+0LIsIG4xCgptb3YgcmRpLCByMTAgO24yCgpzdWIgcmRpLCA4Cgptb3YgZWJ4LCBlYXggO9C/0L7Qu9GD0YfQsNC10Lwg0LHQuNGCINGBINC90L7QvNC10YDQvtC8IG4xCgpwdXNoIHJjeAoKbW92IGVjeCwgZXNpCgpzaHIgZWJ4LCBjbAoKcG9wIHJjeAoKbW92IGVkeCwgZWJ4Cgptb3YgZWJ4LCBlYXggO9C/0L7Qu9GD0YfQsNC10Lwg0LHQuNGCINGBINC90L7QvNC10YDQvtC8IG4yCgpwdXNoIHJjeAoKbW92IGVjeCwgZWRpCgpzaHIgZWJ4LCBjbAoKcG9wIHJjeAoKYW5kIGVkeCwgMSA70L/QvtC70YPRh9Cw0LXQvCDQt9C90LDRh9C10L3QuNC1INC90YPQttC90L7Qs9C+INCx0LjRgtCwCgphbmQgZWJ4LCAxCgpjbXAgZWR4LCBlYnggO9GD0YHQu9C+0LLQuNGPINGC0L7Qs9C+INGH0YLQviDQtNCy0LAg0LHQuNGC0LAg0L3QtSDRgNCw0LLQvdGLCgpqeiAuZW5kaWYzCgptb3YgZWJ4LCAxIDvQstGL0YfQuNGB0LvRj9C10Lwg0YHQvNC10YnQtdC90LjQtSDQtNC70Y8g0LjQvdCy0LXRgNGC0LjRgNC+0LLQsNC90LjRjyDQt9C90LDRh9C10L3QuNGPINCx0LjRgtCwIDEKCnB1c2ggcmN4Cgptb3YgZWN4LCBlc2kKCnNobCBlYngsIGNsCgpwb3AgcmN4Cgptb3YgZWR4LCBlYngKCm1vdiBlYngsIDEgO9Cy0YvRh9C40YHQu9GP0LXQvCDRgdC80LXRidC10L3QuNC1INC00LvRjyDQuNC90LLQtdGA0YLQuNGA0L7QstCw0L3QuNGPINC30L3QsNGH0LXQvdC40Y8g0LHQuNGC0LAgMgoKcHVzaCByY3gKCm1vdiBlY3gsIGVkaQoKc2hsIGVieCwgY2wKCnBvcCByY3gKCnhvciBlYXgsIGVkeCA70LjQvdCy0LXRgNGC0LjRgNGD0LXQvCDQsdC40YLRiyDQtdGB0LvQuCDQvtC90Lgg0L3QtSDRgNCw0LLQvdGLCgp4b3IgZWF4LCBlYngKCi5lbmRpZjM6CgppbmMgcjEwCgpjbXAgcjEwLCByMTEgO9C/0YDQvtCy0LXRgNC60LAg0YPRgdC70L7QstC40Y8gZm9yMwoKam56IC5mb3IzCgouZW5kaWYxOgoKaW5jIGVjeAoKY21wIGVjeCwgMyA70L/RgNC+0LLQtdGA0LrQsCDRg9GB0LvQvtCy0LjRjyBmb3IyCgpqbnogLmZvcjIKCmluYyByOQoKY21wIHI5LCAzIDvQv9GA0L7QstC10YDQutCwINGD0YHQu9C+0LLQuNGPIGZvcjEKCmpueiAuZm9yMQoKcmV0Cgpfc3RhcnQ6CgpyZHRzYwoKbW92W3hdLCBlYXgKCm1vdiBlYXgsIFt4XQoKbW92IGVkaSwgbQoKY2FsbCBvdXQKCm1vdiBlYXgsIFt4XQoKY2FsbCBtYWluCgptb3YgZWRpLCBtCgpjYWxsIG91dAoKbW92IGVheCwgNjAKCnhvciBlZGksIGVkaQoKc3lzY2FsbA==