Переворот слова и перевод его букв в верхний регистр - 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;

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

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

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

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


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

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

12   голосов , оценка 3.667 из 5
Похожие ответы