Переворот слова и перевод его букв в верхний регистр - 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, указывающим на отсутствие ошибок.
- Реализуется системный вызов
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д