Переворот слова и перевод его букв в верхний регистр - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите написать программу, которая получит на вход hello world, а в итоге выведет DLROW OLLEG.

Решение задачи: «Переворот слова и перевод его букв в верхний регистр»

textual
Листинг программы
  1. ;nasm 2.10.9
  2.  
  3.  section .data
  4. hello:     db 'Hello world!',10    ; 'Hello world!' plus a linefeed character
  5. helloLen:  equ $-hello             ; Length of the 'Hello world!' string
  6.  
  7. section .text
  8.     global _start
  9.  
  10. _start:
  11. mov ecx, hello
  12.     regup:                         ;translating letters to top registers
  13.         mov ah,[ecx]
  14.         cmp ah,33                       ; ascii 33 = "!"
  15.             je exit                     ; je = (if = )
  16.         cmp ah,97                       ; ascii 97 = "a"
  17.             jb skip                     ; jb = (if < )
  18.             sub ah,32                   ; + 32 Dec, A-Z=90
  19.             mov [ecx],ah
  20.         skip:
  21.         inc ecx
  22.         jmp regup
  23.         exit:
  24.    
  25.     mov ecx, hello
  26.    
  27.     swap:                                ; coup word
  28.         mov ah,[ecx]
  29.         cmp ah,0
  30.             je exit1
  31.         push ax
  32.         inc ecx
  33.         jmp swap
  34.         exit1:
  35.    
  36.     mov ecx, hello
  37.    
  38.     call:                                ; call registers
  39.         pop ax
  40.         cmp [ecx],byte 0
  41.             je exit2
  42.         mov [ecx],ah
  43.         inc ecx
  44.         jmp call
  45.         exit2
  46.    
  47.    
  48.     mov eax,4            ; The system call for write (sys_write)
  49.     mov ebx,1            ; File descriptor 1 - standard output
  50.     mov ecx,hello        ; Put the offset of hello in ecx
  51.     mov edx,helloLen     ; helloLen is a constant, so we don't need to say
  52.                          ;  mov edx,[helloLen] to get it's actual value
  53.     int 80h              ; Call the kernel
  54.  
  55.     mov eax,1            ; The system call for exit (sys_exit)
  56.     mov ebx,0            ; Exit with return code of 0 (no error)
  57.     int 80h;

Объяснение кода листинга программы

В этом коде выполняются следующие действия:

  1. Переворот слова:
    • Строка Hello world! сохраняется в переменной hello.
    • Длина строки сохраняется в переменной helloLen.
    • Затем реализуется алгоритм, который переворачивает строку, используя два указателя, начинающиеся с каждого конца строки и двигающиеся к центру. Этот алгоритм сначала проверяет, является ли текущий символ регистрозависимым символом (буква), и если да, то преобразует его в верхний регистр.
  2. Перевод букв в верхний регистр:
    • Реализуется алгоритм, который проходит по каждому символу строки и проверяет, является ли он буквой. Если да, то он преобразуется в верхний регистр.
  3. Вывод перевернутой строки:
    • Реализуется системный вызов sys_write для вывода перевернутой строки на стандартный вывод.
  4. Выход из программы:
    • Реализуется системный вызов sys_exit для выхода из программы с кодом завершения 0, указывающим на отсутствие ошибок.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы