Весь декабрь был отмечен предновогодней суетой, шумом и большими объемами работы. В какой-то момент нервы сдали, я произнесла небольшую речь по теме: «Все достало! Все тлен! Мы занимаемся какой-то фигней, никакого развития» и в качестве психотерапии установила себе MASM32. И не пожалела :)
Занятия ассемблером благотворно влияют на организм уставшего от работы программиста. Успокаивают нервы, улучшают работу мозга.
Как установить MASM32
Скачать архив с сайта www.masm32.com, распаковать и запустить распакованный файл install.exe на выполнение. Он будет задавать очень много вопросов и требовать много подтверждений, но никаких специальных знаний для установки не потребуется. Я установила и скачала 11 версию masm.
В списке системных переменных нужно изменить значение переменной «PATH». Дописать в конце строки:
1 |
C:\masm32\bin |
Первая программа на ассемблере
Cтандартный «Hello World». Для вывода результатов я решила сразу использовать окна windows, а не консоль. По простой причине — так красивее.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
.386 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib .data msg_title db "Title", 0 msg_message db "Hello world", 0 .code start: invoke MessageBox, 0, addr msg_message, addr msg_title, MB_OK invoke ExitProcess, 0 end start |
Запускаем редактор C:/masm32/qeditor.exe . Вводим текст программы. Сохраняем. При сохранении обязательно надо указать вместе с именем файла расширение «.asm» . Выбираем пункт меню «Project» -> «Build All». Если в коде нет ошибок, программа будет скомпилирована и рядом с файлом исходного кода появится симпатичный exe-файл.
Вторая программа на ассемблере
Эта программа суммирует значение переменных и выводит результат.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
.486 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib include /masm32/macros/macros.asm uselib masm32, comctl32, ws2_32 .data msg_title db "Title", 0 A DB 1h B DB 2h buffer db 128 dup(?) format db "%d",0 .code start: MOV AL, A ADD AL, B invoke wsprintf, addr buffer, addr format, eax invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK invoke ExitProcess, 0 end start |
Полезные ссылки для начинающих изучение ассемблера
Отладчик OllyDbg (один из лучших, по мнению более старших и опытных коллег)
programmersclub.ru: Учебник по ассемблеру
kaimi.ru: Немного основ ассемблера
bitfry.narod.ru: Дневники чайника (хорошая статья по masm для новичков)
Во второй программе может получиться неожиданный результат, потому что в AL это младший регистр AX, а тот в свою очередь ЕАХб корочеу при присваивании MOV AL, A ;EAX может содержать мусор из предыдущей операции. Короче Я перед этим сделал mov EAX,0;тогда результат правильный.
Спасибо, Юрий!
У меня ошибки в процессе компиляции.
скачала с того сайта, установила, path изменила.
C:/masm32/qeditor.exe файла нет.
игнорирует какую-то опцию z2 (LNK4044)
конвертирует что-то из OMF в COFF (LNK4033)
и LNK1181 фатальная ошибка, не может открыть test.exe
bat:
ml.exe test.asm /AT
pause
link.exe test.obj /TINY
pause