Обновить
64K+

Assembler *

Язык программирования низкого уровня

61,04
Рейтинг
Сначала показывать
Порог рейтинга

Чернобыльское лето 1986 года, когда все киевские одноклассники разъехались по разным концам СССР подальше от радиации, было для меня супер-продуктивным в смысле изучения программирования. Я ходил в контору человека по фамилии Долина, бывшего полковника танковых войск из Донецка, который переквалифицировался в компьтеризатора украинского образования. Там я работал на компьютерах MSX Yamaha, выучил программирование на Си. Компилятор назывался ASCII C (сейчас в комментах появятся умники которые будут мне говорить, что ASCII это кодировка, а я им буду кидать ссылку что это еще и японская компания).

Долине мое увлечение Си не нравилось, он хотел чтобы я больше писал программ на Бейсике, которые он демонстрировал людям из украинских министерств и студии мультфильмов (некоторые программы были графические). Кроме графики я сделал еще например программу которая фиксировала в реальном времени действия футболистов во время матча, через нажатия клавиш наблюдателем. Контора Долины была у стадиона, оттуда доносились вопли болельщиков. Долина это показывал кому-то по спортивной линии.

В конце лета я полетел на Новосибирскую Летнюю Школу Юных Программистов, где выучил ассемблер Z80 и сделал поддержку параллельного выполнения нескольких Си функций с помощью переключения контекстов в обработчике прерывания по таймеру. С сохранением регистров в дексрипторе задачи в списке задач. За это я получил диплом первой степени. По-моему дипломы вручал академик Ершов, хотя может я путаю и мы встретились с ним в академгородке куда на тоже возили.

На школе было невероятное количество комаров, а также красивая девочка из Томска, которая мне нравилась, и ее подружка, которой нравился я. Из Украины еще был юный гений из Харькова, который постоянно спорил со мной, что персоналки фигня, а мейнфреймы - это круто. Так как я успел поработать и на мейнфреймах, споры были довольно развесистые.

Еще там я увидел первые советские программы западного качества - редактор tor(?), программу низкоуровневой работы с диском и оконный отладчик. Они были написаны на Си и ассемблере аккуратно, как примеры в западных книжках. Советский код который я видел до этого (и большинство после этого) был написан тяп-ляп. Писали эти программы местные аспиранты которые были также преподавателями школы.

Помимо этих программ я привез на флоппи-дисках со школы CP/M (хуже файловая система чем в MSX-DOS), среду Turbo Pascal, интерпретатор Lisp, компилятор Nevada Fortran, еще два компилятора Си (Aztec C и BDS C) и даже компилятор с подмножества языка Ada, который я знал теоретически, но никогда не использовал.

29 лет спустя, в 2017 году я приехал на ту же новосибирскую школу в качестве инструктора по Verilog и FPGA. Еще там был Борис Файфель который учил детей Лиспу или чему-то такому.

Теги:
+21
Комментарии4

Искусство программирования в одном шаге от запрета

Искусство программирования и связанные материалы
Искусство программирования и связанные материалы

В апреле 2026г. минюст добавил Стэнфордский университет в список нежелательных организаций. Это затронуло Искусство программирования заслуженного профессора Д.Э. Кнута (TAoCP). Обложка книг любезно приглашает узнать информацию о будущих томах, с web-ссылкой на нежелательную организацию, ведь профессор ведёт раздел на сервере своего университета. Такие ссылки теперь имеют юридические последствия.

По результатам проверки достоверно установлено, что ЯГПУ им. К.Д. Ушинского, являясь единоличным пользователем на своём официальном сайте https://yspu.org/, осуществлял хранение и распространение информационных материалов, издаваемых организациями <данные изъяты>, а также то, что указанные ссылки и ресурсы находились в свободном доступе для прочтения и скачивания неограниченным кругом людей из числа других интернет-пользователей до 19.09.2025 года.

