Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Религиозные войны > Машинный язык программирования


Автор: gepard 18.8.2004, 13:06
Из темы "Смеёмся вместе" страница - 3, цитата поста Baa:
Цитата

Как оказалось, у нас пол института (научн. исслед.) знают ассемблер независимо от пола... и еще часть просто в машинных кодах пишут :\

Мне всегда было интересно: представляется ли возможным писать на машинных кодах?
Хотел спросить у вас: "Где я могу почитать инфу на эту тему? Попробовать самому писать. Может быть знаете ссылки на уроки. Или принципы какие-то?"

Автор: Sardar 18.8.2004, 13:26
Ассемблер это инструкции процессора описанные мнемониками. К одной мнемонике может быть много различных опкодов(машинные команды) в зависимости от используемых регистров + данные рядом и т.д. Наверное писать в машинных кодах подразумвалось в hex редакторе набирать опкоды вручную smile.gif
Цитата(gepard @ 18.8.2004, 12:06)
"Где я могу почитать инфу на эту тему? Попробовать самому писать. Может быть знаете ссылки на уроки. Или принципы какие-то?"

Нет никаких принципов и т.п. ибо это полный изврат biggrin.gif Пиши на асме.

Автор: Akina 18.8.2004, 14:03
gepard
Одно из двух - либо речь не о РС-совместимых машинах, либо чел не понимает чего написАл...

Автор: gepard 18.8.2004, 14:12
Это Baa-то не понимает?

Автор: GoodBoy 18.8.2004, 16:35
gepard
Как человек, писавший на машинных кодах могу тебе сказать - ПОЛНАЯ ЖОПА это!!!!! На асме - гемор писать, а в машкодах тем более!!!!!

Автор: oleg1973 18.8.2004, 18:00
GoodBoy
как чел пишущий на асме могу сказать- никакой там жопы нету и небыло
а вот в машкодах жопа smile.gif
помнится был у меня компутер Радио86рк, так в журналах типа Радио публиковали програмки в виде дампа , нечто типа
00FA ED01 AC98

и так далее smile.gif
вот это была жопа набиваить их smile.gif в дебуге smile.gif
я представляю себе варез в таком виде smile.gif))))

//windows LongHorn final reliz:
MZ0E45AD 46829300 00FEEFAA
и так далее листов на 100000 smile.gif)))

Автор: gepard 19.8.2004, 06:08
Меня, как программиста интересует этот способ написания программ.
GoodBoy
Может быть дашь пару уроков? Или линки?

Автор: lynx_916 19.8.2004, 11:18
gepard
у моего друга есть МОДЕЛИСТ КОНСТРУКТОР.
вот там я как-то видел.
прийду к нему, возьму, отсканирую, запостю. smile.gif

Автор: oleg1973 19.8.2004, 12:34
gepard
смысла нет писать в машкодах
смотри предположим код d90a заносит а регистр ax число 10
тоже самое будет mov ax,0a на асме после компиляции получим d90a
так что пиши на асме и не мучайся smile.gif

Автор: gepard 19.8.2004, 13:26
oleg1973
Я учить асм ещё не ьрался.
И ещё раз повторяю:
Цитата
Меня, как программиста интересует этот способ написания программ.

Я не собираюсь кодить на этом языке всерьёз. МНЕ ПРОСТО ИНТЕРЕСНО!

Автор: oleg1973 19.8.2004, 15:19
gepard
ну так в чем проблема?
идеш на интел.ком
качаеш оттуда opcodes list и вперед
там будет каждый опкод сопоставлен некой асм мнемонике

Автор: Sardar 19.8.2004, 22:46
gepard а оказывается ты знаешь толк в извращениях smile.gif

Автор: gepard 20.8.2004, 07:29
oleg1973
Вот человеку обложку для диска доделаю и пойду поинтересуюсь у интелов на эту тему smile.gif

Цитата
gepard а оказывается ты знаешь толк в извращениях

smile.gif

Автор: Zandr 20.8.2004, 09:11
Писал когда-то для ZX Spectrum на asm'е (перед этим пробовал вбивать hex, но это было только в самом начале, когда о трансляторах с асма в код даже не подозревал.. smile.gif )...
Особенно весело относительные переходы в hex считать, путать старшие-младшие байты при забивании hex'a (кода). gepard, если хочешь попробовать, то как раз в машинный код лезть и не нада. Чтобы вбивать код, нужно знать асм (а еще иметь под рукой таблицу соответствия команд асма hex кодам, конвертер dec<->hex, еще че-нить), потому что асмовские команды однозначно отображаются в hex команды (и наоборот). Это одно и то же. Только код предназначен для процессора, а асмовские команды для человека. Блин, не знаю какие аналогии привести..

