Помогите разработать программу вычисления количества четных чисел массивов.
на ассемблере.. . или хотябы с графичиской схемой алгоритма.. .
или может кто подскажет где скачать книгу ( Хмакин А. П. "Архитектура ЭВМ" )
Другие языки программирования и технологии
Архитектура ЭВМ помогите с ассемблером
Вот.. . как-то так.. . Но я это все не проверял, так что не знаю, все чисто теоретически!! !
Поэтому, может, что-то не будет работать.. . но можно подправить, если что )) здесь просто сам алгоритм, правда не знаю, насколько он правильный.. .
;;; адрес начала массива - переменная array
xor ecx, ecx;; обнуляем счетчик (текущий элемент массива)
xor ebx, ebx;; обнуляем счетчик четных элементов
label1:
mov eax, ecx;; ecx - текущий элемент массива
shl eax, 2;; смещение внутри массива, 2: 4 байта/элемент, 1: 2 байта/элемент, если элемент - 1 байт, оператор не нужен. В этих случаях в 4 процедурах, начиная с mov eax, dword ptr [eax] должны быть изменены размеры (dword, eax) на необходимые
add eax, array;; полный адрес элемента массива
mov eax, dword ptr [eax];; копируем в eax то, что по адресу, который а eax (masm32, в других компиляторах может быть по-другому)
and eax, 1;; если eax четный, он станет равным 1, иначе 0
cmp eax, 0;; если нечетный
jne label2;; пропускаем увеличение ebx
inc ebx
label2:
inc ecx
cmp ecx, 255;; здесь должен быть размер массива
jb label1;; если индекс текущего элемента (включая 0) меньше размера массива, переходим в начало цикла
;;; ebx содержит количество четных элементов
Поэтому, может, что-то не будет работать.. . но можно подправить, если что )) здесь просто сам алгоритм, правда не знаю, насколько он правильный.. .
;;; адрес начала массива - переменная array
xor ecx, ecx;; обнуляем счетчик (текущий элемент массива)
xor ebx, ebx;; обнуляем счетчик четных элементов
label1:
mov eax, ecx;; ecx - текущий элемент массива
shl eax, 2;; смещение внутри массива, 2: 4 байта/элемент, 1: 2 байта/элемент, если элемент - 1 байт, оператор не нужен. В этих случаях в 4 процедурах, начиная с mov eax, dword ptr [eax] должны быть изменены размеры (dword, eax) на необходимые
add eax, array;; полный адрес элемента массива
mov eax, dword ptr [eax];; копируем в eax то, что по адресу, который а eax (masm32, в других компиляторах может быть по-другому)
and eax, 1;; если eax четный, он станет равным 1, иначе 0
cmp eax, 0;; если нечетный
jne label2;; пропускаем увеличение ebx
inc ebx
label2:
inc ecx
cmp ecx, 255;; здесь должен быть размер массива
jb label1;; если индекс текущего элемента (включая 0) меньше размера массива, переходим в начало цикла
;;; ebx содержит количество четных элементов
Похожие вопросы
- Помогите по ассемблеру
- Архитектура ЭВМ
- Помогите с ассемблером
- Помогите с ассемблером (задачей про матрицы) внутри...
- Помогите с ассемблером
- помогите с Ассемблером
- помогите с ассемблером. если можно с объяснениями...огромное спасибо
- помогите с ассемблером (i8085) Программа должна считать количество нулей в ячейке. Какие команды использовать?
- Помогите!!! задача ассемблер.
- Помогите с Ассемблером пожалуйста