Help - Search - Members - Calendar
Full Version: Assembler... і в чому зло Черняхівського
DEV UA > Інше > Інші мови програмування
professor
Напала на мене дурка - вивчити те, чого так і не змогли мене навчити в універі, а саме - асм.
Ну себто вчились ми на такому собі середовищі склепаному в турбовіжині, схожому чимось на трубопаскакаль... І ще там була система макросів, для початку проги, для кінця проги... Для інпуту-аутпуту... Може воно то було і класно, чисто програмити зручніше, але! Який тоді понт взагалі в тому асемблері? Зразу вже тоді треба було на високий рівень, до паскаля-сіплюсів, і без ніяких. Про переривання нам ніхто розказати не удосужився, і через ті макроси в мене було дивне відчуття, що чогось я таки не довчив, чогось бракує. В результаті натикаючись десь на асмовий код, я навіть не намагався в ньому розчехлитись...

А слабо з нуля ком-програмку в хекс-редакторі накидати? Мені було слабо) Но! Тепер я знаю про переривання! Тепер я знаю про особливості адресації в ком-програмах! І все це за один вечір! Я тепер навіть при бажанні можу без транслятора мінімальні проги писати)))

Вердикт - нафік викинути з універського курсу середовище Черняхівського.
professor
п.с. Ну може не середовище, а тільки знамените libmacro
Pegasus
Мені здається, що ти не зовсім правий. Так як в універі на прикладній готують, так би мовити "чистих" софтверників, то переривання і решта подібних речей, які мають більше відношення до заліза, нам не викладали, для того треба іти в політех, там і "залізо вчать" wink.gif А ми вчили асемблер тільки для того, щоб оптимізувати деякі обчислення, чисто математичні, для того переривань не треба. проблема в тому, що за один семестр, маючи одну пару на тиждень навіть то нормально вивчити важко. Тільки ази, які потім і так забудуться без практики.
Як на мене той курс зараз не актуальний і не відображає потребу ринку.
П.С. Єдине, що мені закарбувалося з того курсу - це то, що перевірка типу "не рівне" працює в чотири рази швидше ніж перевірка на "рівне" biggrin.gif
professor
ЦИТАТА(Pegasus @ 15.4.2008, 16:53) *
Мені здається, що ти не зовсім правий. Так як в універі на прикладній готують, так би мовити "чистих" софтверників, то переривання і решта подібних речей, які мають більше відношення до заліза, нам не викладали, для того треба іти в політех, там і "залізо вчать" wink.gif А ми вчили асемблер тільки для того, щоб оптимізувати деякі обчислення, чисто математичні, для того переривань не треба. проблема в тому, що за один семестр, маючи одну пару на тиждень навіть то нормально вивчити важко. Тільки ази, які потім і так забудуться без практики.
Як на мене той курс зараз не актуальний і не відображає потребу ринку.
П.С. Єдине, що мені закарбувалося з того курсу - це то, що перевірка типу "не рівне" працює в чотири рази швидше ніж перевірка на "рівне" biggrin.gif

На рахунок переривань ти неправий. По меншій мірі для цілісності картини писати IO на асмі треба теж через переривання.
І щодо оптимізації. Ти знаєш, як написати асемблерну вставку в паскалі чи на сях? я не про синтаксис питаю, а про то, як склеїти їх з високорівневим кодом. Тебе вчили, що приходить зі стеком в процедуру? тебе вчили, як правильно повертати результати? Та нас навіть засовувати реєстри в стек не навчили - не те що підпрограма, якийсь чуть складніший цикл на асмі це був "вищий пілотаж" (с) Дудзяний
Pegasus
ІО - це залізо, ми реально ІО тільки для запису в файли використовували(я не про асемблер а вцілому) і ціллю було не саме ІО, а просто в файл треба було писати;) Це в політесі на домашнє завдання дають свою файлову систему написати wink.gif Це на рахунок переривань.
На рахунок вставок, тоді знав, ну принаймі з asm....end; якось так в Delphi бавився wink.gif І точно пам'ятаю, що хтось там заікався, що на старших курсах щось оптимізували і використовували в Delphi асемблерні вкраплення.
Про процедури і стек, ТОЧНО про то розказували, але не показували і ти далі мене не розумієш, нам асемблер подавали ТІЛЬКИ для оптимізації обрахунків, все навчання в універі - це обрахунки і їх оптимізація і асемблер не виняток wink.gif Типу на Delphi ми щось концептуально інше робили???
PUSH AX - хіба це не засуває реєстр в стек?
П.С. якщо твій пост іде прямо за постом на який ти відповідаєш, цитувати не треба wink.gif
TIGER
Нехай Професор попробує вклепати асемблерну вставку в джава код або в сі-шрапний, і якщо це можливо - запостає як це робиться.

