Сравнение строк - 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 не очищается.
- После окончания циклов выводится сообщение об успешном выполнении программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д