Другие языки программирования и технологии
Задача ассемблер
Помогите решить задачу Найти в массиве из 5-ти переменных сумму чисел, принадлежащих диапазону [-5;12]. Массив: -16, 8, -4, -2, 25
Содержательная часть - функция вычисления суммы элементов массива, принадлежащих диапазону [-5;12]:
int sum(int *array, int size);
Первый аргумент указатель на начало массива array, второй размер массива size.
Соглашения относительно функции соответствуют языку C (обратный порядок аргументов, значение возвращется через регистр eax).
Принцип работы: копируем указатель на массив и его размер в регистры ebx, ecx; делаем цикл по элементам массива в обратном порядке (size-1, size-2, ..1, 0), используя команду loop; в теле цикла копируем в регистр элемент массива, сравниваем его с границами [-5;12], если удовлетворяет добавляем значение к аккумулятору eax.
Ввод массива, вызов функции, вывод результата, я полагаю, Вы сможете написать сами.
синтаксис AT&T:
.globl sum
.typesum, @function
sum:
pushl % ebx
pushl % ecx
pushl % edx
movl16(% esp), % ebx // адрес начала массива
movl20(% esp), % ecx // размер массива
movl $0, % eax
clc
WHILE:
movl -4(% ebx, % ecx, 4), нx
cmpl $-5, % edx
jl NEXT
cmpl $12, % edx
jg NEXT
addl % edx, % eax
NEXT:
loop WHILE
popl % edx
popl % ecx
popl % ebx
ret
синтаксис Intel:
sum:
push ebx
push ecx
push edx
movebx, [esp + 16] // адрес начала массива
movecx, [esp + 20] // размер массива
mov eax, $0
clc
WHILE:
mov edx, [ebx+ecx*4-4]
cmp edx, $-5
jl NEXT
cmp edx, $12
jg NEXT
add eax, edx
NEXT:
loop WHILE
pop edx
pop ecx
pop ebx
ret
PS: мейл портит код ((((
int sum(int *array, int size);
Первый аргумент указатель на начало массива array, второй размер массива size.
Соглашения относительно функции соответствуют языку C (обратный порядок аргументов, значение возвращется через регистр eax).
Принцип работы: копируем указатель на массив и его размер в регистры ebx, ecx; делаем цикл по элементам массива в обратном порядке (size-1, size-2, ..1, 0), используя команду loop; в теле цикла копируем в регистр элемент массива, сравниваем его с границами [-5;12], если удовлетворяет добавляем значение к аккумулятору eax.
Ввод массива, вызов функции, вывод результата, я полагаю, Вы сможете написать сами.
синтаксис AT&T:
.globl sum
.typesum, @function
sum:
pushl % ebx
pushl % ecx
pushl % edx
movl16(% esp), % ebx // адрес начала массива
movl20(% esp), % ecx // размер массива
movl $0, % eax
clc
WHILE:
movl -4(% ebx, % ecx, 4), нx
cmpl $-5, % edx
jl NEXT
cmpl $12, % edx
jg NEXT
addl % edx, % eax
NEXT:
loop WHILE
popl % edx
popl % ecx
popl % ebx
ret
синтаксис Intel:
sum:
push ebx
push ecx
push edx
movebx, [esp + 16] // адрес начала массива
movecx, [esp + 20] // размер массива
mov eax, $0
clc
WHILE:
mov edx, [ebx+ecx*4-4]
cmp edx, $-5
jl NEXT
cmp edx, $12
jg NEXT
add eax, edx
NEXT:
loop WHILE
pop edx
pop ecx
pop ebx
ret
PS: мейл портит код ((((
слушать надо на уроках
Похожие вопросы
- Помогите!!! задача ассемблер.
- Помогите с ассемблером (задачей про матрицы) внутри...
- задача по ассемблеру.помогите!
- Что может ассемблер?
- Почему многие программисты ненавидят ассемблер?Ведь у него куча плюсов!Он позволяет максимально задействовать
- Создание алгоритма для решения задачи на Ассемблере!
- ассемблер. задача. в строке определить позицию первого вхождения букве z
- Простая задача на FASM (ассемблер) помогите 3 дня мучаюсь!!!
- Вопрос по изучению языка Ассемблера под MS DOS. (Нужны советы по программному обеспечению/программированию)
- С помощью команд fpu вычислить площадь круга, исходя из введѐнного диаметра. Ассемблер...