четверг, 1 октября 2009 г.

Опустившись к низам

Многое можно нафантазировать из названия. На самом деле сегодня речь пойдет о NASM. Почему именно о нем? А вдруг пригодится кому нибудь:)

Вобщем прийдя на пары и обнаружив что лабораторные работы под Ubuntu 64bit не спешат компилироваться я был очень расстроен. Но прийдя домой принялся искать решение. Несмотря на то что совсем недавно "пересел" на Linux я успел подружиться с bash во преки бытующему среди пользователей Windows мнению консоль оказалась очень даже удобным инструментом про реализацию консоли в Win я пожалую промолчу. И так первое что я сделал это полез в Google. Но найти интересующую меня информацию оказалось не так просто. Программирование на Asm под Linux оченб нераспространенное занятие.

Но не смотря на это решение оказалось очень даже простым. Первое что я сделал это открыл консоль.

# man nasm

или

# nasm -h

Несмотря на то что документации там маловато(кстати man происходит от слова manual, если кому интересно) решение было почти найдено. Перед началом программы надо обьявить директиву:

BITS 64

На самом деле nasm не различает регистр если его не попросить так что можно и не строить из себя блондинку))

Тем неменее до компиляции оставался еще один шаг. Все дело в том что для того чтоб скомпилировать код раньше я использовал комманду:

# nasm -f elf lab1.asm

Не особо задумываясь над е значением на самом же деле директива -f задает формат выходного файла в нвшем случае elf. Что естественно предназначается для 32 систем. К сожалению документации по форматам я так и не нашел но благодаря смекалке:

# nasm -f elf64 lab1.asm

Это вобщем то и решило все мои проблемы осталось только слинковать:

ld lab1.o

ну и запустить:

# ./a.out

Не много ли проблем?:) Посмотрим, впереди еще много интересного.

1 комментарий: