История изменений
Исправление SZT, (текущая версия) :
Я так понимаю, что текст программы на ассемблере необходимо компилировать, да? Есть какой-нить предустановленный компилятор в GNU/Linux?
Вообще да, но это не та компиляция, которую делают языки, вроде Си. Это скорее трансляция
Есть какие-то общие правила написания программ? Что-то вроде var arr; function(){};. Как-то же необходимо связывать меж собой команды процессора.
Ну там есть некий синтаксис объявления меток для условных переходов и вызова всяких функций через них, есть макросы, есть в конце концов инструкции, которыми можно писать в память, читать в память, отматывать стек, вызывать функцию, возвращаться из функции итд. Можно делать циклы, ветвления. Вообщем все что угодно можно делать.
Что это за WASM или TASM?
WASM это или Watcom Assembler или Web Assembly. Последний к нормальным ассемблерам отношения не имеет. А вот TASM это Turbo Assembler - нормальный транслятор ассемблера, который можно сравнивать с Watcom Assembler.
Сборка программы на ассемблере возможна не на устройстве, для которого пишется программа? Если сравнивать с компиляцией ядра Linux.
Конечно возможна. Особенно легко это получается сделать, если сам транслятор ассемблера умеет работать на любой архитектуре, и к нему предоставляются исходники. А если он сам на ассемблере написан(например как FASM) то его на чужой архитектуре только через эмулятор запускать. Или например эти TASM MASM к которым нет исходников и которые только под винды и дос в скомпилированном виде есть. Запускать в GNU/Linux их просто так не выйдет, надо wine или какой-нибудь dosbox ставить.
Я так понимаю, что для «переменных» необходимо жестко указывать ячейку памяти процессора и ОЗУ, да?
Можно локальные переменные в стеке хранить.
Что на счет этого стоит учить? Необходимо для старта читать кучу материала о страницах памяти и т.д.?
В общем, кто что посоветует, с чего начать, где эти основы брать?
Советую начать с http://stolyarov.info/books/asm_unix
Планирую начать с чего-то простого, например, Z80 или MC6800.
Я б советовал работать с ассемблером той архитектуры, к которой у тебя есть рабочее железо в которое ты свой код загрузить, запустить и отладить сможешь. Например можно взять какую-нибудь ARM Development Kit. Или просто писать на ассемблере под десктопный линукс
А собственно, зачем тебе ассемблер?
Исходная версия SZT, :
Я так понимаю, что текст программы на ассемблере необходимо компилировать, да? Есть какой-нить предустановленный компилятор в GNU/Linux?
Вообще да, но это не та компиляция, которую делают языки, вроде Си. Это скорее трансляция
Есть какие-то общие правила написания программ? Что-то вроде var arr; function(){};. Как-то же необходимо связывать меж собой команды процессора.
Ну там есть некий синтаксис объявления меток для условных переходов и вызова всяких функций через них, есть макросы, есть в конце концов инструкции, которыми можно писать в память, читать в память, отматывать стек, вызывать функцию, возвращаться из функции итд. Можно делать циклы, ветвления. Вообщем все что угодно можно делать.
Что это за WASM или TASM?
WASM это или Watcom Assembler или Web Assembly. Последний к нормальным ассемблерам отношения не имеет. А вот TASM это Turbo Assembler - нормальный транслятор ассемблера, который можно сравнивать с Watcom Assembler.
Сборка программы на ассемблере возможна не на устройстве, для которого пишется программа? Если сравнивать с компиляцией ядра Linux.
Конечно возможна. Особенно легко это получается сделать, если сам транслятор ассемблера умеет работать на любой архитектуре, и к нему предоставляются исходники. А если он сам на ассемблере написан(например как FASM) то его на чужой архитектуре только через эмулятор запускать. Или например эти TASM MASM к которым нет исходников и которые только под винды и дос в скомпилированном виде есть. Запускать в GNU/Linux их просто так не выйдет, надо wine или какой-нибудь dosbox ставить.
Я так понимаю, что для «переменных» необходимо жестко указывать ячейку памяти процессора и ОЗУ, да?
Можно локальные переменные в стеке хранить.
Что на счет этого стоит учить? Необходимо для старта читать кучу материала о страницах памяти и т.д.?
В общем, кто что посоветует, с чего начать, где эти основы брать?
Советую начать с http://stolyarov.info/books/asm_unix
Планирую начать с чего-то простого, например, Z80 или MC6800.
Я б советовал работать с ассемблером той архитектуры, к которой у тебя есть рабочее железо, и в которое ты свой код загрузить, запустить и отладить сможешь.