Вычисление количества элементов в массиве. Паскаль + ассемблерная вставка - Assembler
Формулировка задачи:
Необходимо написать программу на языке Pascal, обработку данных (в том числе циклы, если они необходимы) осуществить в ассемблерной вставке.
Написать программу, вычисляющую количество элементов в массиве до первого нулевого элемента, в случае если нулевого элемента нет, должно возвращаться количество элементов в массиве.
Помогите пожалуйста, очень прошу
Решение задачи: «Вычисление количества элементов в массиве. Паскаль + ассемблерная вставка»
textual
Листинг программы
asm
cld
les di, A {заносим в пару es:di адрес массива}
mov dx,N {помещение в dx значение N}
mov cx,dx { перемещает данные из dx в регистр cx}
xor ax,ax {обнуление ax}
repne scasw {?}
jne @@nodec {если нет, прыгаем на @@nodec , если да, идем на следующую команду}
dec dx {уменьшаем счетчик циклов}
@@nodec:
sub dx,cx {вычесть dx из cx}
mov ax,dx { перемещает данные из dx в регистр ax}
end;
Объяснение кода листинга программы
asm- начало ассемблерного блокаcld- подготовительные операции для работы с памятьюles di, A- заносим в пару es:di адрес массиваmov dx,N- помещаем в dx значение Nmov cx,dx- перемещает данные из dx в регистр cxxor ax,ax- обнуление axrepne scasw- выполняет команду повторения, сравнивая байты в dx и cx, и вычитая счетчик из dxjne @@nodec- если нет, прыгаем на @@nodec, если да, идем на следующую командуdec dx- уменьшаем счетчик циклов@@nodec:- метка для переходаsub dx,cx- вычитает dx из cxmov ax,dx- перемещает данные из dx в регистр axend- конец ассемблерного блока