Переворот слова и перевод его букв в верхний регистр - Assembler
Формулировка задачи:
Помогите написать программу, которая получит на вход hello world, а в итоге выведет DLROW OLLEG.
Решение задачи: «Переворот слова и перевод его букв в верхний регистр»
textual
Листинг программы
;nasm 2.10.9 section .data hello: db 'Hello world!',10 ; 'Hello world!' plus a linefeed character helloLen: equ $-hello ; Length of the 'Hello world!' string section .text global _start _start: mov ecx, hello regup: ;translating letters to top registers mov ah,[ecx] cmp ah,33 ; ascii 33 = "!" je exit ; je = (if = ) cmp ah,97 ; ascii 97 = "a" jb skip ; jb = (if < ) sub ah,32 ; + 32 Dec, A-Z=90 mov [ecx],ah skip: inc ecx jmp regup exit: mov ecx, hello swap: ; coup word mov ah,[ecx] cmp ah,0 je exit1 push ax inc ecx jmp swap exit1: mov ecx, hello call: ; call registers pop ax cmp [ecx],byte 0 je exit2 mov [ecx],ah inc ecx jmp call exit2 mov eax,4 ; The system call for write (sys_write) mov ebx,1 ; File descriptor 1 - standard output mov ecx,hello ; Put the offset of hello in ecx mov edx,helloLen ; helloLen is a constant, so we don't need to say ; mov edx,[helloLen] to get it's actual value int 80h ; Call the kernel mov eax,1 ; The system call for exit (sys_exit) mov ebx,0 ; Exit with return code of 0 (no error) int 80h;
Объяснение кода листинга программы
В этом коде выполняются следующие действия:
- Переворот слова:
- Строка
Hello world!
сохраняется в переменнойhello
. - Длина строки сохраняется в переменной
helloLen
. - Затем реализуется алгоритм, который переворачивает строку, используя два указателя, начинающиеся с каждого конца строки и двигающиеся к центру. Этот алгоритм сначала проверяет, является ли текущий символ регистрозависимым символом (буква), и если да, то преобразует его в верхний регистр.
- Строка
- Перевод букв в верхний регистр:
- Реализуется алгоритм, который проходит по каждому символу строки и проверяет, является ли он буквой. Если да, то он преобразуется в верхний регистр.
- Вывод перевернутой строки:
- Реализуется системный вызов
sys_write
для вывода перевернутой строки на стандартный вывод.
- Реализуется системный вызов
- Выход из программы:
- Реализуется системный вызов
sys_exit
для выхода из программы с кодом завершения 0, указывающим на отсутствие ошибок.
- Реализуется системный вызов
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д