Нарушение запретов, установленных Федеральным законом от 28.12.2012 № 272-ФЗ «О мерах воздействия на лиц, причастных к нарушениям основополагающих прав и свобод человека, прав и свобод граждан Российской Федерации», если эти действия не содержат уголовно наказуемого деяния, образует состав административного правонарушения, предусмотренного статьёй 20.33 КоАП РФ.

Искусство программирования (The Art of Computer Programming, TAoCP), — это живой проект. Проект написания книги был начат автором в 1962 году. Первый том был издан в 1968 году, а самый свежий выпуск 7 к тому 4 в 2025м году. Профессор делает всё возможное, чтобы долго жить, и задумано 7 томов, но как видно по коллекции на фото, том 4 пошёл множиться по буквенным подтомам.

К некоторым томам выходят выпуски. По идее, каждый выпуск рано или поздно должен войти в том. Выпуски 0-4 к тому 4 образовали собой том 4А. Выпуски 5 и 6 образовали собой том 4Б/4B, вышел на английском в 2023, на русский не переведён. Будущий том 4В/4C, как ожидается, будет состоять из выпусков 7-9 к тому 4, из них издан только выпуск 7, в начале 2025 года, так что том 4В / 4C готов условно на одну треть. А ещё ожидается том 4Г/4D, и это может быть не последний четвёртый том.

Искусство программирования применяет два способа описания алгоритмов: на естественном языке и на ассемблере, чем выделяется на фоне многих других книг. В других книгах по алгоритмам либо псевдокод, либо высокоуровневый язык программирования. А в других книгах по Ассемблеру могут долго углубляться в программирование, допустим, EGA/VGA, его регистров, или регистров для настройки защищённого режима, но алгоритмически эти книги не выдающееся чтиво. Ассемблер в TAoCP выдуманный, не соответствующий 1:1 реальной машине, но такой коллективный портрет реальных процессоров.

За всю историю TAoCP архитектур было две, MIX и MMIX. Архитектурно в старом MIX 4000 MIX-слов оперативной памяти, а каждое MIX-слово состоит из одного бита знака и пяти MIX-байтов, итого шесть сущностей. Каждый MIX-байт должен быть в состоянии представить значения от 0 до 63, при этом допускаются не двоичные архитектуры. Канонические воплощения MIX-байта это шесть битов или два десятичных разряда. Дополнительным упражнением предлагается спроектировать троичную архитектуру. Переносимые программы для MIX должны быть готовы к любому воплощению. Если вдруг захочется ставить эксперименты с троичной архитектурой, старый MIX является, наверное, самой большой коллекцией троичных программ. Новый MMIX, тем временем, 64-битный, и байты в нём 8-битные. Всё довольно привычно, но разве что Big Endian за прошедшие 27 лет перестали делать.

Домашняя страница MMIX была передана в Мюнхенскую высшую школу прикладных наук, на неё ссылаться ещё можно.

MMIX пытались воплощать и в железе, пока только FPGA. Автор считает довольно прискорбным, что там для графики фреймбуффер. Лучше бы ускорение, как на Амиге или СЕГЕ, получится фэнтезийная ретроконсоль, на которой алгоритмисты встречаются с демосценой.

Профессор Дональд Эрвин Кнут является иностранным членом РАН.

Теги:
+22
Комментарии0

В честь 50-летия уже ретро ПК MOS Technology KIM-1 (проект этого компьютеров появился в продаже в январе 1976 года — за три месяца до Apple I) энтузиаст представил демо KIM-1 Demo Project на Ассемблере и пригласил разработчиков внести свои идеи, добавить модули, демонстрации или улучшения и помочь этому проекту расти..

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии1

Инженер по безопасности компании Fortinet представил экспериментальный инструмент KittyLoader. Это небольшой загрузчик, написанный на C и Ассемблере, который автор сам называет крайне ненадёжным и не предназначенным для практического применения.

