Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 13:26   #1
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию Массив

Написал программу, но где - то ошибка:

Собственно задание

Тип массива:Byte
Где объявлять:Var
(сегмент)
Признак окончания(1):-
Задание:Вычитайте из числа 65535 значения элементов массива пока результат не меньше 255.
Результат:В переменную.

(1)Это последний элемент массива, если в цикле встретилось данное число, выходим из цикла, так как элементы массива закончились. Если число не указано, то нулевой элемент массива – это его длина (количество элементов массива - 1), и элементы массива начинаются с первого элемента. В любом случае эти крайние элементы (нулевой или последний) не должны участвовать в вычислениях при выполнении задания.

Цитата:
uses Windows;
var a: array [0..10] of byte;
begin
asm
mov AX, 65535
xor DX,DX
mov ebx, offset a
mov ecx, 0
mov cl, [ebx]
inc ebx
mov dx, 0
mov dl, [ebx]
sub ax, dx
cmp ax, 255
@L1:
end;
end.
Doublefaced вне форума Ответить с цитированием
Старый 01.06.2009, 13:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то типа такого:
Код:
   var a:array[1..10] of byte;i:word;
begin
 for i:=1 to 10 do a[i]:=random(100);
 i:=65535;
 asm
  mov ax,[i];
  mov ecx,10
  mov esi,offset a
 @q1:
  sub ax,[esi+ecx]
 loop @q1
  mov [i],ax
 end;
  write(i);readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Рабочий но на правильность не проверял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.06.2009, 17:14   #3
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

Можете сделать пояснения?
на выходе почему то получается одно и тоже число?
или я что-то не понял
Doublefaced вне форума Ответить с цитированием
Старый 01.06.2009, 19:04   #4
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

На выходе одно и тоже число, потому что здесь ф-ия random. Если нужно, например, чтобы числа были разные, то нужно использовать randomize.
mov ax,[i]; в ax счетчик
mov ecx,10; счетчик в 10 тактов, т.к. чисел 10
mov esi,offset a ; смещение массива
sub ax,[esi+ecx] ; вычитаем числа котрые в [esi+ecx]
Ну и , соответственно, повторяем цикл, перебирая массив
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 02.06.2009, 00:22   #5
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

а на чем пишем-то
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06
массив TheVenny Помощь студентам 1 22.11.2008 01:50
Массив в С++ !!!!! Общие вопросы C/C++ 3 10.11.2008 10:07
Массив KpeHDeJIb Помощь студентам 2 27.09.2008 13:59