ап+
ну ладно. никто не распознал и троллинг не вышел .
строка MOVE DX, 0109
шифр команды BA=команда , +два байта числа =3байта команда.
дамп памяти BA0901.
если вы запишите MOV DX,0109 то программа-ассемблер переведет в код = шифр.младшийбайт.старшийбайт. в ассемблере вводится как надо - число 0109.
внутри машины хранится иначе = младшийбайт.старшийбайт 0901
при записи в машинном родном коде (который не ассемблер) так и надо вводить =шифр.младщийбайт.старшийбайт.
это формат хранения данных intel. младшийбайт.старшийбайт.
в других машинах другие форматы , вы должны знать как ваша машина хранит формат данных.
дамп — показывает то что лежит в памяти в машине.
дизассемблинг— программа обратного перевода , то что в машине лежит - переводится обратно в код ассемблера.
не всегда это равно и совпадает один к одному.
дамп и дизассемблинг это разные термины.
я ожидал что укажут на этот тонкий момент.
Rikk
так в чем тонкий момент то? Ты из тупоконечных шталь?
Rikk
> я ожидал что укажут на этот тонкий момент.
Тонкий момент в кодах - это что-то вроде:
Rikk
Нет никаких тонких моментов, что в памяти, что в файле, что в дампах на интелах числа лежат по порядку, начиная с младшего байта. Диссонанс возникает у неофитов, когда они видят искомое в HEX редакторе, так как оно лежит в файле/памяти, слева направо, а читают, как привыкли на уроках математики справа-налево.
kipar
> в чем тонкий момент то?
в том что дизассемблинг от дампа не отличаете
Rikk
> я ожидал что укажут на этот тонкий момент.
Да, как толсто, а ещё что-то там бухтел :)
Помню, как для Z80 недокуметированные команды писали через DB
P.S. Я думал, ты что-нибудь про self-modify скажешь... типа того
данный человек, считает большинство книг по ассемблеру не актуальными. Даже не вникая несёт книга нужную информацию или нет.
раб вакуумной лампы
И как ?
Написал игру ?
ronniko
> И как ?
> Написал игру ?
На МАСМ-е ? Нет, конечно. Я потерял к нему интерес когда понял как он работает.
Потом перешел на с++, написал на нём движок, но когда похерил финальную копию с отлаженным физиксом и вынужден был откатиться на более раннюю версию, решил вообще перейти на чужой движок (phaser.js) что бы не тратить время. Сейчас я уже закончил локации, лут и код, жду нейросетей для персонажной анимации. Решил себе отпуск устроить, прохожу MAD MAX 2015.
По поводу ASM-а была у меня давно ещё идея использовать его для реверса ранних игр Ультимы с целью их локализации, но я решил всё-таки писать что-то своё.
Запоздало отвечаю на первоначальный вопрос в теме: "сложно ли писать на ассемблере?"
Фишка в том, что писать на ассемблере сложнее в мелочах, но довольно быстро приходит понимание, что если структурировать программу ровно как принято в языках высокого уровня (что получается просто методом проб и ошибок), то вообще несложно.
При этом вырабатываются, например, соглашения о вызовах процедур, отбрасывается желание сэкономить каждый байт и так далее.
В итоге довольно быстро начинаешь замечать, что просто начинаешь делать рутинную работу которую автоматически делают компиляторы языков высокого уровня, а когда они еще хорошо оптимизированные, то даже хуже их.
А в целом само по себе программирование получается довольно прямолинейное, практически классическое, только во всех мелочах "подшифрованное" переводом банальной логики на инструкции ассемблера. Поэтому крайне желательно еще намазывать код комментариями которые в ЯВУ считаются "вредными" - типа просто даже сообщить, что в этом месте элемент из массива копируется в поле структуры - в асме это уже не излишняя информация, а полезная.
=A=L=X=
> типа просто даже сообщить, что в этом месте элемент из массива копируется в
> поле структуры - в асме это уже не излишняя информация, а полезная
Даже если нет средств для описания структур (а в MASM, например, они есть), то можно просто смещения к полям структур задать именованными константами
Vector_len EQU 0 Vector_buffer EQU 4 Vector_capacity EQU 8 ... mov edi, [esi+Vector_buffer] mov ecx, [esi+Vector_len] ...
Проблема остается только с регистрами, когда приходится помнить, что в данный момент лежит в регистре.
=A=L=X=
> Фишка в том, что писать на ассемблере сложнее в мелочах, но довольно быстро
> приходит понимание, что если структурировать программу ровно как принято в
> языках высокого уровня (что получается просто методом проб и ошибок), то вообще
> несложно.
не сложно программировать набегом. когда задача проста . у тебя полное понимание всей задачи от начала до конца и ты просто катаешь простыни инструкций от начала к конце.
если случается ситуация что надо откатываться назад и чтото править, или вылазит какой то баг из старого кода - то залазить в этот лес написанный 3 месяца назад , это полная задница.
там уже не помнишь в каком месте этой функции че с чем сложилось и нафига))) и где ее править.
а комментить каждую инструкцию это x1000 работа.
Тема в архиве.