Найти сумму всех элементов массива равных последнему - Assembler
Формулировка задачи:
; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« .486 ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive ; include files ; ~~~~~~~~~~~~~ include \masm32\include\windows.inc ; main windows include file include \masm32\include\masm32.inc ; masm32 library include ; ------------------------- ; Windows API include files ; ------------------------- include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\Comctl32.inc include \masm32\include\comdlg32.inc include \masm32\include\shell32.inc include \masm32\include\oleaut32.inc include \masm32\include\ole32.inc include \masm32\include\msvcrt.inc include \masm32\include\dialogs.inc ; macro file for dialogs include \masm32\macros\macros.asm ; masm32 macro file ; libraries ; ~~~~~~~~~ includelib \masm32\lib\masm32.lib ; masm32 static library ; ------------------------------------------ ; import libraries for Windows API functions ; ------------------------------------------ includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\Comctl32.lib includelib \masm32\lib\comdlg32.lib includelib \masm32\lib\shell32.lib includelib \masm32\lib\oleaut32.lib includelib \masm32\lib\ole32.lib includelib \masm32\lib\msvcrt.lib ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« ; ************************************************************************ ; include \masm32\include\masm32rt.inc ; ************************************************************************ .data? ;Result dd ? ;lpBuf1 db 1024 dup(?) ; temp Buffers .data buffer_for_string db 10 dup(0) title_string db "Результат: ",0 szformat db "%u",0Dh,0Ah,0 ; изменяем формат вывода на dec mas dw 3,2,3,6,2,3,19,3 end_point dw 8 ; end_point < mas.length .code start: ; ************************************************************************ main proc ; LOCAL Result :DWORD ; LOCAL var_00 :DWORD ; LOCAL var_01 :BYTE ;Обнуляем регистры xor eax,eax xor ebx,ebx xor ecx,ecx xor edx,edx ;================= mov cx,end_point ;Кол-во шагов в цикле mov dx,1 ;Нач. знач. для перемножения go: mov si,ax shl si,1 mov bx,mas[si] inc ax test bx,1 mov dx,3 cmp dx,si ;jp goto1 ;Сравнение элементов массива с 3 call mypr ;Вызов процедуры перемножения goto1: loop go ;------------------------------- Sift Ice ;________________________________ push edx push offset szformat push offset buffer_for_string call wsprintf push MB_OK push offset title_string push offset buffer_for_string push 0 call MessageBox push 0 call ExitProcess ;________________________________ main endp ; ************************************************************************ ; ************************************************************************ mypr proc ;test bx,bx ;js minus_zn jmp end_test minus_zn: ;imul dx,bx ;Перемножение sub dx,bx ; Сумма end_test: RET mypr endp ; ************************************************************************ ; ************************************************************************ end start Comment ^ Каркас программы .386 .MODEL Flat, STDCALL .DATA <Ваша инициализиpуемые данные> ...... .DATA? <Ваши не инициализиpуемые данные> ...... .CONST <Ваши константы> ...... .CODE <метка> <Ваш код> ..... end <метка> ^
Решение задачи: «Найти сумму всех элементов массива равных последнему»
textual
Листинг программы
; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« .486 ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive ; include files ; ~~~~~~~~~~~~~ include \masm32\include\windows.inc ; main windows include file ; ------------------------- ; Windows API include files ; ------------------------- include \masm32\include\user32.inc include \masm32\include\kernel32.inc ; libraries ; ~~~~~~~~~ includelib \masm32\lib\masm32.lib ; masm32 static library ; ------------------------------------------ ; import libraries for Windows API functions ; ------------------------------------------ includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« ; ************************************************************************ ; include \masm32\include\masm32rt.inc ; ************************************************************************ .data? ;Result dd ? ;lpBuf1 db 1024 dup(?) ; temp Buffers .data buffer_for_string db 10 dup(0) title_string db "Результат: ",0 szformat db "%u",0Dh,0Ah,0 ; изменяем формат вывода на dec mas dw 3,2,3,6,2,3,19,3 len equ (($-mas)/2)-1 .code start: ; ************************************************************************ main proc mov esi,offset mas mov ecx,len movzx ebx,word ptr [esi+ecx*type mas] xor edx,edx xor eax,eax @@: lodsw cmp eax,ebx jnz @1 add edx,eax @1: loop @b push edx push offset szformat push offset buffer_for_string call wsprintf push MB_OK push offset title_string push offset buffer_for_string push 0 call MessageBox push 0 call ExitProcess ;<br> main endp end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д