IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> интересные программы на Asm, помогите=)
сообщение
Сообщение #1


Гость






Так вот=)... rolleyes.gif 1. Дан произвольный двумерный массив A(N*M). Найти строку с максимальной суммой элементов.
2. Так же дан массив. Найти максимальный элемент кратный 2 и не кратный 5.
заранее большое спасибо! :thanks:
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Решение первой задачи на Паскале в виде ассемблерной вставки:
program Sol1;

const
MaxRows = 100;
MaxCols = 100;

type
TArray = array[0..MaxRows - 1, 0..MaxCols - 1] of Integer;

function FindRow(const a: TArray; n, m: Integer): Integer; assembler;
asm
xor ax,ax
cmp n,ax { проверка на случай массива нулевого размера }
je @@Exit
cmp m,ax
je @@Exit
push ds
xor di,di { di = N - <номер искомой строки> }
mov bx,-MaxInt { bx = <макс. значение суммы> }
lds si,a
mov cx,n
@@NextRow:
push cx
xor dx,dx { подсчёт суммы элементов строки }
mov cx,m
@@NextElem:
lodsw
add dx,ax
loop @@NextElem
pop cx
mov ax,MaxCols { переход к следующей строке массива }
sub ax,n
shl ax,1
add si,ax
cmp dx,bx
jle @@SkipRow
xchg bx,dx
mov di,cx
@@SkipRow:
loop @@NextRow
mov ax,di { <номер искомой строки> = N - di }
neg ax
add ax,n
pop ds
@@Exit:
end;

var
a: TArray;
n, m, i, j: Integer;

begin
Write('n>');
Readln(n);
Write('m>');
Readln(m);
Writeln('Данный массив:');
Randomize;
for i := 0 to n - 1 do
begin
for j := 0 to m - 1 do
begin
a[i, j] := -9 + Random(19);
Write(a[i, j]:3);
end;
Writeln;
end;
Writeln;

Writeln('Номер искомой строки: ', FindRow(a, n, m));
end.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.05.2024 15:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name