Комментарии 25
Пишем Hello world на WASM https://github.com/kpmy/tiss/blob/master/demo/bf/bf.go Извините, что не хватает воды на целую статью.
Вообще, язык макросов FASM настолько мощный, что на нем можно написать еще один язык, причем не одним способом.
А можно написать макро для определения управляющих структур типа if/while? С вложенностью и генерацией меток?
Есть и "можно сделать" — все же немного разные вещи. Чтобы сделать if, нужно иметь таккую структуру, как стек.
Оно эквивалентно в данном случае, потому что оно «есть» сделано на макросах в виде инклюда. Например:
macro .if [arg]
{
common
__IF equ
local ..endif
__ENDIF equ ..endif
local ..else
__ELSE equ ..else
JNCOND __ELSE,arg
}
macro .else
{
jmp __ENDIF
__ELSE:
restore __IF
__IF equ ,
}
(ирония)
Предлагаем вашему вниманию лучший макроязык над ассемблером — Си
Предлагаем вашему вниманию лучший макроязык над ассемблером — Си
А где ирония-то? Как боженька сказанул.
А если серьезно, то я щупал как-то ассемблер, причем именно FASM. И пытался писать на нем Win32-приложение. 20 строчек на один вызов MessageBox… В общем, я быстро пришел к необходимости писать макросы. И спустя полчаса поймал себя на том, что изобретаю Паскаль :) И на этом заглох.
Для программирования на Асме нужен особый склад ума, видимо, противоположный моему. Я, приступая к задаче, первым делом стараюсь собрать ее в как можно более высокоуровневые блоки, продумать уровни абстракции… В язык уровня Си или Асма я могу влезать либо из соображений оптимизации, либо из спортивного интереса.
Для программирования на Асме нужен особый склад ума, видимо, противоположный моему. Я, приступая к задаче, первым делом стараюсь собрать ее в как можно более высокоуровневые блоки, продумать уровни абстракции… В язык уровня Си или Асма я могу влезать либо из соображений оптимизации, либо из спортивного интереса.
И пытался писать на нем Win32-приложение. 20 строчек на один вызов MessageBox…
Вообще-то, {уже} нет.
Вот код примера из стандартной поставки:
; example of simplified Windows programming using complex macro features
include 'win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
.code
start:
invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK
invoke ExitProcess,0
.end start
Ну да, примерно так. А если надо эту строку сформировать…
Да тоже в принципе ничего особого. kernel32 экспортирует всякую мелочь типа конкатенации. Через тот же invoke и вызовется. На самом деле, макросы у fasm а очень богаты, сейчас это уже не просто голый мнемокод.
… что, собственно, возвращает нас к шутке про Си.
Мне с моей чисто «академической» колокольни интересно, для какой надобности нынче пишут именно на Ассемблере, если мнемокод мигом превращает его в более высокоуровневый язык (но с явно «протекающей» абстракцией, мешающей, например, отлаживаться)
Мне с моей чисто «академической» колокольни интересно, для какой надобности нынче пишут именно на Ассемблере, если мнемокод мигом превращает его в более высокоуровневый язык (но с явно «протекающей» абстракцией, мешающей, например, отлаживаться)
Макрокод, видимо его вы имел в виду. Мнемокод и «язык ассемблера» — это синонимы.
Зачем? Есть специализированные задачи, шеллкоды какие-нибудь, например.
Да и разница между С и ассемблером с макросами все же есть. Вы возьмете FASM, используете макросные ifы, вызовы функций итд и в итоге получите крохотный файл в, скажем, бинарном формате. Без линкера, без заголовков.
Я использовал(ю периодически) для разработки своей ОС, как небольшое хобби.
Зачем? Есть специализированные задачи, шеллкоды какие-нибудь, например.
Да и разница между С и ассемблером с макросами все же есть. Вы возьмете FASM, используете макросные ifы, вызовы функций итд и в итоге получите крохотный файл в, скажем, бинарном формате. Без линкера, без заголовков.
Я использовал(ю периодически) для разработки своей ОС, как небольшое хобби.
И лучший макроязык над С — С++
Ужасный. Но лучше пока не придумали, да :)
Можно, эти макросы входят в стандартную поставку.
Это вот сюда надо (вроде бы такого варианта там ещё нет :)
https://github.com/leachim6/hello-world
https://github.com/leachim6/hello-world
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пишем Hello World на FASM