Задачка для ассемблер

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
loskyto
Сообщения: 1
Зарегистрирован: 07 ноя 2013, 16:02

07 ноя 2013, 16:07

Здравствуйте!)
Для универа требуется решить задачку.Помогите пожалуйста

дан одномерный массив из n элементов.найти количество и сумму всех нечетных элементов
Заранее благодарна
vladden
Сообщения: 5
Зарегистрирован: 30 ноя 2013, 18:22

30 ноя 2013, 18:25

; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
include \masm32\include\masm32rt.inc
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

comment * -----------------------------------------------------
Build this console app with
"MAKEIT.BAT" on the PROJECT menu.
----------------------------------------------------- *

.data
array dd 100 dup (0) ;
num dd 0 ;
buff db 20 dup (0) ;
mess1 db 'Input number of elements: ',0 ;
mess2 db 'Input elements:',0dh,0ah,0 ;
mess3 db 'Summa elementov : ', 0 ;
mess4 db 'Incorrect number',0dh,0ah,0 ;
endl db 0dh, 0ah, 0 ;
.code
start:
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
call main
inkey
exit
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
main proc
cls ;
call inputArray ;
or eax, eax ;
jnz next0 ;
invoke StdOut, ADDR mess4 ;
ret ;
next0:
call findMaxArray ;
invoke dwtoa, eax, ADDR buff ;
invoke StdOut, ADDR mess3 ;
invoke StdOut, ADDR buff ;
invoke StdOut, ADDR endl ;
ret ;
main endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
inputArray proc ;
invoke StdOut, ADDR mess1 ;
invoke StdIn, ADDR buff, 20 ;
invoke atol, ADDR buff ;
cmp eax, 100 ; 100
jle next0 ; ,
xor eax, eax ; eax
ret ;
next0:
mov num, eax ; num
invoke StdOut, ADDR mess2 ;
xor ebx, ebx ;
loop0:
invoke StdIn, ADDR buff, 20 ;
invoke atol, ADDR buff ;
mov array [ebx*4], eax ;
inc ebx ;
cmp ebx, num ;
jnz loop0 ;
mov eax, 1 ;
ret ;
inputArray endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
findMaxArray proc ; : EAX -
xor ebx, ebx ;
dec eax ;
loop0:
mov edx, array [ebx*4] ; EDX
test edx, 1
jnz next1

next0:
inc ebx ;
cmp ebx, num ;
jnz loop0 ;
ret ;
next1:
add edx, eax ;
mov eax, edx ; EAX
jnz next0 ;


findMaxArray endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end start
Ответить