Advertisement
VladimirKostovsky

Reverse String in Assembly

Nov 29th, 2023
1,427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. section .data
  2.     input_string db 'Hello, World!', 0  ; Ваша строка для чтения
  3.     output_string db 20 dup(0)            ; Буфер для перевернутой строки
  4.  
  5. section .text
  6.     global _start
  7.  
  8. _start:
  9.    ; Находим длину входной строки
  10.     mov ecx, 0
  11. find_length:
  12.     cmp byte [input_string + ecx], 0
  13.     je  reverse_string
  14.  
  15.     inc ecx
  16.     jmp find_length
  17.  
  18. reverse_string:
  19.    ; Начинаем обратный цикл
  20.     mov esi, ecx          ; esi - индекс конца строки
  21.     dec esi              ; уменьшаем на 1, чтобы получить последний символ строки
  22.     mov edi, 0           ; edi - индекс начала новой строки
  23.  
  24. reverse_loop:
  25.     cmp esi, 0           ; проверяем, достигли ли начала строки
  26.     jl  end_program
  27.  
  28.     ; Читаем символ из оригинальной строки
  29.     mov al, [input_string + esi]
  30.  
  31.     ; Сохраняем символ в новой строке
  32.     mov [output_string + edi], al
  33.  
  34.     ; Увеличиваем индексы
  35.     inc edi
  36.     dec esi
  37.  
  38.     ; Переходим к следующей итерации цикла
  39.     jmp reverse_loop
  40.  
  41. end_program:
  42.    ; Завершаем программу
  43.    ; Ваш код для вывода или дальнейших действий
  44.  
  45.     ; Прерывание для выхода из программы
  46.     mov eax, 1           ; код системного вызова для exit
  47.     xor ebx, ebx         ; код возврата 0
  48.     int 0x80             ; вызов системного прерывания
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement