Как стать автором
Обновить

Комментарии 25

Что такое ассемблер? — это машинные инструкции, то есть команды что делать процессору.

Вот это поворот! Так и надо! С ходу и поддых!

Если сразу не понял с кем имеешь дело, то добиваем:
Что такое DLL библиотека?

Это файл с расширением DLL :)

P.S. Но, признаться, изложение отторжения не вызвало. Скорее недоумение. Если на таком уровне объяснять, то программирование становится карго-культом.
Я просто упростил до максимума, по сути на ассемблере очень близко программируют на машинном коде, я даже не расписывал какие есть ассемблеры.
Краткое содержание:
1. Объясню позже;
2. Объясню позже;
3. Объясню позже.
:)

Мне как раз это понравилось наоборот в стиле статьи. Разговор по-мужски.

Кому как. Лично я такую фигню ещё со школы не люблю.

При всей кривой грамотности, повествование на редкость складное и гладкое, с места в карьер, без рассусоливаний. Рубленый слог, прям Маяковский. Если такими темпами продолжать, то можно внезапно куче народу ненавязчиво объяснить, как оно все в действительности работает - большинство ведь не знает (и даже не знает о том, что не знает).

Однозначно, аффтар, пеши истчо! Серьезно.

С ассемблером я разбирался лет 15 назад. Смотрел masm, tasm, nasm, goasm, но fasm — показался самым удобным и лёгким в освоении для новичка из-за двух моментов:
1) два в одном: компилятор + линковщик;
2) мощная система макросов.
Щас, конечно, всё забыл давно.
Помню только, что секцию импорта можно было формировать тремя способами:
1) выписывать всё врукопашную, что для мелких проектов — норм, но, если проект хоть сколько-то серьёзен, — заколебаешься;
2) импортировать скопом — по строчке на dll-ку, это раздувало экзешник, конечно, зато никакой нудятины с выписыванием по одной функции;
3) была консольная утилитка, которая прочёсывала исходники и формировала секцию импорта — категорически удобная штука, я бы её включил в джентльменский набор fasm-разработчика.

Еще yasm есть :)

Да, но в середине 2000-х он, кажется, был ещё в зачаточном состоянии. Nasm уже потихоньку загибался, а yasm подхватывал его идеи и концепции.

На masm32, код hello world получится в 2 раза короче из-за того, что не надо импортировать функции. Просто пишешь на winapi не сильно заморачиваясь.

АСМ жил, АСМ жив, АСМ будет жить!
Приятно осознавать, что кто-то еще интересуется и популяризует этот язык.
Даёшь больше инфы про системные вызовы Windows, Linux, BSD! С примерами и пояснениями!
НЛО прилетело и опубликовало эту надпись здесь
Я об этом писал. Я знаю что ассемблер это не машинные инструкции.
Я понимаю, что не по теме, но просто в очередной раз увидел и хочу, наконец, спросить. Почему люди постоянно затирают %USERNAME% в скриншотах? Я рискну предположить, что имя пользователя у автора — это что-нибудь вроде «zeq52giw», «illya334» или просто «Illya», наконец. Если я на скриншоте увижу «C:\Users\Illya» — это что, будет какой-то кошмарный деанон, и Земля налетит на небесную ось? Эти прямоугольники только внимание привлекают без нужды.
Ну вот у меня на рабочем компьютере имя пользователя суть мой внутренний табельный номер и я его светить по идее не должен (хотя тут вряд ли этот случай). Другое дело, что для статьи можно просто завести обезличенного юзера, ну либо в виртуалку поставить всё и показывать всё как есть. В общем есть куча способов не замазывать.
Интересное изложение материала, без лишних слов сразу к делу — отличный подход! Автору спасибо.
include "win32ax.inc"
и тогда просто пишите:
.data
.code
invoke printf, "Hello World"
.end $EntryPoint

и формат PE и прочее было бы не нужно…
Хотя тогда статья была бы о программе в 5 строк и не чем было бы писать? =)

Написали бы лучше статью о возможностях фасма, о его препроцессоре и чем он уникален.
О его авторе математике Томасе, о том что он сам себя компилирует, о том что в виде дллки есть, о плагинах. Лет 10 назад был макрос позволяющий вызывать функции вот так:
CreateFile(...)
CloseHandle(..)
ExitProcess(0)

вместо invoke, ccall.

Fast то и отличается design principles, от всего другого и возможностями кастомизации.
На masm32 код был бы таким:
    .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
Можно сократить инклуды до
include \masm32\include\windows.inc ; always first
include \masm32\macros\macros.asm ; MASM support macros
uselib kernel32,user32,masm32,gdi32 ;хотя зачем тут юзер и гди?

Это писал Сплит…
Эйнштейн: "Долго делать программу. (относительно)"
Творец: "Теперь мы полностью готовы. К началу."
Вдохновитель: "По началу вас это может напугать, но не боимся и разбираемся."
Мастер интриги: "На самом деле из всей этой каши текста, команд всего 3: на 16, 18, 21 строках. (и то это не команды, а макросы. Мы к командам даже не подобрались)"
Индус: "Самое интересное то что программа весит 2КБ. (Можно сократить и до 1КБ, но для упрощения и так пойдет)"
Философ: "Это штото на подобие команды, но это и близко не команда ассемблера, а просто макрос."
Заботливый: "Не переживайте если нечего не поняли."
Оптимист: "Дальше думаю не стоит объяснять, вроде все понятно."

Автор, а чем другие статьи по асму на Хабре не понравились? Зачем ещё одна?

Хелловорлд всяко написать проще, чем что-то реально новое и полезное.
Fasm реально хорош, как то давно сделал один проект коммерческий на нём, векторные расчёты, SSE и AVX использовался, до сих пор крутится. По прошествии времени понимаю что это был мартышкин труд. Сейчас компилятор C++ гораздо лучше всё оптимизирует и написать проще.

Не знаю, не знаю. Я вот с изумлением смотрю, в какую ассемблерную кашу компилируется рекурсивный расчёт числа Фибоначчи на С.

Попробуйте сами:

#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));
}

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории