Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.04.09;
Скачать: CL | DM;

Вниз

Вопрос про ASM команду sub   Найти похожие ветки 

 
Pavia ©   (2016-04-08 06:31) [40]


> Сереж, я ж уже объяснил, блин (че как дети прям, книжки
> не читаете) - 4 гига виртульной памяти дели на лапопам,
> первая твоя, вторая ядра.

Так у вас логика не правильная. Ядро отображалось в адресный процесс приложения для того что-бы приложение могло адресовать к ядру. Иначе нет смысла. К примеру чтение значение таймера. Поэтому ваша логика не верна.


 
KSergey ©   (2016-04-08 08:16) [41]

> Rouse_ ©   (08.04.16 00:38) [37]
> Впрочем Игорь правильно меня поправил - можно расширить
> диапазон адресации, но как это обьяснить компилеру?

А не надо ему объяснять, адресация - она все 4 Гб памяти должна быть, по-моему. Ну раз ОС мне физически даёт туда доступ - почему компилятор это ограничивает? ("кто он вообще такой?!")

Впрочем, вы уже пояснили, похоже, логика разработчиков такая и была.


 
Pavia ©   (2016-04-08 08:50) [42]


> доступ - почему компилятор это ограничивает? ("кто он вообще
> такой?!")

D2 первый 32 битный компилятор создавался на Win98.
В Win98 все лазили выше 2Гб и поэтому она постоянно висла. небыло защиты от записи.
Если бы разработчики D2 не заприметили это то отладка стала бы кошмаром.


 
Pavia ©   (2016-04-08 08:54) [43]

*заприметили -> запретили


 
Rouse_ ©   (2016-04-08 10:01) [44]


> Pavia ©   (08.04.16 06:31) [40]
> Так у вас логика не правильная. Ядро отображалось в адресный
> процесс приложения для того что-бы приложение могло адресовать
> к ядру. Иначе нет смысла. К примеру чтение значение таймера.

Та шо ты такое говоришь, отображение значения таймера ядром в процесс идет по фиксированному адресу в виде структуры KE_USER_SHARED_DATA.
Показываю.
http://rouse.drkb.ru/tmp/1.gif


 
Rouse_ ©   (2016-04-08 10:04) [45]


> KSergey ©   (08.04.16 08:16) [41]
> А не надо ему объяснять, адресация - она все 4 Гб памяти
> должна быть, по-моему. Ну раз ОС мне физически даёт туда
> доступ - почему компилятор это ограничивает? ("кто он вообще
> такой?!")

Туда будет доступ если приложение собранного с использованием флага IMAGE_FILE_LARGE_ADDRESS_AWARE, указанного в FILE_HEADER.
По умолчанию данный флаг отключен и лимит для 32 бит именно $7FFFFFFF


 
KSergey ©   (2016-04-08 10:22) [46]

Rouse, отстаиваемая вами позиция понятна, но мир уже как бэ изменился и очень сильно.
Я ведь на с потолка придумал проблему, она в жизни имеет место быть, к сожалению. (Менеджер памяти подменён, да)


 
Игорь Шевченко ©   (2016-04-08 10:24) [47]

Pavia ©   (08.04.16 08:50) [42]


> D2 первый 32 битный компилятор создавался на Win98.
> В Win98 все лазили выше 2Гб и поэтому она постоянно висла.
>  небыло защиты от записи.


Это какой-то феерический трындец.

У меня к тебе огромная просьба - не пиши пожалуйста на форум, не оскорбляй мои религиозные чувства.


 
Rouse_ ©   (2016-04-08 10:27) [48]


> KSergey ©   (08.04.16 10:22) [46]
> Rouse, отстаиваемая вами позиция понятна, но мир уже как
> бэ изменился и очень сильно.

Это не позиция - это знания, подкрепленные как аргументами, так и фактами :)


 
NoUser ©   (2016-04-08 17:47) [49]

KSergey,
> почему компилятор это ограничивает?
сами просили "Check integer overflow" !

> но мир уже как бэ изменился и очень сильно.
ого, а проблема где проявилась:
на x32, x32+3G, x64 ?


 
Pavia ©   (2016-04-08 20:18) [50]


> Та шо ты такое говоришь, отображение значения таймера ядром
> в процесс идет по фиксированному адресу в виде структуры
> KE_USER_SHARED_DATA.Показываю.

Так я говорю про то что было в 98 году. И то что сейчас оно совершенно по другому. И уже не требуется приложениям лазить в ядро.


 
Rouse_ ©   (2016-04-09 00:26) [51]

Открою великую тайну - приложение даже в 95-98 годах в ядро не лезло, ну это так, для общего понимания


 
Германн ©   (2016-04-09 01:03) [52]

Удалено модератором


 
Rouse_ ©   (2016-04-09 01:36) [53]

Удалено модератором


 
Германн ©   (2016-04-09 02:45) [54]

Удалено модератором


 
Inovet ©   (2016-04-09 02:50) [55]

> [50] Pavia ©   (08.04.16 20:18)
> И уже не требуется приложениям лазить в ядро.

Одно удовольствие читать твои посты:) - так (я) и курить (табак) бросить. Пиши исчё.


 
Игорь Шевченко ©   (2016-04-10 10:37) [56]