Off. Пытался без дизасма в досовской игрухе "вечную жизнь" сделать. Смотрел в hex редакторе код и заменял по очереди call xxx на nop'ы и пытался смотреть что переставало работать... Только, слезши со спектрума, не знал я бедный, что на x86 nop = 0x90 (если правильно помню) а не 0x00, как на Z80... smile.gif smile.gif smile.gif

Автор: GoodBoy 20.8.2004, 12:55
gepard
Цитата(gepard @ 19.8.2004, 07:08)
Может быть дашь пару уроков? Или линки?


К сожалению линков на такое у меня нет, а пару уроков дать не смогу по причине того, что писали мы под "Поиски" (теоритически это IBM-совместимый компьютер biggrin.gif ) все это, да и прошло с тех пор уже лет 5...

:-))))))))))))))))

А лет 10 назад пробовал как-то что-то писать в таких кодах для БК0010-01... Там было еще прикольнее, потому, что нужно было писать не в HEX а в OCT системе счисления...

:-))))))))))))))))))))))))))

Автор: CD20 19.8.2005, 07:00
Я вот тоже начал учить асм и решил разобраться в машинных кодах.
Стало ясно, что они вычисляются определённым образом. Вот, что я смог пронаблюдать:
Цитата

--------------------------INT--------------------------
|HEX|     |ASSEMBLER|
-------------------------------------------------------

CD X   int X

--------------------------INC--------------------------
|HEX|     |ASSEMBLER|
-------------------------------------------------------

40   inc ax
FE C0  inc al
FE C4  inc ah

43   inc bx
FE C3  inc bl
FE C7  inc bh

41   inc cx
FE C1  inc cl
FE C5  inc ch

42   inc dx
FE C2  inc dl
FE C6  inc dh

--------------------------ADD--------------------------
|HEX|      |ASSEMBLER|           |EXAMPLE|
-------------------------------------------------------

05 X X add ax, X (05 09 00  = add ax, 9)
04 X           add al, X (04 09   = add al, 9)
80 C4 X  add ah, X (80 C4 09    = add ah, 9)

83 C3 X X add bx, X (83 C3 09    = add bx, 9)
80 C3 X add bl, X (80 C3 09    = add bl, 9)
80 C7 X add bh, X (80 C7 09    = add bh, 9)

83 C1 X X add cx, X (83 C1 09    = add cx, 9)
80 C1 X add cl, X (80 C1 09    = add cl, 9)
80 C5 X add ch, X (80 C5 09    = add ch, 9)

83 C2 X X add dx, X (83 C2 09    = add dx, 9)
80 C2 X add dl, X (80 C2 09    = add dl, 9)
80 C6 X add dh, X (80 C6 09    = add dh, 9)

--------------------------SUB--------------------------
|HEX|      |ASSEMBLER|           |EXAMPLE|
-------------------------------------------------------

2D X X      sub ax, X (2D 09 00  = sub ax, 9)
2C X         sub al, X (2C 09   = sub al, 9)
80 EC X    sub ah, X (80 EC 09    = sub ah, 9)

83 EB X X  sub bx, X (83 EB 09    = sub bx, 9)
80 EB X     sub bl, X (80 EB 09    = sub bl, 9)
80 EF X     sub bh, X (80 EF 09    = sub bh, 9)

83 E9 X X  sub cx, X (83 E9 09    = sub cx, 9)
80 E9 X     sub cl, X (80 E9 09    = sub cl, 9)
80 ED X     sub ch, X (80 ED 09    = sub ch, 9)

83 EA X X  sub dx, X (83 EA 09    = sub dx, 9)
80 EA X     sub dl, X (80 EA 09    = sub dl, 9)
80 EE X     sub dh, X (80 EE 09    = sub dh, 9)

--------------------------MOV--------------------------
|HEX|      |ASSEMBLER|           |EXAMPLE|
-------------------------------------------------------

B8 X X mov ax, X (B8 09 00  = mov ax, 9)
B0 X           mov al, X (B0 09   = mov al, 9)
B4 X           mov ah, X (80 09    = mov ah, 9)