А якщо такого не можна, то і нема про що говорити. Дельфа і так вже здохла.

А на Бога Програмування наїжджати... ууу... це зле. laugh.gif
professor
А про команди pusha/popa і розширення *aw, *ad ти чув?
Щодо io - тут ти не праф) іо це також ввід-вивід на клавіатуру, що ми робили макросами, і для чого є відповідні переривання (чув про 21е?smile.gif)
professor
ЦИТАТА(TIGER @ 15.4.2008, 17:51) *
Нехай Професор попробує вклепати асемблерну вставку в джава код або в сі-шрапний, і якщо це можливо - запостає як це робиться.

А якщо такого не можна, то і нема про що говорити. Дельфа і так вже здохла.

А на Бога Програмування наїжджати... ууу... це зле. laugh.gif


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

Щодо шарпу і джави - там це неможливо (учи матчасть, неможливо, патаму шо неможливо взагалі).
П.с. На шарпі є спеціальний ассемблер, так званий ilasm, він не надто вискорівневий, якшо дуже приспічить, можна писати на ньому.
Pegasus
ІО пов"язане з клавою, до нас має таке саме відношення як ІО пов"язани з файлами smile.gif для нас - це ЗАСІБ, а НЕ МЕТА!!!!!! Так, можна повчити засоби якими користуєшся, для загального розвитку, але це не обов"язков, згідний? wink.gif
Скільки разів тобі прийшлось на роботі розбиратись з низькорівневим записом у файл, чи низькорівневим опрацьовуванням клавіатури?wink.gif
professor
Та ніскільки... Просто той лібмакро забирав відчуття цілісності. От дивися. Ти наклепав прогу на асмі з тою макролібою. Щось її пережувало, і утворилось якесь файло, яке запускаєш, і воно щось робить (ну або не робить, то вже залежно від кривизни рук). Звідки воно взялося, як воно працює?...
А подебагати таку прогу? то-то же... А якщо ти пишеш всю прогу від початку до кінця, якщо ти розумієш кожен байт бінарника - звідки він взявся, як він буде працювати, і взагалі нафіга він там, то зовсім інша історія. Імхо це дуже сильно помагає догнати роботу компа.
Pegasus
То про що ти кажеш, неможливо викласти за семестровий курс, коли одна пара на тиждень.
professor
Я розгріб це за один вечір, хоча останній раз стикався з асемблером на першому курсі.
Думаю, на те, щоб то всьо хоча б на пальцях пояснити пішла б пара, максимум дві.
Якби тоді так зробили, я б зараз ставився до асму геть по іншому.
Pegasus
Я вже вище писав, що на пальцях все-таки пояснили, я наприклад то пам"ятаю smile.gif Просто дехто не слухав wink.gif
professor
Слухав я думаю, не гірше за тебе. Про переривання ніфіга не пояснювали. От то мені і не сподобалось...
Pegasus
Але як показав досвід, тобі то і так не знадобилось wink.gif А "елетрони не можуть помилятися" wink.gif
professor
Ну чекай... Не все ж життя мені бізнес-логіку під аспом писати. Рости треба... Причому інколи - вниз.
Pegasus
Я скажу навіть ширше, не все життя тобі писати wink.gif І протягом того періоду, в якому ти пишеш, ти можеш і ніразу не використати ассемблер wink.gif Але то вже інша, філософська тема, думаю ту розмову краще перенести в "Теревені" smile.gif
TIGER
ЦИТАТА(Pegasus @ 15.4.2008, 18:49) *
Я скажу навіть ширше, не все життя тобі писати wink.gif І протягом того періоду, в якому ти пишеш, ти можеш і ніразу не використати ассемблер wink.gif Але то вже інша, філософська тема, думаю ту розмову краще перенести в "Теревені" smile.gif


Кого цікавить асм - рекомендую книжку Абеля почитати - дуже хороша.
nEO
Думаю що при теперішньому стані речей Асемблер вчити все таки варто, але в якості наочного прикладу роботу заліза на найнижчому рівні. Мабуть всі погодяться що зараз без асемблера можна розрулити поставлену задачу в 99.9% ситуацій. І до того 0.01% можна і не дожити.
Pegasus
Ну власне, то чи варто робити стільки гамору з приводу асемблера? Для загального розвидку корисно, а так....
atski
QUOTE
Нехай Професор попробує вклепати асемблерну вставку в джава код або в сі-шрапний, і якщо це можливо - запостає як це робиться.
QUOTE
Щодо шарпу і джави - там це неможливо (учи матчасть, неможливо, патаму шо неможливо взагалі).