> Но скажите мне: кто в борланде решил, что поинтер в Win32
> - знаковый?!


http://docwiki.embarcadero.com/RADStudio/XE8/en/Pointers_and_Pointer_Types_(Delphi)

Указатель беззнаковый тип (что вобщем-то разумно). Но с указателями недопустимы арифметические операции (если справку почитать). А если ты все-таки выполняешь эти операции, то компилятор приводит их к типу Integer, что тоже разумно.

Ни с какой адресацией памяти это не связано, просто совпадение.


 
KSergey ©   (2016-04-10 15:02) [57]

> Игорь Шевченко ©   (10.04.16 10:37) [56]
> Но с указателями недопустимы арифметические операции (если справку  почитать)

Да они издеваются!


 
Eraser ©   (2016-04-10 15:24) [58]

в дополнение к [56] надо отметить, что для работы с указателями, как с целыми числами лучше использовать тип UIntPtr/IntPtr ну или NativeUInt, иначе могут возникнуть проблемы на 64 битных версиях программы.


 
Mystic ©   (2016-04-11 15:29) [59]

Я так и не понял, был ли дан ответ: The SUB instruction performs integer subtraction. It evaluates the result for both signed and unsigned integer operands and sets the OF and CF flags to indicate an overflow in the signed or unsigned result, respectively. The SF flag indicates the sign of the signed result.

Проще говоря, OF показывает, было ли переполнение, если операнды рассматриваются как SIGNED. Например, для байта (-100) SUB (100) возникает переполение для SIGNED (-200 не помещается в байт). Для UNSIGNED переполнения нет (156) - (100) = 56, поэтому CF сброшен. Другой возможный случай, напримкр, когда (100) SUB (-100), тут тоже переполнение для SIGNED (200 не помещается в байт), и для UNSIGNED тоже (100) SUB (156) больше нуля.


 
Rouse_ ©   (2016-04-11 16:26) [60]


> Игорь Шевченко ©   (10.04.16 10:37) [56]
> Указатель беззнаковый тип (что вобщем-то разумно). Но с
> указателями недопустимы арифметические операции (если справку
> почитать). А если ты все-таки выполняешь эти операции, то
> компилятор приводит их к типу Integer, что тоже разумно.
>  
>
> Ни с какой адресацией памяти это не связано, просто совпадение.
>

Хм, ну странно конечно, но я как раз в какой-то из статей именно про эту адресацию и арифметические операции и читал (дабы не уплыло все, как говорится).
Попробую найти - не склероз же у меня.


 
Rouse_ ©   (2016-04-11 16:28) [61]

В противном случае нелогичность будет наблюдаться ибо матоперации сложения/вычитания/умножения могут производится и над незнаковыми числами и в этом случае нет смысла ограничивать их интом.


 
Inovet ©   (2016-04-11 16:57) [62]

> [61] Rouse_ ©   (11.04.16 16:28)
> сложения/вычитания/умножения

Не ну в Си, например, если я ничё не забыл, чётко определено сложение/вычитание с целым результат указатель, разность двух указателей результат целое, А умножение тут каким боком прикрутить?


 
Rouse_ ©   (2016-04-11 18:49) [63]

mov eax, [eax + edx * 4] к примеру


 
Inovet ©   (2016-04-11 21:55) [64]

> [63] Rouse_ ©   (11.04.16 18:49)
> mov eax, [eax + edx * 4] к примеру

Так здесь не указатель умножается, а индекс.


 
KSergey ©   (2016-04-12 08:59) [65]

Я, пожалуй, понял в чем были философские обоснования создателей.
Пока речь идёт про вычитание меньшего адреса из большего - всё укладывается в беззнаковые типы.
Но ведь программист может от меньшего указателя отнять больший. И даже, вероятно, ожидает получить отрицательное число, почему нет.
Чтобы эти коллизии как-то обыграть - придумали простое правило: приводить к знаковым.

Руки им за это оторвать.


 
Игорь Шевченко ©   (2016-04-12 12:24) [66]

KSergey ©   (12.04.16 08:59) [65]

Never attribute to malice which can be adequately explained by stupidity.


 
KSergey ©   (2016-04-12 13:41) [67]

Спасибо, (погуглив) узнал много нового.



Страницы: 1 2 вся ветка

Текущий архив: 2017.04.09;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.012 c
2-1438151711
ВладОшин
2015-07-29 09:35
2017.04.09
По handle окна, можно определить готово ли оно к вводу? (Key/Mou)


2-1439285376
Masterucs
2015-08-11 12:29
2017.04.09
Delphi XE: изменили FreeAndNil?


15-1454583291
KSergey
2016-02-04 13:54
2017.04.09
Вопрос про ASM команду sub


15-1458584450
Kilkennycat
2016-03-21 21:20
2017.04.09
Прощай, авиамоделизм.


4-1282656910
Unknown_user
2010-08-24 17:35
2017.04.09
Запрет получения фокуса приложения