Подсчитать количество элементов массива - Assembler
Формулировка задачи:
Помогите пожалуйста. Необходимо подсчитать количество элементов массива, указывающих на элементы, расположенные в исполняющемся сегменте кода программы. Изначально задан массив дальних указателей.
Решение задачи: «Подсчитать количество элементов массива»
textual
Листинг программы
mov cx,N <-- число элементов mov di,offset farpointers+2 @@: scasw je exit add di,2 loop @b jcxz элемент_не_найден элемент_найден: inc count loop @b
Объяснение кода листинга программы
В данном коде используется язык Assembler. Задача заключается в подсчете количества элементов в массиве.
- mov cx, N — в переменную CX записывается число элементов массива.
- mov di, offset farpointers+2 — в переменную DI записывается смещение (адрес) начала массива.
- @@: scasw — происходит сравнение содержимого DI с последним элементом массива. Если они равны, то происходит переход на метку
exit. Если нет, то происходит переход на следующую итерацию цикла. - add di, 2 — переменная DI увеличивается на 2, тем самым смещаясь к следующему элементу массива.
- loop @b — происходит проверка, нужно ли продолжать выполнение цикла. Если переменная CX равна нулю, то происходит переход на метку
элемент_не_найден. Если нет, то происходит переход на следующую итерацию цикла. - jcxz элемент_не_найден — если значение CX равно нулю, то происходит переход на метку
элемент_не_найден. Если нет, то происходит переход на следующую итерацию цикла. - элемент_найден: inc count — если элемент массива был найден, то к переменной
countприбавляется единица. - loop @b — происходит проверка, нужно ли продолжать выполнение цикла. Если переменная CX равна нулю, то происходит переход на метку
элемент_не_найден. Если нет, то происходит переход на следующую итерацию цикла. - jcxz элемент_не_найден — если значение CX равно нулю, то происходит переход на метку
элемент_не_найден. Если нет, то происходит переход на следующую итерацию цикла.