Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Результаты опроса: Delphi Xe2, что скажите?
Супер. 5 25.00%
Нравится. 4 20.00%
Не нравится. 0 0%
Ужас. 1 5.00%
Лучше чем Delphi 7, ненайти. 7 35.00%
Другое. 3 15.00%
Голосовавшие: 20. Вы еще не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 09.06.2012, 11:24
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

По сути ассемблер для х64 отличается тем, что в нем есть qword (и регистры вроде с приставкой "r" - "rax, rbx, rdx...") и еще несколько новых команд, остальное все то же самое.

http://www.wasm.ru/forum/viewtopic.php?id=22744

Последний раз редактировалось M.A.D.M.A.N., 09.06.2012 в 11:27.
Ответить с цитированием
  #17  
Старый 09.06.2012, 11:27
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ассемблер - не самое главное, ИМХО, структра экзешника тож наверное отличается.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #18  
Старый 09.06.2012, 11:53
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Ассемблер - не самое главное, ИМХО, структра экзешника тож наверное отличается.
Вот специально проверю.

Если пойдет дальше пойдет, то можно будет создавать новый раздел форума "Delphi X64".
Ответить с цитированием
  #19  
Старый 09.06.2012, 12:24
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
о сути ассемблер для х64 отличается тем, что в нем есть qword (и регистры вроде с приставкой "r" - "rax, rbx, rdx...") и еще несколько новых команд, остальное все то же самое.
Особо в описание машинных кодов не вчитывался, но если правильно понял, то даже коды команд под x32 оставлены без изменений; все, что относится к x64 (qword'ы, rax, rbx,...) реализовано с помощью префиксов, не существующих в х32. То есть совместимость максимальная: код под х32, запущенный под х64, может и заработать...

Только что проверил - в своей х64 оси использовал х32 код:
Код:
use32
     mov eax, 1
     mov ebx, eax
     cmp eax, ebx
     test eax, eax
     add ebx, ecx
     mov eax, 1024*1024-4
     mov [eax], ebx 
(не надо пытаться понять смысл, это просто куча команд.)
Выполнилось без ошибок.
Из того что помню разница в push и pop: push 4 байт заменен на соответствующий push 8 байт.

А вот структура екзешника отличается, насколько я знаю: там указывается битность.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 09.06.2012 в 12:28.
Ответить с цитированием
  #20  
Старый 09.06.2012, 12:26
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Вот специально проверю.

Если пойдет дальше пойдет, то можно будет создавать новый раздел форума "Delphi X64".
Я думаю, что уже пора создавать такой раздел.
Ответить с цитированием
  #21  
Старый 09.06.2012, 13:00
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Про программные скобки.
Код:
procedure DivMod(Dividend: UInt64; Divisor: UInt64;
  var Result, Remainder: UInt64); overload;
{$IF DEFINED(CPUX64) and NOT DEFINED(PUREPASCAL_X64)}
asm
        MOV     R10,RDX
        MOV     RAX,RCX
        XOR     EDX,EDX
        DIV     R10
        MOV     [R8],RAX
        MOV     [R9],RDX
end;
{$ELSEIF DEFINED(CPUX86) and NOT DEFINED(PUREPASCAL)}
// Merged from system __lludiv and __llumod
asm
        PUSH    EBX
        PUSH    ESI
        PUSH    EDI
        PUSH    EAX
        PUSH    EDX
//
//       Now the stack looks something like this:
//
//               40[esp]: Dividend(high dword)
//               36[esp]: Dividend(low dword)
//               32[esp]: divisor (high dword)
//               28[esp]: divisor (low dword)
//               24[esp]: return EIP
//               20[esp]: previous EBP
//               16[esp]: previous EBX
//               12[esp]: previous ESI
//                8[esp]: previous EDI
//                4[esp]: previous EAX  Result ptr
//                 [esp]: previous EDX  Remainder ptr
//
        MOV     EBX,28[ESP]             // get the divisor low word
        MOV     ECX,32[ESP]             // get the divisor high word
        MOV     EAX,36[ESP]             // get the dividend low word
        MOV     EDX,40[ESP]             // get the dividend high word

        OR      ECX,ECX
        JNZ     @DivMod64@slow_ldiv     // both high words are zero

        OR      EDX,EDX
        JZ      @DivMod64@quick_ldiv

        OR      EBX,EBX
        JZ      @DivMod64@quick_ldiv    // if ecx:ebx == 0 force a zero divide
          // we don't expect this to actually
          // work
@DivMod64@slow_ldiv:
        MOV     EBP,ECX
        MOV     ECX,64                  // shift counter
        XOR     EDI,EDI                 // fake a 64 bit dividend
        XOR     ESI,ESI                 //

@DivMod64@xloop:
        SHL     EAX,1                   // shift dividend left one bit
        RCL     EDX,1
        RCL     ESI,1
        RCL     EDI,1
        CMP     EDI,EBP                 // dividend larger?
        JB      @DivMod64@nosub
        JA      @DivMod64@subtract
        CMP     ESI,EBX                 // maybe
        JB      @DivMod64@nosub

@DivMod64@subtract:
        SUB     ESI,EBX
        SBB     EDI,EBP                 // subtract the divisor
        INC     EAX                     // build quotient

@DivMod64@nosub:
        LOOP    @DivMod64@xloop
//
//       When done with the loop the four registers values' look like:
//
//       |     edi    |    esi     |    edx     |    eax     |
//       |        remainder        |         quotient        |
//
        JMP     @DivMod64@finish

@DivMod64@quick_ldiv:
        DIV     EBX                     // unsigned divide
        MOV     ESI,EDX
        XOR     EDX,EDX
        XOR     EDI,EDI

@DivMod64@finish:
        POP     EBX
        POP     ECX
        MOV     [EBX],ESI
        MOV     [EBX+4],EDI
        MOV     [ECX],EAX
        MOV     [ECX+4],EDX

        POP     EDI
        POP     ESI
        POP     EBX
end;
{$ELSE PUREPASCAL}
begin
  Result := Dividend div Divisor;
  Remainder := Dividend mod Divisor;
end;
{$IFEND}
Вырезал из System.Math .
Можете объяснить, как этот кусочек работает? И для какой он х32 или х64 или для обоих сразу.

Последний раз редактировалось ined, 09.06.2012 в 13:08.
Ответить с цитированием
  #22  
Старый 09.06.2012, 13:14
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Для обоих. Написано 2 кода на ассемблере, один используется при компиляции в х64 (первый), другой - для х32 (второй). Выбор делается директивами компилятору {$IF...}, {$ELSEIF...}
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #23  
Старый 09.06.2012, 13:57
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Цитата:
Сообщение от Aristarh Dark
На самом деле, есть clear, если уж очень надо.
А что это clear, если это кнопка то я её не нашёл.
Ответить с цитированием
  #24  
Старый 09.06.2012, 14:11
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Использую в основном FASM, VS10 и GCC. Делфи "на всякий случай" стоит седьмая. По ХЕ2 - юзал одно время, не впечатлило.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #25  
Старый 09.06.2012, 14:59
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну дельфи вроде как язык высоко уровня, так, что АСМ в дельфи -- это либо понты, либо крайняя необходимость.
Ответить с цитированием
  #26  
Старый 09.06.2012, 15:06
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ined
Я думаю, что уже пора создавать такой раздел.
Ща просто по этой теме мало кто работает, да и по сути прозрачно должно компиляться (по крайней мере прикладуха всякая).

Феникс, а как же масм?

Последний раз редактировалось M.A.D.M.A.N., 09.06.2012 в 15:13.
Ответить с цитированием
  #27  
Старый 09.06.2012, 16:09
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

По XE2 мне в частности не понравилось то, что многие юниты стали вида System.Graphics (или как-то так), в результате чего многие старые вещи компилятся с трудом.

M.A.D.M.A.N., масм не соответствует религии.
А если серьёзно - я считаю FASM на порядок удобнее и логичнее масма. Примерно наравне идет NASM, третьим я бы поставил TASM, а MASM - последним. Ну и я чуть-чуть посодействовал Фениксу в выборе асмы.

А асм в делфи - не понты. Его ж очень активно используют в стандартных юнитах, чтобы самые широко юзаемые функции ускорить.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #28  
Старый 09.06.2012, 17:03
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ined
А что это clear, если это кнопка то я её не нашёл.
Опечатался, не clear, а clean.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #29  
Старый 09.06.2012, 21:46
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Bargest
А если серьёзно - я считаю FASM на порядок удобнее и логичнее масма. Примерно наравне идет NASM, третьим я бы поставил TASM, а MASM - последним..
Предагаю написать что-нибудь на чистом TASM-е (не Hello World). Вот посмеёмся.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #30  
Старый 12.06.2012, 16:55
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Странно. И больше никаких вопросов по Delphi Xe2 ни у кого не возникает?
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter