Pull to refresh

Comments 25

Пишем Hello world на WASM https://github.com/kpmy/tiss/blob/master/demo/bf/bf.go Извините, что не хватает воды на целую статью.
Вообще, язык макросов FASM настолько мощный, что на нем можно написать еще один язык, причем не одним способом.

А можно написать макро для определения управляющих структур типа if/while? С вложенностью и генерацией меток?

UFO just landed and posted this here

Есть и "можно сделать" — все же немного разные вещи. Чтобы сделать 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ы, вызовы функций итд и в итоге получите крохотный файл в, скажем, бинарном формате. Без линкера, без заголовков.
Я использовал(ю периодически) для разработки своей ОС, как небольшое хобби.

Не, ну это не интересно. Где прерывания? Регистры? Оффсеты? Джампы в разные куски кода? А в таком виде никакой романтики…

А откуда прерывания в программировании под Win32? Начиная с XPSP2 используется sysenter.
Ужасный. Но лучше пока не придумали, да :)
Видел. Даже использовать пробовал. Обломался об отсутствие нормального кроссплатформенного компилятора, отладчика, IDE с чем-то большим, чем простая подсветка синтаксиса…

Короче, там еще «придумывать» и «придумывать»…

А идея неплоха, да. За мелкими ньюансами.
Можно, эти макросы входят в стандартную поставку.
Синтаксис fasm — няшка! Код просто читается, бо синтаксис лаконичный, в отличие от других ассемблеров. Макросы очень мощные. Еще работает под *nix, и есть порт на ARM.
Это вот сюда надо (вроде бы такого варианта там ещё нет :)
https://github.com/leachim6/hello-world
UFO just landed and posted this here
Это не настоящая программа, это сам class в виде макросов. Если ее транслировать, получится class. Это описательная программа, без действий.
Sign up to leave a comment.

Articles