Сейчас на форуме: tyns777, zds (+3 невидимых)

 eXeL@B —› Программирование —› Асм вставки в Delphi
Посл.ответ Сообщение


Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 31 октября 2009 02:31 · Поправил: Sunzer
· Личное сообщение · #1

Есть какие то дерективы компилятора что бы ассемблерные вставки были без префикса 3Eh ?

Code:
  1. 3E:8B13         MOV EDX,DWORD PTR DS:[EBX]

Code:
  1. 8B13            MOV EDX,DWORD PTR DS:[EBX]




Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 31 октября 2009 02:46
· Личное сообщение · #2

А ты не пиши DS: и не будет 3Eh




Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 31 октября 2009 12:21 · Поправил: Sunzer
· Личное сообщение · #3

Да, работает, а зачем этот префикс.
Масм такой код не генерирует, как не пиши.

CS=2e,
DS=3e,
ES=26h,
SS=36,
FS=64,
GS=65.

И что я могу потерять без этих префиксов?




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 31 октября 2009 13:05
· Личное сообщение · #4

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

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 31 октября 2009 13:06
· Личное сообщение · #5

Sunzer пишет:
а зачем этот префикс


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

Sunzer пишет:
И что я могу потерять без этих префиксов?

Для этого нужно посмотреть информацию о окружении вашего процесса, когда вы получаете управление от операционной системы на точку входа. Ибо можно наступить на исключение

xor eax,eax
mov ecx, fs:[ebx] ; OK!
mov ecx, [ebx] ; Exception

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 31 октября 2009 13:10 · Поправил: Sunzer
· Личное сообщение · #6

Code:
  1. xor eax,eax
  2. mov ecx, fs:[ebx] ; OK!
  3. mov ecx, [ebx] ; Exception

Это и так понятно, а различия опкодов в первом посте какие?

Цитата:
во всех остальных случаях, если не используется префикс замены сегмента, доступ к памяти осуществляется с использованием сегментного регистра DS. При наличии префикса замены сегмента вместо DS используется указанный префиксом сегментный регистр.

Именно в моем примере из первого поста, я так понял различий никаких, даже без перфиксов
префикс "будет" DS



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2009 03:41 · Поправил: Kai
· Личное сообщение · #7

Sunzer
Интересно как вы криптовали, не понимаю механизмов сегментации
Если префикса переопределения сегмента нет, то используется дефолтное значение. Это может быть не только Ds, например сегмент кода(Cs) или стека(Ss).
OKOB
> mov ecx, fs:[ebx] ; OK!
Обьясните это:
Code:
  1. XXXX:
  2.          assume fs:nothing
  3.          ; DS = KGDT_R3_DATA | RPL_MASK
  4.          mov ecx,dword ptr ds:[XXXX]        ; OK!
  5. ; ~
  6.          push dword ptr 0
  7.          pop ds
  8.          mov ecx,dword ptr ds:[XXXX]        ; Error!
  9. ; ~
  10.          push dword ptr 0
  11.          pop ds
  12.          mov eax,fs:[8]
  13.          mov ecx,dword ptr cs:[eax - 1]
  14.          mov ecx,dword ptr ds:[XXXX]        ; OK!
  15.          push dword ptr 0
  16.          pop ds
  17.          mov ecx,dword ptr cs:[eax - 1]
  18.          mov ecx,dword ptr ds:[XXXX]        ; Error!
  19. ; ~
  20.          push fs
  21.          ; FS = KGDT_R3_TEB or RPL_MASK
  22.          pop ds
  23.          mov eax,dword ptr ds:[XXXX]        ; Error!
  24.          mov eax,ds:[8]
  25.          cmp dword ptr cs:[eax - 4],eax
  26.          mov eax,dword ptr ds:[XXXX]        ; OK!
  27. ; ~
  28.          xor eax,eax
  29.          xchg fs:[8],eax
  30.          fild dword ptr ds:[eax - 4]
  31.          mov eax,fs:[8]
  32.          mov eax,dword ptr ds:[eax]         ; OK!






Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 04 ноября 2009 14:24 · Поправил: Sunzer
· Личное сообщение · #8

Я уже все давно понял. Спасибо.


 eXeL@B —› Программирование —› Асм вставки в Delphi
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати