Комментарии 25
Что такое ассемблер? — это машинные инструкции, то есть команды что делать процессору.
Вот это поворот! Так и надо! С ходу и поддых!
Что такое DLL библиотека?
Это файл с расширением DLL :)
P.S. Но, признаться, изложение отторжения не вызвало. Скорее недоумение. Если на таком уровне объяснять, то программирование становится карго-культом.
1. Объясню позже;
2. Объясню позже;
3. Объясню позже.
:)
При всей кривой грамотности, повествование на редкость складное и гладкое, с места в карьер, без рассусоливаний. Рубленый слог, прям Маяковский. Если такими темпами продолжать, то можно внезапно куче народу ненавязчиво объяснить, как оно все в действительности работает - большинство ведь не знает (и даже не знает о том, что не знает).
Однозначно, аффтар, пеши истчо! Серьезно.
1) два в одном: компилятор + линковщик;
2) мощная система макросов.
Щас, конечно, всё забыл давно.
Помню только, что секцию импорта можно было формировать тремя способами:
1) выписывать всё врукопашную, что для мелких проектов — норм, но, если проект хоть сколько-то серьёзен, — заколебаешься;
2) импортировать скопом — по строчке на dll-ку, это раздувало экзешник, конечно, зато никакой нудятины с выписыванием по одной функции;
3) была консольная утилитка, которая прочёсывала исходники и формировала секцию импорта — категорически удобная штука, я бы её включил в джентльменский набор fasm-разработчика.
Еще yasm есть :)
На masm32, код hello world получится в 2 раза короче из-за того, что не надо импортировать функции. Просто пишешь на winapi не сильно заморачиваясь.
Приятно осознавать, что кто-то еще интересуется и популяризует этот язык.
Даёшь больше инфы про системные вызовы Windows, Linux, BSD! С примерами и пояснениями!
include "win32ax.inc"
и тогда просто пишите:
.data
.code
invoke printf, "Hello World"
.end $EntryPoint
и формат PE и прочее было бы не нужно…
Хотя тогда статья была бы о программе в 5 строк и не чем было бы писать? =)
Написали бы лучше статью о возможностях фасма, о его препроцессоре и чем он уникален.
О его авторе математике Томасе, о том что он сам себя компилирует, о том что в виде дллки есть, о плагинах. Лет 10 назад был макрос позволяющий вызывать функции вот так:
CreateFile(...)
CloseHandle(..)
ExitProcess(0)
вместо invoke, ccall.
Fast то и отличается design principles, от всего другого и возможностями кастомизации.
.486 ; create 32 bit code
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
include \masm32\include\windows.inc ; always first
include \masm32\macros\macros.asm ; MASM support macros
; -----------------------------------------------------------------
; include files that have MASM format prototypes for function calls
; -----------------------------------------------------------------
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
; ------------------------------------------------
; Library files that have definitions for function
; exports and tested reliable prebuilt code.
; ------------------------------------------------
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.code ; Tell MASM where the code starts
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start: ; The CODE entry point to the program
print chr$("Hey, this actually works.",13,10)
exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start ; Tell MASM where the program ends
Это писал Сплит…
Эйнштейн: "Долго делать программу. (относительно)"
Творец: "Теперь мы полностью готовы. К началу."
Вдохновитель: "По началу вас это может напугать, но не боимся и разбираемся."
Мастер интриги: "На самом деле из всей этой каши текста, команд всего 3: на 16, 18, 21 строках. (и то это не команды, а макросы. Мы к командам даже не подобрались)"
Индус: "Самое интересное то что программа весит 2КБ. (Можно сократить и до 1КБ, но для упрощения и так пойдет)"
Философ: "Это штото на подобие команды, но это и близко не команда ассемблера, а просто макрос."
Заботливый: "Не переживайте если нечего не поняли."
Оптимист: "Дальше думаю не стоит объяснять, вроде все понятно."
Автор, а чем другие статьи по асму на Хабре не понравились? Зачем ещё одна?
Не знаю, не знаю. Я вот с изумлением смотрю, в какую ассемблерную кашу компилируется рекурсивный расчёт числа Фибоначчи на С.
Попробуйте сами:
#include <stdio.h>
int fibonacci(int n)
{
if (n <= 1)
{
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main(void)
{
printf("%i", fibonacci(45));
}
Туториал по FASM (Windows x32 API/Win32API), «Hello world!»