Для работы вам потребуется ассемблер nasm, версии не ниже 2.04.
Сайт проекта – http://www.nasm.us
Документация на русском языке для версии 0.98: http://www.opennet.ru/docs/RUS/nasm/. Несмотря на то, что текущая версия ушла сильно вперед (2.09.04 на февраль 2011), можно пользоваться в ознакомительных целях.
Скачать ассемблер nasm для можно здесь: http://www.nasm.us/pub/nasm/releasebuilds/2.09.04/linux/.
Если Вы работаете под операционной системой Windows, одним из решений является установка среды cygwin . Скачав отсюда сетевой инсталлятор 32 разрядной версии среды, вы сможете развернуть cygwin на Вашей машине и транслировать ассемблерные программы из-под нее. По-умолчанию nasm не устанавливается, его необходимо явно отметить при установке.
Другой вариант, позволяющий незамедлительно разрабатывать/транслировать/отлаживать – учебная среда разработки с открытым исходным кодом SASM. Она уже содержит в себе все требуемые компоненты (cygwin, nasm, gdb, …).
Минимальная ассемблерная программа выглядит следующим образом:
%include "io.inc" section .text global CMAIN CMAIN: ; вместо этого комментария здесь должен быть код ret
Строка %include “io.inc” обеспечивает программу средствами ввода/вывода и определяет должным образом идентификатор CMAIN, указывающий начало программы аналогично тому, как это делает функция main в Си-программах.
Пример “Hello world!” имеет следующий вид:
%include "io.inc" section .data msg db 'Hello, world!', 0 section .text global CMAIN CMAIN: PRINT_STRING msg NEWLINE ret
Замечание. Если написать в секции данных следующий код:
.data str db 'Hello, world!', 0
то ассемблер выдаст сообщение об ошибке. Причина тому – существование ассемблерной инструкции с кодом str.
Имя макроса | Описание макроса |
PRINT_UDEC size, data
PRINT_DEC size, data |
Вывод числовых данных заданных параметром data в 10-чном представлении. Параметр size – число, указывающее размерность данность в байтах; допускаются значения 1, 2, 4. В качестве параметра data может выступать числовая константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то берется заданное параметром size количество младших разрядов. PRINT_UDEC интерпретирует число как беззнаковое, PRINT_DEC — как знаковое. |
PRINT_HEX size, data | Аналогично предыдущему, но данные выводятся в 16-чном представлении. |
PRINT_CHAR ch | Печатается символ, заданный параметром ch. В качестве параметра может выступать численная константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Печатается всегда содержимое 8 младших разрядов. |
PRINT_STRING data | Печать строки текста, оканчивающейся символом с кодом 0. В качестве параметра можно передавать строковую константу, имя переменной или адресное выражение (без спецификатора размера данных в памяти). В случае печати строковой константы, наличие символа с кодом 0 в конце строки необязательно. |
NEWLINE | Макрос переводит печать на новую строку. |
GET_UDEC size, data
GET_DEC size, data |
Ввод числовых данных в 10-чном представлении с клавиатуры. Размер вводимых данных ограничен параметром size, который задается числом (1, 2, 4). Введенные данные обрезаются соответствующим образом. Параметр data – либо имя переменной, либо имя регистра, либо адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то старшие разряды заполняются знаковым битом в случае GET_DEC и нулями в случае GET_UDEC. GET_UDEC считывает беззнаковое число, GET_DEC — знаковое. Запрещается использовать в качестве параметра регистр eSP. |
GET_HEX size, data | Аналогично предыдущему, но данные задаются в 16-чном представлении с префиксом 0x. |
GET_CHAR data | Аналогично предыдущему, но происходит считывание одного символа, нажатие Enter не требуется. Более того, нажатие Enter будет расцениваться как ввод управляющих символов перевода строки: 0xD 0xA в ОС Windows, 0xA в ОС *nix. Если параметр – регистр, размер которого больше 1 байта, значение считанного символа будет дополнено нулями. |
GET_STRING data, maxsz | Ввод последовательности символов длиной не более чем (maxsz-1). Чтение последовательности останавливается на EOF или переводе строки, причем перевод строки сохраняется в буфере. В конец считанной строки добавляется символ с кодом 0. Параметр data – либо имя переменной, либо адресное выражение (без спецификатора размера данных в памяти). Параметр maxsz – регистр (io.inc версия 1.1) или числовая константа. |
Pingback: Обновление документации | Архитектура ЭВМ и язык ассемблера
Pingback: Версия nasm | Архитектура ЭВМ и язык ассемблера
Pingback: Пользователям компьютеров Macintosh | Архитектура ЭВМ и язык ассемблера
Pingback: Разработка учебных программ | Архитектура ЭВМ и язык ассемблера
Pingback: Исправление документации | Архитектура ЭВМ и язык ассемблера