Сравнение строк - 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

Объяснение кода листинга программы

В этом коде сравниваются две строки, представленные в виде массивов байтов. Список действий:

  1. Задаются модели сегмента данных и кода.
  2. Определяются две строки str1 и str2 и две переменные len1 и len2, которые содержат длину строк.
  3. Устанавливается стек размером 100 байтов.
  4. Код начинается с перемещения указателя на сегмент данных в регистр ds.
  5. В цикле big происходит чтение байтов из str1 и сравнение каждого байта с соответствующим байтом из str2 в цикле min.
  6. Если байты совпадают, то в цикле zero происходит очистка байта в str1.
  7. Если байты не совпадают, то в цикл zero не заходится и байт в str1 не очищается.
  8. После окончания циклов выводится сообщение об успешном выполнении программы.

Оцени полезность:

15   голосов , оценка 3.8 из 5