В веденной строке удалить пробелы, все строчные символы «а» заменить на прописные «А» - 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
Объяснение кода листинга программы
- Пролог программы:
-%include
io.inc
— подключает файл с определениями ввода-вывода -section .data — определяет сегмент данных -section .bss — определяет сегмент буферов -section .text — определяет сегмент кода -global CMAIN — объявляет точку входа в программу - Мидлэнд программы: -CMAIN: — метка точки входа -mov ebp, esp — устанавливает точку останова для отладчика -GET_STRING String, 100 - подключает ввод строки с помощью функции File$ReadString -lea esi, [String] — переводит указатель на строку в регистр ESI -mov edi, esi — переводит указатель на строку в регистр EDI -mov bl, 'A' — переводит символ 'A' в регистр BL
- Цикл удаления пробелов и замены строчных букв '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 в строку
- Окончание программы: -or al, al — устанавливает флаг конца строки -jnz .while — если флаг конца строки не установлен, то продолжает цикл -NEWLINE — выводит символ новой строки -PRINT_STRING String — выводит строку с помощью функции File$WriteString -GET_CHAR al — считывает следующий символ ввода -mov ebp, esp — восстанавливает точку останова для отладчика -xor eax, eax — очищает регистр EAX -ret — завершает выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д