;
; NASM 2.14 x64
;
SECTION .data
happy: db '! yaD sremmargorP yppaH', 0xA
happyLen: equ $-happy
SECTION .text
GLOBAL _start
_start:
mov rcx, happyLen
mov rax, happy
mov rsi, rax ; rsi на первый символ строки
add rax, rcx ;
mov rdi, rax ;
sub rdi, 2 ; rdi на последний символ строки, не считая перевода строки
shr rcx, 1 ; rcx половина длины строки
reverseLoop:
mov al, [rsi] ; грузим символы
mov bl, [rdi] ;
mov [rsi], bl ; обмениваем
mov [rdi], al ;
inc rsi ; корректируем указатели
dec rdi ;
dec rcx ; корректируем счетчик цикла
jnz reverseLoop
; Печатаем
mov rax,4 ; системный вызов 4 ('write')
mov rbx,1 ; файловый дискриптор 1 (STDOUT)
mov rcx,happy ; строка вывода
mov rdx,happyLen ; длина строки
int 80h ; системный вызов ядра
; Завершение
mov rax,1 ; системный вызов 1 ('exit')
mov rbx,0 ; код выхода 0
int 80h ; системный вызов ядра
Owo7IE5BU00gMi4xNCB4NjQKOwoKU0VDVElPTiAuZGF0YQogIGhhcHB5OiAgICAgZGIgJyEgeWFEIHNyZW1tYXJnb3JQIHlwcGFIJywgMHhBCiAgaGFwcHlMZW46ICBlcXUgJC1oYXBweQoKU0VDVElPTiAudGV4dAogIEdMT0JBTCBfc3RhcnQgCgpfc3RhcnQ6CiAgbW92IHJjeCwgaGFwcHlMZW4KICBtb3YgcmF4LCBoYXBweQogIG1vdiByc2ksIHJheCAgICAgOyByc2kg0L3QsCDQv9C10YDQstGL0Lkg0YHQuNC80LLQvtC7INGB0YLRgNC+0LrQuAogIGFkZCByYXgsIHJjeCAgICAgOwogIG1vdiByZGksIHJheCAgICAgOwogIHN1YiByZGksIDIgICAgICAgOyByZGkg0L3QsCDQv9C+0YHQu9C10LTQvdC40Lkg0YHQuNC80LLQvtC7INGB0YLRgNC+0LrQuCwg0L3QtSDRgdGH0LjRgtCw0Y8g0L/QtdGA0LXQstC+0LTQsCDRgdGC0YDQvtC60LgKICBzaHIgcmN4LCAxICAgICAgIDsgcmN4INC/0L7Qu9C+0LLQuNC90LAg0LTQu9C40L3RiyDRgdGC0YDQvtC60LgKCnJldmVyc2VMb29wOgoKICBtb3YgYWwsIFtyc2ldICAgIDsg0LPRgNGD0LfQuNC8INGB0LjQvNCy0L7Qu9GLCiAgbW92IGJsLCBbcmRpXSAgICA7CiAgbW92IFtyc2ldLCBibCAgICA7INC+0LHQvNC10L3QuNCy0LDQtdC8CiAgbW92IFtyZGldLCBhbCAgICA7CiAgaW5jIHJzaSAgICAgICAgICA7INC60L7RgNGA0LXQutGC0LjRgNGD0LXQvCDRg9C60LDQt9Cw0YLQtdC70LgKICBkZWMgcmRpICAgICAgICAgIDsKICBkZWMgcmN4ICAgICAgICAgIDsg0LrQvtGA0YDQtdC60YLQuNGA0YPQtdC8INGB0YfQtdGC0YfQuNC6INGG0LjQutC70LAKICBqbnogcmV2ZXJzZUxvb3AKCiAgOyDQn9C10YfQsNGC0LDQtdC8CgogIG1vdiByYXgsNCAgICAgICAgOyDRgdC40YHRgtC10LzQvdGL0Lkg0LLRi9C30L7QsiA0ICgnd3JpdGUnKQogIG1vdiByYngsMSAgICAgICAgOyDRhNCw0LnQu9C+0LLRi9C5INC00LjRgdC60YDQuNC/0YLQvtGAIDEgKFNURE9VVCkKICBtb3YgcmN4LGhhcHB5ICAgIDsg0YHRgtGA0L7QutCwINCy0YvQstC+0LTQsAogIG1vdiByZHgsaGFwcHlMZW4gOyDQtNC70LjQvdCwINGB0YLRgNC+0LrQuAogIGludCA4MGggICAgICAgICAgOyDRgdC40YHRgtC10LzQvdGL0Lkg0LLRi9C30L7QsiDRj9C00YDQsAoKICA7INCX0LDQstC10YDRiNC10L3QuNC1CgogIG1vdiByYXgsMSAgICAgICAgOyDRgdC40YHRgtC10LzQvdGL0Lkg0LLRi9C30L7QsiAxICgnZXhpdCcpCiAgbW92IHJieCwwICAgICAgICA7INC60L7QtCDQstGL0YXQvtC00LAgMAogIGludCA4MGggICAgICAgICAgOyDRgdC40YHRgtC10LzQvdGL0Lkg0LLRi9C30L7QsiDRj9C00YDQsA==