Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Кто-нибудь объясните подробно следующую схему...
Посл.ответ Сообщение

Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 24 июня 2006 01:32
· Личное сообщение · #1

Кто-нибудь объясните подробно следующую схему...

4477_24.06.2006_CRACKLAB.rU.tgz - commands.jpg



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 24 июня 2006 02:00
· Личное сообщение · #2

Я рад, что хоть кто-то сюда приходит обучаться, дельным вещам. Но всё-таки, постарайся сам приложить усилия и дело пойдёт.
В дальнейшем, пожалуйста, конкретизируй вопросы. Ибо пересказывать пол учебника по Асму здесь никто не станет.

Для того чтобы понять устройство команд процессора, нужно потыркаться самому в отладчике или хотя бы в Hiew'e. А ещё в этом деле мне очень помогли обучалки Svin'a:
www.wasm.ru/toollist.php?list=22

-----
Всем привет, я вернулся




Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 24 июня 2006 13:05
· Личное сообщение · #3

Там мануал на английском,а я в нем мало что понимаю.
1)Объясните мне следующую схему:
1. Prefixes
2. Code
3. byte mod r/m
4. byte sib
5. offset in command
6. imm. operand.

Т.е. объясните, что обозначает каждый из пунктов.

2) Почему когда в FASM'е комманды типа "mov eax,1" FASM вставляет преффикс 66,
а перед "xor eax,eax" ничего не вставляет.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 24 июня 2006 13:47
· Личное сообщение · #4

sniperZ пишет:
1)Объясните мне следующую схему:
1. Prefixes
2. Code
3. byte mod r/m
4. byte sib
5. offset in command
6. imm. operand.

Это есть в любом справочнике по опкодам или ассемблеру. Есть и на русском.



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 24 июня 2006 14:08 · Поправил: sniperZ
· Личное сообщение · #5

tundra37 пишет:
Это есть в любом справочнике по опкодам или ассемблеру. Есть и на русском.


Ты скажи в каком,а лучше приведи ссылку.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 24 июня 2006 15:43
· Личное сообщение · #6

sniperZ пишет:
2) Почему когда в FASM'е комманды типа "mov eax,1" FASM вставляет преффикс 66,
а перед "xor eax,eax" ничего не вставляет.

По умолчанию (без директивы use32) FASM считает, что файл будет исполняться в 16-битной среде (то есть в сегменте памяти с 16-битными адресами и размерами операндов).
Команда Ассемблера mov EAX,1 и mov AX,1 имеет общий опкод.
Причина в том, что трактовка этого кода зависит от режима разрядности операндов.
В защищённом режиме в каждом дескрипторе сегмента есть так называемый бит D, который и определяет режим адресации и размера операнда (16 или 32 бита). Само собой, в Win32 программы имеют именно 32-битный, размера адресов и операндов.

66h – префикс размера операнда. По сути дела этот префикс меняет значение размера операнда установленное битом D на противоположное.
Показываю одни и теже байты.
В 16-битной трактовке:
00000000: 66B801000000 mov eax,1
00000006: B80100 mov ax,1
00000009: 0000 add [bx][si],al

В 32-битной трактовке:
00000000: 66B80100 mov ax,1
00000004: 0000 add [eax],al
00000006: B801000000 mov eax,1


sniperZ пишет:
В каком,а лучше

На русском учебник Юрова (все три тома). Правда читать его сложно.

-----
Всем привет, я вернулся




Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 24 июня 2006 19:53
· Личное сообщение · #7

Короче,нихрена не пойму.

Допустим, мне надо перевести "mov EAX,5" и "xor EAX,EAX" в машинный код.
Напишите подробно как это делать.



Ранг: 15.3 (новичок)
Активность: 0.020
Статус: Участник

Создано: 24 июня 2006 20:00
· Личное сообщение · #8

sniperZ пишет:
Допустим, мне надо перевести "mov EAX,5" и "xor EAX,EAX" в машинный код.
Напишите подробно как это делать.

в масм32 есть в папке хелп opcodes.hlp
берешь его и смотришь формат опкода и собственно опкод
там все варианты большинства команд проца



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 25 июня 2006 00:03
· Личное сообщение · #9

Bitfry:
66B80100 mov ax,1
B801000000 mov eax,1

Объясни мне этот маш. код.

Теперь помогите мне перевести "mov EAX,5" в маш. код.

Опкод mov - B8.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 25 июня 2006 01:03
· Личное сообщение · #10

sniperZ пишет:
Опкод mov - B8.

Cразу врубиться очень трудно. Со временем ты сам начнешь замечать закономерности.
Если взять все опкоды команды mov вместе с CR и DR регистрами, то их по справке МАСМа 30 штук.
Ты привёл пример:
mov EAX,5

Каждая команда может отвечать на три вопроса:
Что делать?
С чем делать?
Как делать?
(последний вопрос необязателен).

Для того чтобы сформировать машинный код команды, нам нужно знать ответ все вопросы.
Твой пример нужно трактовать так:
поместить в регистр общего назначения непосредственный операнд.
А если на языке справочников то так:
mov r16,imm16 или mov r32, imm32
Смотрим в справочнике опкод – B8.
А дальше как я уже сказал выше, всё зависит от режима адресации.
В 32-битном коде:
опкод операнд (dword)
B8 05000000
В 16-битном коде:
Префикс опкод операнд (dword)
66 B8 01000000

Если хочешь разобраться по настоящему, скачай дизассемблер MR-Rem'a:
www.wasm.ru/baixado.php?mode=tool&id=350

И не стоит так сразу во всё лезть, а тем более заваливать форум торопливыми вопросами.
ЗЫ Тише едешь – больше увидишь.

-----
Всем привет, я вернулся



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


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