" писал(а):я думаю ничем не отличается ...
Согласен, ассемблер и в Африке - ассемблер, только набор команд под разные микросхемы свой. Для 80х86 будет выглядеть так:
Код: Выделить всё
.code
push cs
pop ds ; Data segment preparing
xor dx, dx ; DX - 16-bit summ of array's elements. First it's zero.
mov si, offset Array ; Address of Array to SI
mov cx, 10
@lab1:
mov ax, [si] ; AX = Element
and ax, 1 ; if 0-bit of BX is set, it means the number is odd
cmp ax, 1
jnz @lab2 ; if not odd, skip next commands
add dx, [si] ; Calculating summ
@lab2:
add si, 2
dec cx
jnz @lab1 ; Next element
mov ax, 4C00h ; Termination
int 21h
Array dw 100, 93, 657, 194, 382, 101, 395, 192, 483, 921
end
Код: Выделить всё
.code
push cs
pop ds ; Data segment preparing
mov si, offset Array ; Address of Array to SI
mov cx, 10
@lab1:
mov ax, [si] ; AX = Element
shr ax, 1 ; Shifting bits right by 1, it's equalient divizion by 2
mov [si], ax ; Store result back
add si, 2
dec cx
jnz @lab1 ; Next element
mov ax, 4C00h ; Termination
int 21h
Array dw 100, 93, 657, 194, 382, 101, 395, 192, 483, 921
end
Замечания к первой: Сумма 10-и 16-разрядных элементов может превышать 16 разрядов и не уместиться в DX
Замечания ко второй: Сдвиг битов вправо - аналог деления на 2, однако самый крайний 0-бит теряется, потому при делении нечетных чисел результат становиться неточным (5 / 2 = 2)
Все коды написаны с учетом максимальной совместимости с другими микросхемами.