Решение KittyLoader задумывалось как учебный проект и демонстрация базовых принципов работы загрузчиков, а не как готовое решение для использования. Исходный код проекта открыт на GitHub, любой желающий может изучить репозиторий и поэкспериментировать с модификациями загрузчика.

По словам автора, проект KittyLoader не стоит рассматривать как инструмент для реальных задач: он создан в первую очередь ради интереса и в образовательных целях. Несмотря на минимализм и очевидные ограничения, KittyLoader может быть полезен исследователям и студентам, которые хотят понять, как устроена загрузка и выполнение программ на низком уровне.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии2

Хочу поделиться своим максимально ненужным проектом на Python, под названием flexpasm.

Это билдер кода для FASM под Linux. Работает ограниченно, но вроде-бы работает.

Проект, лично для меня, интересный.

Установить эту библиотеку можно через PyPi:

from flexpasm import ASMProgram
from flexpasm.constants import LinuxInterrupts
from flexpasm.instructions.registers import get_registers
from flexpasm.instructions.segments import Label
from flexpasm.mnemonics import IntMnemonic, MovMnemonic, XorMnemonic
from flexpasm.settings import Settings


def main():
    settings = Settings(
        title="Example ASM Program",
        author="alexeev-prog",
        filename="example.asm",
        mode="64",
    )
    asmprogram = ASMProgram(settings, __name__)
    regs = get_registers(settings.mode)

    start_lbl = Label("start")

    start_lbl.add_instruction(MovMnemonic(regs.AX, 4))
    start_lbl.add_instruction(MovMnemonic(regs.CX, "message"))
    start_lbl.add_instruction(MovMnemonic(regs.DX, "message_size"))
    start_lbl.add_instruction(IntMnemonic(LinuxInterrupts.SYSCALL))
    start_lbl.add_instruction(MovMnemonic(regs.AX, 1))
    start_lbl.add_instruction(XorMnemonic(regs.BX, regs.BX))
    start_lbl.add_instruction(IntMnemonic(LinuxInterrupts.SYSCALL))

    asmprogram.add_label(start_lbl)
    asmprogram.main_rws.add_string("message", "Hello, World!")

    asmprogram.save_code()
    # asmprogram.restore_backup()


if __name__ == "__main__":
    main()
$ fasm example.asm example
$ ld example -o example
$ ./example

Hello, World!

А сам код генерируется такой:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Author: alexeev-prog                                                                                               ;;
;; Example ASM Program                                                                                                ;;
;; Program generated by FLEXPASM (github.com/alexeev-pro/flexpasm)                                                    ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

format ELF64 executable 3;                      ; ELF64 EXECUTABLE
entry start                                     ; Set Start Entry


;; Segment readable executable in FASM is a directive for defining a section of code with readable and executable attributes.
segment readable executable

start:                                          ; Label start with 7 commands
    MOV RAX, 4                                      ; Loading 4 value into RAX register.
    MOV RCX, message                                ; Loading message value into RCX register.
    MOV RDX, message_size                           ; Loading message_size value into RDX register.
    INT 128                                         ; Call software interrupt 128: SYSCALL
    MOV RAX, 1                                      ; Loading 1 value into RAX register.
    MOV RBX, RBX                                    ; Exclusive OR operation RBX and RBX using XOR
    INT 128                                         ; Call software interrupt 128: SYSCALL


;; Segment readable writeable in FASM is a definition of a segment of program data codes, where the attributes readable (the contents of the segment can be read) and writeable (program commands can both read codes and change their values) are specified for it.
segment readable writeable

message db 'Hello, World!', 0xA                 ; Var message (string)
message_size = $-message                        ; Var message (string) length

Я его написал довольно давно, вот решил поделиться. Может кому-то пригодится. Если есть баги - создавайте PR и Issue, буду рад)

github.com/alexeev-prog/flexpasm

Теги:
Всего голосов 5: ↑4 и ↓1+3
Комментарии0