BB X X mov bx, X (BB 09 00    = mov bx, 9)
B3 X   mov bl, X (B3 09  = mov bl, 9)
B7 X           mov bh, X (B7 09     = mov bh, 9)

B9 X           mov cx, X (B9 09 00  = mov cx, 9)
B1 X   mov cl, X (B1 09  = mov cl, 9)
B5 X           mov ch, X (B5 09  = mov ch, 9)

BA X X       mov dx, X (BA 09 00    = mov dx, 9)
B2 X           mov dl, X (B2 09  = mov dl, 9)
B6 X           mov dh, X (B6 09       = mov dh, 9)

Но они меняются в различных ситуациях, хоть и не сильно.
Кто-нить знает по каким лагоритмам они меняются?!!!

Автор: CD20 19.8.2005, 07:29
PS
Наверное, лучше будет перенести это в раздел "асма и прочих вопросов."

Автор: setq 19.8.2005, 09:47
в intel та часть команды, в которой находится код операции может содержать в себе биты, которые говорят что-то об операндах. алгоритма не знаю, но это где-то описано 100 пд.

Автор: CD20 19.8.2005, 13:25
Короче, пипл. Коды жёстко проставлены. То бишь: то, что я привёл таблицу - она верная!
Есесно только не полная.

Автор: Akina 19.8.2005, 13:53
Код команды формируется по не самому простому принципу...

Перед командой может быть предикат - скажем переопределение сегмента операнда. Опкод команды может включать в себя биты, определяющие тип операнда и - для сегментных или битов флага - конкретное указание операнда. Затем идут данные - адреса и/или непосредственные значения.

Подробнее - шагай на сайт Интела (или, если хочешь, АМД) и качай офигенного размеру PDF с названием типа "Intel Pentium IV opcode Datasheet"... чтиво на ночь лет на несколько.

По сабжу. Я много написАл в свое врема программ в машинных кодах - для Электроники Д3-28. Однако там это было оправдано - набор команд весьма компактный (не RISC, но около того), нет такой развесистой клюквы регистров, плоская страничная память... АСМ-среды не было, а прилагаемый Барсик еле ворочался на самых простых вещах... даже ВТ-128С решал проблему лишь наполовину... а программы были такие, что обрабатывали массив данных по 3-4 месяца непрерывно - так что скорость работы была более чем критична.

Автор: Дрон 19.8.2005, 14:04
Цитата(Akina @ 19.8.2005, 14:53)
Однако там это было оправдано

Года полтора назад в одной из своих программ на С++ для Windows реализовал code-injection машинных кодов -- просто создавался массив, в него записывались числа, устанавливалось разрешение на исполнение и вперёд smile

Там разбиралось математичекое выражение и по нему строилась подпрограмма его вычисления. А поскольку это выражение нужно было считать около 50 раз в секунду -- то решение вполне оправданно.
Добавлено @ 14:07
Как справочником пользовался описанием интеловского 486 процессора. Мне хватило smile

Особенно понравилось то, что, например, при перестановки некоторых независимых инструкций местами можно получать выигрышь в быстродействии аж до 10% !!! smile

Автор: Mayk 20.8.2005, 05:51
Цитата
Особенно понравилось то, что, например, при перестановки некоторых независимых инструкций местами можно получать выигрышь в быстродействии аж до 10% !!!

У Зубкова в "Ассемблер для DOS, Win, Unix" указывается, что возможно до сделать ускорение на 200% smile Еще впечатляет, что ускорение можно получить добавив команду NOP smile.

Автор: Mephistopheles 19.12.2005, 05:14
Команда - слово - 2 байта.
Формируется по битам. Вот, блин, где узнать: как?

Автор: batigoal 20.12.2005, 09:53
Цитата(Mephistopheles @ 19.12.2005, 06:14)
Команда - слово - 2 байта.
Формируется по битам. Вот, блин, где узнать: как?

В справочных материалах по процессорам, по всей видимости.

Автор: rsm 20.12.2005, 11:05
Любителям мышинных кодов посвящается цикл статей "Заклинание кода": http://wasm.ru/article.php?article=codech01 http://wasm.ru/article.php?article=codech02 http://wasm.ru/article.php?article=codech03 http://wasm.ru/article.php?article=codech04 http://wasm.ru/article.php?article=codech05 http://wasm.ru/article.php?article=codech06 http://wasm.ru/article.php?article=codech07

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)