То для всяких умніків tongue.gif
Using Unmanaged code and assembler in C#: http://www.codeproject.com/KB/cs/unmanage.aspx
professor
Умнік - це я, чи ти? wink.gif
А ти читав те, що викладуєш?
Може ти не помітив, що асемблер там був в C++ коді, який збирався в звичайну анменеджед dll, і потім та ліба вже юзалась з-під дот-нету.
В одну длл неможна зібрати менеджед і анменеджед код. Це закон .Net-у.
atski
Помітив і про то тобі в аську написав, але не тре писати "що неможливо, тому що неможливо" smile.gif питання звучало як асамблерний код в .неті або в джаві заюзати
professor
Оригінальне питання звучало оттак:
ЦИТАТА(TIGER @ 15.4.2008, 17:51) *
Нехай Професор попробує вклепати асемблерну вставку в джава код або в сі-шрапний, і якщо це можливо - запостає як це робиться.

Яке питання - така відповідь. Заюзати - можна. Вставити - ні.
mveselovski
а нас теж ніц ненавчили на асм-і писати. я один раз в 11 класі пробував в паскаль запхати вставку ніц не получилось і зтого часу я став адміном щоб не паритись з тим як вставити асм у якусь мову програмування))))) зате тепер мене турбує як вставити КДЕ4 на свій робочий комп))))
professor
Ех... Не поняти вам всьої глибини, всьої краси бінарного кода, коли в хекс-едіторі набиваєш програму, прямо в ком файл, коли його дебажиш, і коли він нарешті (з третьої попитки) каже Hello, World!...
Порівняно з тим навіть асемблер Черняхівського здається мовою високого рівня:)
Давно я вже так не кайфував від написання коду!
Sulamith Lusor
а ми на парах писали код в блокноті, потім дебажили тасмом чи масмом, потім перевіряли то все в командній строці )))
правда, як виводити хело ворлд, я вже забула )))
пам"ятаю команди add, mov, push, pop, div, mul і все ))) але то все через то, шо я - такий от нерадивий штудент )
professor
Дебажили тасмом чи масмом?
Може транслювали?
Тим більше якщо потім в команд-лайні перевіряли:)
Sulamith Lusor
ой, точно! транслювали )))))))))
мені соромно blush.gif
professor
Hello, World! на голому асмі.
CODE
B4 09 mov ah, 9 ;код функції виводу рядка для 21 переривання
BA 0D 01 mov dx, 10D ;адрес звідки виводити = номер байта програми + 100h - службова область пам'яті для com програм
CD 21 int 21 ;переривання 21 - сервіс DOS'а
B4 00 mov ah, 0 ;код функції читання клавіші для 16 переривання
CD 16 int 16 ;переривання 16 - io клавіатури
CD 20 int 20 ;переривання 20 - завершити програму, без параметрів. Тут програма фактично закінчується, далі іде область даних.
48656C6C6F2C20576F726C6421;"Hello, World!"
24 ;Символ $ вказує на кінець рядка
professor
п.с. Це - вміст ком-файлу. Тобто якщо хтось натопче в хекс-едіторі таку послідовність байтів - воно б мало навіть запрацювати.
Pegasus
Ну, ну цікаво до чого ти допрограмуєшся на ком smile.gif Ти не в курсі, чому зараз всюди exe, а не com файли? wink.gif У ком є одне обмеження, яке прирекло ком smile.gif З часів ДОСу нічого комівського не бачив...
professor
Я не волшебник, я тока учусь:)
А щодо ком - ну це ж тіко хелло-ворлд-екзампл...
І ясне діло, я не збираюсь писати екзешніки в хекс-едіторі.
eXploit
QUOTE
Ну, ну цікаво до чого ти допрограмуєшся на ком Ти не в курсі, чому зараз всюди exe, а не com файли? У ком є одне обмеження, яке прирекло ком З часів ДОСу нічого комівського не бачив...


не согласен:) маленькие утилитки можно писать и как com-исполнимые... от exe отличаются, если не ошибаюсь, только размером (максимум - до 64кб ) и наличием в коде только одного сегмента... кстати... вот список com-подобных тулз, которые я нашёл в WinXP:

C:\WINDOWS\system32\chcp.com
C:\WINDOWS\system32\command.com
C:\WINDOWS\system32\diskcomp.com
C:\WINDOWS\system32\diskcopy.com
C:\WINDOWS\system32\edit.com
C:\WINDOWS\system32\format.com
C:\WINDOWS\system32\graftabl.com
C:\WINDOWS\system32\graphics.com
C:\WINDOWS\system32\kb16.com
C:\WINDOWS\system32\loadfix.com
C:\WINDOWS\system32\mode.com
C:\WINDOWS\system32\more.com
C:\WINDOWS\system32\tree.com
C:\WINDOWS\system32\win.com
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Форум IP.Board © 2001-2010 IPS, Inc.