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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2012, 00:14   #1
Actin Uranium
Новичок
Джуниор
 
Регистрация: 04.06.2012
Сообщений: 2
По умолчанию работа с памятью через Virtual Pascal

все в духе "на уроках изучаем 2+2=4, а контрольная "расчитайте сколько самолет будет падать до земли с высоты 3 км под углом таким-то, такой-то массой если сила ветра такая-то и т.д", дали методичку, после прочтения которой по идее я должен справится с этим заданием, но то ли я такой, то ли методичка, но у меня что-то не получается

Вычитайте из числа 65535 значения элементов массива пока результат не меньше 255. Тип массива byte, сегмент нужно объявлять в var, а результат записать в переменную.

задание в virtual pascal'e, что немного усложняет задачу

что-то вот начал
Код:
var a:array[1..10] of byte;
begin
for i:=1 to 10 do a[i]:=random(100);
i:=65535;
asm
mov ax,[i];
mov ecx,10
mov esi,offset a
спрашивал тоже на cyberforum'e, там помогли, но не взяли во внимание что надо писать именно в паскале, т.е. я не понимаю где это написано, но явно не там, сегмент надо задавать в var'e

Код ASM
Код:
mov ecx,10
mov bx,65536
mov esi,offset a
loopet:
lodsb
sub bl,al
sbb bh,0
cmp bx,255
jbe vilet
loop loopet
 
vilet:

Последний раз редактировалось Stilet; 05.06.2012 в 07:33.
Actin Uranium вне форума Ответить с цитированием
Старый 05.06.2012, 05:00   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Actin Uranium Посмотреть сообщение
задание в virtual pascal'e, что немного усложняет задачу
Сдается мне, что задачу усложняет не этот момент, а ты сам. Тебе дали задание на Паскале? Так и делай его на Паскале! Неважно, Virtual, Free, Turbo, TMT, ABC.. Зачем ты лезешь в ассемблер? Из твоего задания я этого никак не вижу. На CyberForum ты сразу задал вопрос именно в разделе Assembler, а не Pascal - почему?? Если ты что-то умалчиваешь - будь добр, договаривай..

Далее.. У тебя всего 10 элементов в массиве. Как ты думаешь может получиться, что их сумма будет больше чем 65535-255? Чудес не бывает.. Или тебе нужно в цикле снова переходить в начало массива и вычитать по новой? Так ты скажи это человеческим языком тогда..

Короче, решение (с многократным проходм по массиву) на Pascal выглядит прмерно так (проверено как на Virtual, так и на Free)
Код:
const
  n= 10;
var
  a:array[1..n] of byte;
  m,i: word;

begin
  // randomize;  // uncomment after debugging
  for i:=1 to n do a[i]:=random(100);
  m:= 65535;
  i:= 1;
  while m>=255 do begin
    m:= m-a[i];
    i:= i mod n+1
  end;
  writeln(m);
  readln
end.
Если тебе все же нужна ассемблерная вставка - тебе ее дали на CyberForum'е. Она нуждается в небольших исправлениях, правда.. ))
Короче, определись давай, что именно тебе надо.

P.S.
Кстати, отвечу на твой вопрос на CF.. Да, прекрасно он все поймет. Толькоя не могу взять в толк - зачем тебе тут uses Windows? И еще, если будешь все же делать вставку, не забудь объявить метки, а также исправь начальное значение и условие останова. А также переложи результат в переменную. Вроде все..
P.P.S.
А, нет, не все.. Зачем такие сложности - флешка?.. Раз ты пишешь в форум, ты явно в инете. Трудно скачать файл размером 13 мегов? Он бесплатный.. ))
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 05.06.2012 в 05:13. Причина: дддобавил..
TinMan вне форума Ответить с цитированием
Старый 05.06.2012, 11:53   #3
Actin Uranium
Новичок
Джуниор
 
Регистрация: 04.06.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Тебе дали задание на Паскале?
сделать надо на паскале, но с использованием ассемблеровских команд, mov например, подключать модуль asm, или как это называется


Цитата:
Сообщение от TinMan Посмотреть сообщение
На CyberForum ты сразу задал вопрос именно в разделе Assembler, а не Pascal - почему??
потому что я написал уже выше, я подумал, что эту тему можно создать и там и там, т.к. надо использовать ассемблеровкие команды в паскале

Цитата:
Сообщение от TinMan Посмотреть сообщение
Как ты думаешь может получиться, что их сумма будет больше чем 65535-255? Чудес не бывает.. Или тебе нужно в цикле снова переходить в начало массива и вычитать по новой? Так ты скажи это человеческим языком тогда..
я думал это и так понятно, что тут цикл , ведь задание звучит "Вычитайте из числа 65535 значения элементов массива пока результат будет не меньше 255" т.е. снова и снова, пока не..

Цитата:
Сообщение от TinMan Посмотреть сообщение
Толькоя не могу взять в толк - зачем тебе тут uses Windows?
пример в методичке реализован так

Цитата:
Сообщение от TinMan Посмотреть сообщение
Зачем такие сложности - флешка?.. Раз ты пишешь в форум, ты явно в инете. Трудно скачать файл размером 13 мегов?
я в другом городе на сессии, у меня нет возможности качать файлы такого размера, инет говно, к тому же дорогой, но проблема уже решена

надеюсь я ответил на все твои вопросы

Последний раз редактировалось Actin Uranium; 05.06.2012 в 12:00.
Actin Uranium вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с динамической памятью через указатели. Загадочная ошибка. Hqw33 Общие вопросы C/C++ 2 28.03.2012 18:42
работа с памятью в VB Mr_ViK Помощь студентам 1 14.01.2012 16:54
Сегменты и смещения. Assembler(Virtual Pascal) Donix Помощь студентам 0 19.10.2011 16:40
Строковые операции (Virtual Pascal) Vitek220 Помощь студентам 1 02.05.2008 18:11
Работа с памятью Shurik Hacker Общие вопросы Delphi 7 22.06.2007 20:51