Разбить строку и записать информацию в отдельные переменные - Assembler
Формулировка задачи:
Лабораторная №3.
Тема: Работа со строками.
Дана строка с информацией о студенте (Фамилия, дата рождения, группа).
Разбить и записать информацию в отдельные переменные
Решение задачи: «Разбить строку и записать информацию в отдельные переменные»
textual
Листинг программы
text segment assume CS:text,DS:data begin: mov AX,data mov DS,AX mov es,ax mov CX,length mov di,offset stream cld mov AL,' ' repne scasb je for_surname for_surname: mov BX,di mov CX,di dec CX mov si,offset stream push DI mov di,offset surname cld rep movsb lea cx,length sub CX,BX dec cx pop di xor si,si cld mov AL,' ' repne scasb je for_birth for_birth: mov CX,di sub CX,BX dec CX lea si,[stream+BX] mov BX,di push DI mov di,offset birth cld rep movsb lea cx,length dec cx pop di xor si,si cld mov AL,' ' repne scasb je for_group for_group: mov CX,di sub CX,BX dec CX lea si,[stream+BX] push DS pop ES mov BX,di mov di,offset group cld rep movsb mov AH,4Ch mov AL,0 int 21h text ends data segment stream db 'Boguslavskiy 31.03.1997 PI-24 $' length dw 30 surname db 30 dup(0) birth db 30 dup(0) group db 30 dup(0) data ends end begin
Объяснение кода листинга программы
- Переменная
text
содержит код программы. - Переменная
data
содержит данные, используемые в программе. - Переменная
stream
содержит строку, которую необходимо разбить на отдельные поля. - Переменная
length
содержит длину строки в байтах. - Переменные
surname
,birth
иgroup
используются для хранения отдельных полей строки. - Код программы использует регистры AX, DS, ES и CX для выполнения операций.
- Команда
mov AX,data
загружает значение переменнойdata
в регистр AX. - Команда
mov DS,AX
указывает, что сегмент данных должен быть равен регистру AX. - Команда
mov es,ax
загружает значение регистра AX в регистр ES. - Команда
mov CX,length
загружает значение переменнойlength
в регистр CX. - Команда
mov di,offset stream
загружает смещение переменнойstream
в регистр DI. - Команда
cld
устанавливает флаг направления переноса в 1, что означает, что данные будут записаны в обратном порядке. - Команда
mov AL,' '
загружает символ пробела в регистр AL. - Команда
repne scasb
используется для поиска первого неравного символа в строке. - Если символ найден, то выполняется переход к метке
for_surname
. - Если символ не найден, то выполняется переход к следующей итерации цикла.
- В блоке
for_surname
происходит сохранение индекса первого неравного символа в регистре BX и перезапись строки в переменнуюsurname
. - В блоке
for_birth
происходит поиск символа, обозначающего день рождения, и сохранение его индекса в регистре BX. - В блоке
for_group
происходит поиск символа, обозначающего группу, и сохранение его индекса в регистре BX. - В конце программы выполняется вывод сообщения об успешном выполнении программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д