Netwide Assembler - NASM - problem

5 отговора 189 прегледа
#1

Netwide Assembler - NASM - problem

Отскоро се уча на асемблер и използвам насм. Та проблема ми е с компилираните програми: под ДОС те си вървят нормално, но под Уиндоус се получава съобщение за грешка (нещо от рода на is not a valid win32 application). Защо се получава?

Имам още два въпроса: 1.Как се създават сегменти в една НАСМ програма (нещо като моделите .model small, medium, compact, huge ..., но за НАСМ)?
2. Какво да направя за да отпечатам на екрана Здравей, Свят! без ДОС на боот-а на някоя дискета? (само кода ме интересува; имам hex. редактор за дискети)

"640 kB са достатъчни на всекий за всичко" - Бил Гейтс

Редактирано от mialy на

Отговор
в отговор на mialy #2

Re: Netwide Assembler - NASM - problem

Първо ще те попитам, какво имаш предвид под НАСМ програма, щото не съм съвсем сигурен...

По реда на въпросите:

1. Сегменти се пишат според спецификацията на съответния асемблер, който се задава от производителя на процесора, а не на компилатора. Самият NASM има много елегантен подход и позволява доста други освен конвеционалните структури на подреждане, но не те съветвам да се занимаваш с висш пилотаж преди да стъпиш на здрава почва. За правилния синтаксис, прочети документацията. NASM има доста голяма такава, където е описано абсолютно всичко.

2. За да отпечаташ нещо на екрана без ДОС дискета, ползвай друга ОС. Ако имаш предвид, как да отпечаташ нещо на екран без каквато и да било ОС, напиши си boot-сектор. Сорс на boot-сектор бих ти написал, но първо ще уговорим някаква цена.

Ако искащ обаче да напишеш "Здравей, свят!" ще трябва да заредиш и кирилица. Давам ти гаранция, че само с boot-сектор няма да стане. В 512 байта нама да събереш необходимия шрифт. Виж ако искаш да отпечаташ "Hello, world!" това е проста работа.

**************

More about NASM: Миналата година открихме два бъга. Единият е калпаво превеждане на инструкция с относително адресиране чрез все още необявена константа (нещо което NASM поддържа). Примерно:

mov eax,[edi+ConstAddress]

където ConstAddress не е обявен. Ако ConstAddress се обяви като нула по-долу, адресацията се асемблира като [edi+0], а не като [edi]. Нулата естествено се записва с 16 или 32 бита според сегмента.

Вторият бъг е по-сериозен - променя смисъла на инструкцията, слагайки неверен префикс. В 16-битов сегмент инструкциите JCXZ/JECXZ се превеждат винаги като JCXZ, а в 32-битов като JECXZ. За последствията си правете изводи...

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на Duncan Griffin #3

Re: Netwide Assembler - NASM - problem

Тогава кой асемблер компилатор да използвам (все пак V2_OS е правена на него)? Micro$oft MASM или Borland TASM?

"640 kB са достатъчни на всекий за всичко" - Бил Гейтс
Отговор
в отговор на mialy #4

Re: Netwide Assembler - NASM - problem

Абе и NASM става но той не поддържа модели на паметта. Хубаво е да прочетеш документацията. Ако не разбираш английски, ще чакаш докато я преведа. За сега съм на 1500 ред.

Отговор
в отговор на ---- #5

Re: Netwide Assembler - NASM - problem

Ще чакам.

"640 kB са достатъчни на всекий за всичко" - Бил Гейтс
Отговор
в отговор на mialy #6

Re: Netwide Assembler - NASM - problem

Че ползвай го, компилаторът е супер.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор