В веденной строке удалить пробелы, все строчные символы «а» заменить на прописные «А» - Assembler

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

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

В веденной строке удалить пробелы, все строчные символы «а» заменить на прописные «А» и вывести результирующую строку на экран.

Решение задачи: «В веденной строке удалить пробелы, все строчные символы «а» заменить на прописные «А»»

textual
Листинг программы
%include "io.inc"
 
section .data
    n   dd      10
 
section .bss
    String  resb 100
 
 
section .text
global CMAIN
CMAIN:
    mov ebp, esp; for correct debugging
    ;write your code here
 
    GET_STRING  String, 100
 
    lea esi,    [String]
    mov edi,    esi
    mov bl,     'A'
    .while:
        lodsb
        cmp al, ' '
        je  .next
        cmp al, 'a'
        cmove   eax,    ebx
        stosb
    .next:
        or  al, al
    jnz .while
    NEWLINE
    PRINT_STRING    String
    GET_CHAR al
    mov ebp, esp
    xor eax, eax
    ret

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

  1. Пролог программы: -%include io.inc — подключает файл с определениями ввода-вывода -section .data — определяет сегмент данных -section .bss — определяет сегмент буферов -section .text — определяет сегмент кода -global CMAIN — объявляет точку входа в программу
  2. Мидлэнд программы: -CMAIN: — метка точки входа -mov ebp, esp — устанавливает точку останова для отладчика -GET_STRING String, 100 - подключает ввод строки с помощью функции File$ReadString -lea esi, [String] — переводит указатель на строку в регистр ESI -mov edi, esi — переводит указатель на строку в регистр EDI -mov bl, 'A' — переводит символ 'A' в регистр BL
  3. Цикл удаления пробелов и замены строчных букв 'a' на прописные 'A': -.while: — метка цикла -lodsb — загружает байт из строки в регистр AL -cmp al, ' ' — сравнивает регистр AL со знаком пробела -je .next — если регистр AL содержит знак пробела, то переходит к следующему циклу -cmp al, 'a' — сравнивает регистр AL со знаком 'a' -cmove eax, ebx — если регистр AL содержит знак 'a', то заменяет его на 'A' и сохраняет в регистре EAX -stosb — записывает байт из регистра AL в строку
  4. Окончание программы: -or al, al — устанавливает флаг конца строки -jnz .while — если флаг конца строки не установлен, то продолжает цикл -NEWLINE — выводит символ новой строки -PRINT_STRING String — выводит строку с помощью функции File$WriteString -GET_CHAR al — считывает следующий символ ввода -mov ebp, esp — восстанавливает точку останова для отладчика -xor eax, eax — очищает регистр EAX -ret — завершает выполнение программы

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


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

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

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