Из символьного массива удалить группы цифр, записанных подряд - Assembler
Формулировка задачи:
Задали символьный масив С(n) n<=700... Разработать программу, которая находить и извлекает групы цифр, записаных подряд. Выводить модифицированый масив
Решение задачи: «Из символьного массива удалить группы цифр, записанных подряд»
textual
Листинг программы
LOCALS .model small .stack 100h .data ;строка для обработки S db "A California-based cybersecurity firm found " db "a database of nearly 200 million American " db "voters - along with their preferences and " db "modeling data - left unsecured on an Amazon " db "cloud server by data contractors working on " db "Donald Trump's 2016 presidential bid." db 0Dh, 0Ah db "https://www.com/usa/393124-rnc-database-millions-exposed/" db 0Dh, 0Ah db "7-1:123+1234=4*43\432%4321-0" Len dw $-S ;параметры групп цифр в сообщении (параметры очереди) QSize equ 1 ;допустимое количество цифр в группе Queue db QSize dup(?) ;очередь символов QLen dw 0 ;длина очереди ;сообщения программы CrLf db 0Dh, 0Ah, '$' ;перевод строки .code main proc mov ax, @data mov ds, ax ;показать исходную строку lea si, [S] mov cx, Len call ShowSubStr mov ah, 09h lea dx, [CrLf] int 21h int 21h ;обработка и посимвольный вывод строки lea si, [S] mov cx, Len lea di, [Queue] mov QLen, 0 cld @@For: lodsb cmp al, '0' jb @@TestQueue cmp al, '9' ja @@TestQueue ;если считан символ цыфры - помещаем его в очередь ;(с учётом переполнения) inc QLen cmp QLen, QSize ja @@QueueOverflow mov bx, QLen dec bx mov [di+bx], al @@QueueOverflow: jmp @@NextChar @@TestQueue: ;если все цифры завершились - проверяем очередь ;если она переполнена (больше размера) - очишаем ;если в очереди количество символов не больше требуемых - выводим их ;если очередь пустая - сразу переходим к выводу текущего символа cmp QLen, QSize ja @@ClearQueue cmp QLen, 0 je @@ShowChar @@ShowQueue: push si push cx lea si, [Queue] mov cx, QLen call ShowSubStr pop cx pop si @@ClearQueue: mov QLen, 0 @@ShowChar: int 29h @@NextChar: loop @@For ;если после завершения цикла осталась непустая непереполненная очередь ;то вывести её cmp QLen, QSize ja @@SkipShowQueue lea si, [Queue] mov cx, QLen call ShowSubStr @@SkipShowQueue: mov ax, 4C00h int 21h main endp ;процедура вывода подстроки ;на входе: ; ds:si - адрес первого символа подстроки ; cx - длина выводимой подсторки ShowSubStr proc push ax push bx push cx push dx mov ah, 40h mov bx, 1 mov cx, cx mov dx, si int 21h pop dx pop cx pop bx pop ax ret ShowSubStr endp end main
Объяснение кода листинга программы
- Объявление переменных в сегменте данных:
- Название переменной:
S
, значение:A California-based cybersecurity firm found a database of nearly 200 million American voters - along with their preferences and modeling data - left unsecured on an Amazon cloud server by data contractors working on Donald Trump's 2016 presidential bid.
- Название переменной:
Len
, значение: длина строкиS
- Название переменной:
QSize
, значение:1
(допустимое количество цифр в группе) - Название переменной:
Queue
, значение: пустой массив длинойQSize
- Название переменной:
QLen
, значение:0
(длина очереди) - Название переменной:
CrLf
, значение: перевод строки
- Название переменной:
- Переход в сегмент кода
- Определение процедуры
main
:- Загрузка адреса сегмента данных в
ax
, перемещение вds
- Вывод исходной строки
- Обработка строки посимвольно и вывод символов
- Загрузка адреса сегмента данных в
- Определение процедуры
ShowSubStr
:- Процедура для вывода подстроки
- Завершение процедуры
main
и программы Данный код обрабатывает строку, удаляя группы цифр и выводя оставшиеся символы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д