Сравнение строк - Assembler (223283)
Формулировка задачи:
Здравствуйте,прошу помощи в решении задачи,хотя бы какие-то идеи.
Задача: ввести с клавиатуры две строки одноразрядных чисел. Одна строка источник,вторая-строка приемник.Сравнить строки,первый совпадающий элемент строки источника записать в регистр BP.Остальные элементы строки источника обнулить.
Решение задачи: «Сравнение строк»
textual
Листинг программы
- .model small
- .data
- str1 db 1,2,3,4,5
- len1 = $-str1
- str2 db 6,7,8,3,9
- len2 = $-str2
- .stack 100h
- .code
- start:
- mov ax,@data
- mov ds,ax
- mov es,ax
- lea si,str1
- mov cx,len1
- big:
- push cx
- lodsb
- lea di,str2
- mov cx,len2
- min:
- mov ah,byte ptr [di]
- cmp al,ah
- je same
- inc di
- loop min
- pop cx
- loop big
- jmp exit
- same:
- add sp,2
- cbw
- mov bp,ax
- lea si,str1
- mov cx,len1
- zero:
- mov al,byte ptr [si]
- cmp al,byte ptr [di]
- je skip
- mov byte ptr [si],0
- skip:
- inc si
- loop zero
- exit:
- mov ah,4Ch
- mov al,00h
- int 21h
- end start
Объяснение кода листинга программы
В этом коде сравниваются две строки, представленные в виде массивов байтов. Список действий:
- Задаются модели сегмента данных и кода.
- Определяются две строки str1 и str2 и две переменные len1 и len2, которые содержат длину строк.
- Устанавливается стек размером 100 байтов.
- Код начинается с перемещения указателя на сегмент данных в регистр ds.
- В цикле big происходит чтение байтов из str1 и сравнение каждого байта с соответствующим байтом из str2 в цикле min.
- Если байты совпадают, то в цикле zero происходит очистка байта в str1.
- Если байты не совпадают, то в цикл zero не заходится и байт в str1 не очищается.
- После окончания циклов выводится сообщение об успешном выполнении программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д