Сборник по задачам и примерам Assembler


Поиск в таблице - часть 7


movcx.lenjnovs -.сколько пересылать repmevsb ; пересылаем строку восстанавливаем регистры

tabelement._tab 10 dup (<>)

len_tab=$-tab

buf buf_0ah<>

key db 5

nrev element tab <> ;предыдущий элемент

Г element tab" <> временная переменная для сортировки

.code

leadi.tab lea si .buf .bufjn mov ex. 10 lea dx. buf movah.Oah push ds

mh ;вводим слова с клавиатуры в буфер buf

-.сохраняем регистры .........

intZlh

move1, buf. lenjn

mov [di].len.cl ;длина слова -> tab.length

adddi ,simv id

repmovsb -.пересылка слова в элемент таблицы :восстанавливаем регистры .........

adddi.type element_tab

;Упорядочиваем таблицу методом пузырьковой сортировки

п-10

mov cx.n-1

mov si .1

@@сус11: :внешний цикл - по 1 push ex

subcx'.S! количество повторений внутреннего цикла push si временно сохраним 1 - теперь о=п

mov si .n-1

@@cyc!2: push si

movax.type element_tab

mul si

mov si.ax

mov di .si

sub di.type element_tab :в di адрес предыдущей записи

mov al.[di].len

cmp [si].len.al сравниваем последующий с предыдущим

ja @@ml ;обмениваем

s_movsbx.[di].<type element_tab> :x=mas[j-l]

s_movsb[di].[si].<type element_tab> ;mas[j-l]»mas[j] ;mas[j]=x push ex

mov ex.type element_tab :сколько пересылать

mov di ,si

lea si.x юткуда пересылать repmovsb : пересылаем строку pop ex @@ml: pop si

dec si :цикл по j с декрементом n-i раз

loop @@cycl2 pop si

inc si pop ex

dec ex

jcxz in2

jmp @@cycl 1

m2: ;ищем элемент путем двоичного поиска :в si и di индексы первого и последнего элементов последней просматриваемой части

последовательности;

mov si.0

mov di.n-1

;получим центральный индекс: cont_search: cmp si .di :проверка на окончание (неуспешное):si>di

ja exit

mov bx.si

add bx.di

shr bx.l ; делим на 2 push bx

movax.type element_tab

mul bx

mov bx.ax

mov al.key :искомое значение в ах

cmp [bx].Ten.al сравниваем с искомым значением

je @@rn4 ; искомое значение найдено

ja ШтЗ :[bx].len>k ;[bx].len<k: popbx

mov si ,bx




Начало  Назад  Вперед



Книжный магазин