Другие языки программирования и технологии

нужна помощь. найти сумму квадратов чётных элементов на языке ассемблер используя арифметические команды

> используя арифметические команды
То есть, требуется чётность элементов проверять сравнением остатка от целочисленного деления на 2 с нулём вместо логических команд, обычно применяемых для этого?
Странное условие.

format PE64
entry N88749239
include 'win64ax.inc'

section '.data' data readable writeable
Msg1 db 'Дан массив длиной %i:',13,10,0
Msg2 db 13,10,10,'Cумма квадратов чётных элементов = %li',13,10
     db 'Для завершения работы нажмите любую клавишу... ',0
Frmt db '%5i',0

Seed rd 1
Len rd 1
Sum rd 1
Array rq 1

section '.text' code readable executable
N88749239:
    rdtsc
    mov [Seed],eax
    fastcall Random,191
    add eax,10
    mov [Len],eax
    shl eax,2
    invoke VirtualAlloc,NULL,eax,MEM_COMMIT,PAGE_READWRITE
    mov [Array],rax
    invoke printf,Msg1,[Len]
    mov ecx,[Len]
    mov rdi,[Array]
    mov [Sum],0
    mov r12d,2
DoLoop:
    push rcx
    fastcall Random,1001
    sub eax,500
    stosd
    invoke printf,Frmt,dword [rdi-4]
    mov eax,[rdi-4]
    cdq
    idiv r12d
    test edx,edx
    jnz Next
    mov eax,[rdi-4]
    imul eax
    add [Sum],eax
Next:
    pop rcx
    loop DoLoop
    invoke printf,Msg2,[Sum]
    invoke getch
    invoke VirtualFree,[Array],NULL,MEM_RELEASE
    invoke ExitProcess,NULL

proc Random
    mov eax,[Seed]
    mov edx,08088405h
    mul edx
    inc eax
    mov [Seed],eax
    mul ecx
    mov eax,edx
    ret
endp

section '.idata' import data readable writeable
  dd 0,0,0,RVA kernel_name,RVA kernel_table
  dd 0,0,0,RVA msvcrt_name,RVA msvcrt_table
  dd 0,0,0,0,0

  kernel_table:
    ExitProcess dq RVA _ExitProcess
    VirtualAlloc dq RVA _VirtualAlloc
    VirtualFree dq RVA _VirtualFree
    dq 0

  kernel_name db 'kernel32.dll',0
    _ExitProcess db 0,0,'ExitProcess',0
    _VirtualAlloc db 0,0,'VirtualAlloc',0
    _VirtualFree db 0,0,'VirtualFree',0

  msvcrt_table:
    printf dq RVA _printf
    getch dq RVA __getch
    dq 0

  msvcrt_name db 'msvcrt.dll',0
    _printf db 0,0,'printf',0
    __getch db 0,0,'_getch',0

Ctac Завадский
Ctac Завадский
51 590
Лучший ответ
Если ещё актуально, пиши на почту, помогу.
Ruslan
Ruslan
5 682
С этим вам поможет статья на сайте http://indigobits.com/ там много таких статей и прочего! можете узнать много новой информации! рекомендую!

Похожие вопросы