1

Тема: Що таке мова асемблера і з чим її їдять

Стаття ще пишеться

Колись давно, комп'ютери були великі та складалися з ламп. Вони програмувалися в машинному коді напряму. Як це? Програміст брав довідник і читав - для того, щоби завантажити в комірку пам'яті під номером 7 значення 13 треба спочатку написати код операції, потім номер комірки пам'яті, а тоді вже саме числове значення, яке завантажується в цю комірку. Комп'ютер здатний працювати лише з двійковими даними, тому програми писалися так само. Для більш щільного запису двійкових даних застосовується шістнадцяткова система числення. Двійкові данні розбиваються на октети або байти, по 8 розрядів в кожному. Кожен двійковий розряд називається біт. Себто байт складається з 8 біт.
Машинний код вищевказаної команди для х86 сумісного сучасного процесора записується так: c6 05 07 00 00 00 0d.
Оскільки х86 процесор 32-розрядний, тому адреси також мають 32 розрядні (4-байтові) значення. Процесори х86 сумісні зберігають числа "догори дригом", себто спочатку йдуть молодші байти. Докладніше про порядок байтів можна почитати тут. Саме тому число 7 записується як 07 00 00 00. В вищенаведеній команді c6 05 це код операції, 07 00 00 00 це адреса комірки пам'яті, а 0d - майбутнє значення комірки пам'яті.
mov    BYTE PTR ds:0x7,0xd

Подякували: Chemist-i, plusxx, koala, FakiNyan, Q-bart, ostap34PHP, leofun017

2

Re: Що таке мова асемблера і з чим її їдять

Підписуюся і обкладаюся попкорном.

3

Re: Що таке мова асемблера і з чим її їдять

лурк...

Асемблер або asm (англ. Assembler - складальник) - утиліта, яка транслює вихідні програми мовою асемблера власне в машинний код, тобто мовою бездушної машини. Для зворотного перетворення існує дизассемблер (англ. Disassembler - розбірник, ламалка), широко використовуваний хакерами. Але це для шибко грамотних, а всі інші словом «асемблер» називають саму мову асемблера - найпростіший спосіб запису машинного коду за допомогою расових англійських скорочень, так званих мнемоників (див. В кінці статті - якщо подужаєте). Оскільки мова асемблера прив'язана до пристрою процесора, програми на ньому не переносяться на іншу комп'ютерну архітектуру, тому що тип процесора жорстко визначає набір доступних команд машинної мови. Але це не так вже й важливо, тому що немає процесора окрім x86 і фон Нейман пророк його, а всякі Жаби і дотнети взагалі використовують власні віртуальні машини з власним асмом - по*, що в тисячу разів повільніше, проте переносність та безпеку, блджад! Також, використовуючи макроси, юний друг зможе переконатися у відсутності принципової різниці між асмом і всіма іншими «православними» мовами..

Подякували: koala1

4

Re: Що таке мова асемблера і з чим її їдять

А що таке "лурк"?

5

Re: Що таке мова асемблера і з чим її їдять

koala написав:

А що таке "лурк"?

кацапський сайт для розумово відсталих

Подякували: koala, itakal, bebyk3

6

Re: Що таке мова асемблера і з чим її їдять

FakiNyan Не дивно, шо розумово вiдсталий саме звiдти скопiював текст, а також не дивно що його Покровитель на це закрив очi.

0xDADA11C7, дуже добре що ви знову пишете статi , не звертайте увагу на пiвника, пишiть. Знання ассемблеру потрiбно всiм программiстам.

7

Re: Що таке мова асемблера і з чим її їдять

Може, напишете не про x86, а про щось простіше? ARM чи байт-код Java. До речі, є така цікава штука, як режим Jazelle на ARM.

8

Re: Що таке мова асемблера і з чим її їдять

Вивчення мов (у т.ч., мов програмування) впирається не в простоту чи складність, а в можливість практичного застосування. Викладання асемблера в ВУЗах застрягло на рівні 80-х років не тому, що далі після 386-го процесора якісь надскладні команди пішли, а просто через те, що сфера практичного застосування асемблера прикладним програмістом після 80-х звузилась і зникла. Не треба спрощувати до дитсадківського рівня — покажіть краще, як з мінімумом асемблерних знань можна зробити щось крутезне, чого не зробиш на банальному сішнику, джаві чи пітоні.

Подякували: plusxx1

9

Re: Що таке мова асемблера і з чим її їдять

Так, особисто для мене асемблер звузився до розбору kernel panic та мати на увазі приблизну вартість операцій, схованих за абстракціями навіть низькорівневого С-шного коду («Закон дірявих абстракцій», егеж).  Але у останньому випадкові бува не так сам асм, як взагалі побудова сучасних систем.

Мені аж гикалося, як

побачив зміну коду, коли великий масив структур, по суті, кільцевий буфер керуючих структур, переписали на структури масивів дескрипторів. Тим самим рознесли дані, що використовуються спільно, взагалі по різних 4-кілобайтних сторінках пам'яті і передали привіт не лише лінійкам кеша даних, а й TLB-кешу.

Дотичне, але вже зовсім чуже

Був здивований, коли дізнався, що про те, що буде на асмі, задумуються десь далеко від заліза. Тому коли побачив оголошення, то сходив
на Мікрооптимізації і дизасемблер. Приземлене програмування в часи хмарних технологiй.
Потім ще патчик зробив, але компілятори таки сильно по різному досі поводяться.

