Задан массив из 12 элементов.Определить сумму всех чисел меньших 6-ти (СИ) - Assembler
Формулировка задачи:
Задан массив из 12 элементов.Определить сумму всех чисел меньших 6-ти если можно с пояснением
Решение задачи: «Задан массив из 12 элементов.Определить сумму всех чисел меньших 6-ти (СИ)»
textual
Листинг программы
format PE console
entry start
include 'D:\fasmw16726\INCLUDE\win32a.inc'
section '.data' data readable writeable
a dd 1,2,3,4,5,6,7,8,9,0,1,2
message db 'Результат = %d',0
r db 'Russian',0
sum dd ?
section '.code' code readable executable
start:
xor eax,eax
mov ecx,10
mov esi,a
loo:
cmp dword [esi+ecx*4],6
jg next
add eax, [esi+ecx*4]
next:
loop loo
push eax
cinvoke setlocale,1,r
pop eax
; CINVOKE макрос в составе FASM.
; Позволяет вызывать CDECL-функции.
cinvoke printf,message,eax
cinvoke getch
; INVOKE аналогичный макрос для STDCALL-функций.
invoke ExitProcess,0
section '.idata' import data readable
library kernel,'kernel32.dll',\
msvcrt,'msvcrt.dll'
import kernel,\
ExitProcess,'ExitProcess'
import msvcrt,\
setlocale,'setlocale',\
printf,'printf',\
getch,'_getch'
Объяснение кода листинга программы
- Объявлены переменные:
a- массив из 12 элементов (1,2,3,4,5,6,7,8,9,0,1,2),message- строка, содержащая сообщение, которое будет выведено на экран,r- строка, содержащая указание на язык (русский),sum- переменная, в которой будет храниться сумма чисел.
- В начале кода инициализируется регистр
eax(он используется для хранения суммы чисел). - Далее устанавливается счётчик
ecx(10), который определяет количество итераций цикла. - В качестве начального значения для цикла используется переменная
a. - В цикле происходит сравнение каждого элемента массива
aс числом 6. Если элемент больше или равен 6, то выполняется переход к следующему элементу. - Если элемент меньше 6, то к сумме
eaxприбавляется значение этого элемента. - После выполнения всех итераций цикла значение переменной
eaxсодержит сумму чисел. - Выполняется набор действий, связанных с выводом сообщения на экран:
- Устанавливается локальная настройка для России.
- Выводится сообщение, содержащее значение переменной
eax. - Ожидается нажатие клавиши.
- Завершается программа.