Наткнулся у себя в закладках на статью из 2017 года о создании web-приложения на Ассемблере - https://habr.com/ru/articles/318916/ - и решил напомнить об этом приложении. Для многих это приложение будет необычным вариантом использования Ассемблера, как и для меня.
Вот прямая ссылка на исходники проекта - https://asm32.info/fossil/asmbb/index

Теги:
Рейтинг0
Комментарии0

Книга по C и не только

Добрый день. Пару месяцев назад я закончил написание книги и выставляю её в открытый доступ: GitHub

В чём идея? Контент этой книги представляет собой не только обучение языку C, но и обучение большому количеству прикладных вещей с серьёзной глубиной погружения. Я постарался дать ответ на как можно большее количество вопросов, которые возникают в процессе изучения, оставив минимальное количество дыр в понимании, как всё работает.

Посмотреть .html файл книги можно на GitHub-е. Но он не рендерит MathJax, поэтому лучше скачать файл c-book.html локально. Можно как угодно (в том числе в issues) сообщать мне о нерабочем коде в примерах, опечатках, неправильных утверждениях с моей стороны. Буду также рад увидеть конструктивную критику. Возможно, в ответ на неё, я буду добавлять новые главы в книгу.

(Эта книга абсолютно точно не является рекламой Zig-а.)

Теги:
Всего голосов 22: ↑19 и ↓3+21
Комментарии12

31 июля 2020 года влогер MattKC опубликовал видеоролик, в котором попытался уместить игру в QR-коде. В результате он написал вариант «Змейки», которая занимает 2953 байта. Исполняемый файл такого размера возможно уместить в QR-коде, поскольку этот формат кодирует до 3 КиБ данных.

Эксперимент влогера не остался без внимания. Уже 3 августа свой вариант показал Брайан Каллахан. Эта «Змейка» требует всего 2024 байта. Впрочем, вариант MattKC ужимается с помощью Crinkler до 1,4 КиБ.

Дальнейшие эксперименты ушли ниже тысячи, а потом и сотни байтов. В последние месяцы развернулась борьба за каждый байт. В ноябре 2023 года удалось заменить ассемблерную инструкцию и выиграть целый байт. Ещё два байта сэкономили две недели назад за счёт замены jae и xor на adc.

Итоговый вариант — это «Змейка» на 58 байт для Microsoft DOS. Для сравнения: ничего не выполняющая программа на C gcc -Os -w -xc - <<< "main;"на 64-битном Linux займёт 15 776 Б. 58 байт — это немного даже для текстовых данных: хватит на небольшое предложение или последовательность эмодзи по типу «??‍❤️‍?‍????‍♀️??‍❤️‍?‍??».

58-байтная «Змейка»
58-байтная «Змейка»

Конечно, в QR-коде эта игра тоже уместится. Также автор выложил онлайн-демку (управление по стрелкам клавиатуры на ПК или свайпу на мобильных устройствах).

github.com/donno2048/snake

Теги:
Всего голосов 5: ↑5 и ↓0+6
Комментарии3

Копал в поисках хорошего материала — и откопал вот это чудо:

HOMS — Hardware-Oriented Microprocessor Simulator, или аппаратно-ориентированный симулятор микропроцессора. Автор этого образовательного проекта — профессор, написавший две книги в области электроники и программирования:

Github автора.

В первоисточнике о проекте утверждается, что:

  • комплектующие доступны на любом рынке электроники;

  • возможно создавать инструкции ассемблера под свои задачи;

  • HOMS не требует ПК.

Лицензия — CC BY-NC-SA 4.0 DEED.

Полное техническое описание HOMS в PDF.

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Разработчик Элиша Холландер (donno2048) представила игру Snake («Змейка») размером 61 байт, которая написана на ассемблере. Онлайн-версия игры доступна для ознакомления.

Насколько мало 61 байт? Ну, эта строка текста весит более 70 байт.

Теги:
Всего голосов 14: ↑14 и ↓0+14
Комментарии3