Подякували: leofun011

10

Re: Що таке мова асемблера і з чим її їдять

насправді зараз час такий що програми написані на асемблері швидко працювати не будуть, за часів DOS так це було можливо, а зараз крім асемблеру є ще можливості ОС. Тоді практично було простіше і процесори не були великими. Зараз асемблер можна вчити, але на мікроконтролери, так що юзайте ардуіно.
Всі приклади які є це регістрове програмування з стеком, а ще є такі інструкції як MMX SSE 1-4, AES, уявляєте скільки життя потрібно щоб це все осилити ?

Подякували: leofun011

11

Re: Що таке мова асемблера і з чим її їдять

reverse2500 написав:

а ще є такі інструкції як MMX SSE 1-4, AES, уявляєте скільки життя потрібно щоб це все осилити ?

Тим не менше, це реально. Осилити можна за рiк, маючи якусь базу.
я писав на AVX-512 / AES NI алгоси.

12 Востаннє редагувалося monoxrom (20.08.2020 06:59:03)

Re: Що таке мова асемблера і з чим її їдять

Гарна тема, асемблер це дуже крута річ.

А чого тільки варті мітки без яких там не обійтись, від яких чомусь плюються сучасні програмісти :)
Але мітки то ще пів біди, уявляю як горять зади в противників міток, так як в асемблері можна переходити кудись і без міток! Так сказати скачок в нікуди :)
Так як мітка займає мінімум 1 байт, то можна зекономити і зробити перехід в програмі і без мітки, правда для цього треба наперед знати скільки пам'яті у вас займають команди через які треба перескочити

А коли дивишся код вірусів на асемблері то це щось справді захоплююче, наприклад вірус відомий як win.cih я прикріпив до повідомлення.
Думаю адміни форуму не будуть мене карати за розповсюдження небезпечного ПЗ? (тим більше в системах NT вірус не здатний діяти) так що він тут виключно в наукових і ознайомчих цілях.
Варто глянути код, чого вартий тільки набраний вручну масив на початку файлу, це заголовок exe файлу PE формату, так як ми робимо віндовсовський ексешнік вручну!
І взагалі це все компілюється як сом файл але називається в кінці exe і так як все правильно то файл робочий, пофіг що зроблений вручну :) До речі при компіляції у мене зразу ж спрацьовує антивірус, так що можете перевірити свій антивірус ;)

На рахунок прикладів чого не можна зробити на С... Ну в мене є маленькі програми на асемблері, всякі так звані демки де демонструються графічні ефекти, найменші програми по 128 байт! так так НЕ кілобайт а просто байт і вони виводять різну графіку, як це можна було запрограмити - фантастика. А ті програми що більші в районі 4 кілобайти то там взагалі космос

вибачайте за коменти на мокшанському язику, то не я писав ))))

І взагалі згадався мем який я намалював тижня 2 назад:
https://replace.org.ua/extensions/om_images/img/5f3d72dae94c3/2_fdef15d0fe265cf216224b697607ca22.jpg

Post's attachments

cih.zip 10.56 kb, 488 downloads since 2020-08-19 

Подякували: 0xDADA11C7, reverse25002

13 Востаннє редагувалося koala (19.08.2020 21:10:34)

Re: Що таке мова асемблера і з чим її їдять

monoxrom написав:

Так як мітка займає мінімум 1 байт, то можна зекономити

От і попкорн згодився
https://media1.tenor.com/images/d44a5abe18833739d27687b5b56d5c76/tenor.gif?itemid=5102037

Подякували: leofun01, ReAl2

14

Re: Що таке мова асемблера і з чим її їдять

monoxrom написав:

чого вартий тільки набраний вручну масив на початку файлу

Півгодини копирсання в документації та 20 хвилин на написання простенької програми на чомусь високорівневому для перекодування заголовку будь-якого EXE-шника в масив байтів мовою асемблера?

15

Re: Що таке мова асемблера і з чим її їдять

^
справа не в масиві як такому, а в тому що це вручну набраний заголовок програми для віндовс
Програма для віндовс складається з кількох сегментів, які мають бути правильно оформлені компілятором. Тут же все зроблено не компілятором, а підігнано вручну

16

Re: Що таке мова асемблера і з чим її їдять

Теж менi бiном ньютона.. достатньо знати РЕ формат.

17

Re: Що таке мова асемблера і з чим її їдять

"Віруси майбутнього будуть називати себе антивірусами". Аха. Ми, панове, вже живемо у майбутньому...

18

Re: Що таке мова асемблера і з чим її їдять

koala написав:
monoxrom написав:

чого вартий тільки набраний вручну масив на початку файлу

Півгодини копирсання в документації та 20 хвилин на написання простенької програми на чомусь високорівневому для перекодування заголовку будь-якого EXE-шника в масив байтів мовою асемблера?

srec_cat, вхідний формат BIN (довільний exe, вказати довжину від початку яку треба взяти), вихідний формат ASM

19

Re: Що таке мова асемблера і з чим її їдять

Яка там доля статті?

Подякували: 0xDADA11C71

20

Re: Що таке мова асемблера і з чим її їдять

Зараз я працюю майже без вихідних, статтю обовязково допишу.

Подякували: koala, Chemist-i, leofun013