nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 19:13



Reply to topic  [ 36 posts ]  Go to page 1, 2, 3  Next
NASM 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
У нас про NASM (The Netwide Assembler) отдельной темы ещё небыло, хоть и упоминали его неоднократно - короче создаю :roll:

Досовские и виндовые версии качать отсюда:

https://sourceforge.net/projects/nasm/

P.S. Если кому надо наипоследнейшее, то отсюда:

http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D

_________________
:dj: https://mastodon.social/@Shaos


27 Dec 2016 07:48
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
Создаём COM-файлы (см. http://www.nasm.us/doc/nasmdoc8.html):
Code:
       org 100h

section .text

start:
       ret

section .data

mydata db 0

section .bss

uninit resb 1

Секция .text для кода, секция .data для инициализированных данных, секция .bss для неинициализированных данных (физически не попадает в COM-файл).

Батничек для компиляции:
Code:
nasm test1.asm -fbin -o test1.com


P.S. А вот так предполагается создавать простые EXE-файлы:
Quote:
8.1.2 Using the bin Format To Generate .EXE Files

The .EXE file format is simple enough that it's possible to build a .EXE file by writing a pure-binary program and sticking a 32-byte header on the front. This header is simple enough that it can be generated using DB and DW commands by NASM itself, so that you can use the bin output format to directly generate .EXE files.

Included in the NASM archives, in the misc subdirectory, is a file exebin.mac of macros. It defines three macros: EXE_begin, EXE_stack and EXE_end.

To produce a .EXE file using this method, you should start by using %include to load the exebin.mac macro package into your source file. You should then issue the EXE_begin macro call (which takes no arguments) to generate the file header data. Then write code as normal for the bin format - you can use all three standard sections .text, .data and .bss. At the end of the file you should call the EXE_end macro (again, no arguments), which defines some symbols to mark section sizes, and these symbols are referred to in the header code generated by EXE_begin.

In this model, the code you end up writing starts at 0x100, just like a .COM file - in fact, if you strip off the 32-byte header from the resulting .EXE file, you will have a valid .COM program. All the segment bases are the same, so you are limited to a 64K program, again just like a .COM file. Note that an ORG directive is issued by the EXE_begin macro, so you should not explicitly issue one of your own.

You can't directly refer to your segment base value, unfortunately, since this would require a relocation in the header, and things would get a lot more complicated. So you should get your segment base by copying it out of CS instead.

On entry to your .EXE file, SS:SP are already set up to point to the top of a 2Kb stack. You can adjust the default stack size of 2Kb by calling the EXE_stack macro. For example, to change the stack size of your program to 64 bytes, you would call EXE_stack 64.

A sample program which generates a .EXE file in this way is given in the test subdirectory of the NASM archive, as binexe.asm.


Attachments:
EXEBIN.INC [1.58 KiB]
Downloaded 679 times

_________________
:dj: https://mastodon.social/@Shaos
27 Dec 2016 07:49
Profile WWW
Doomed

Joined: 08 Apr 2013 04:04
Posts: 449
Location: 213.247.249.139
Reply with quote
Shaos wrote:
Досовские и виндовые версии качать отсюда:
https://sourceforge.net/projects/nasm/

[в порядке брюзжания]
"THIS PAGE IS OUT OF DATE; we no longer use any Sourceforge services other than mailing lists."
"We are gradually moving services away from Sourceforge to this page."
http://www.nasm.us же!

_________________
привет засранцу лавру :)


27 Dec 2016 08:03
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
angry_troll wrote:
Shaos wrote:
Досовские и виндовые версии качать отсюда:
https://sourceforge.net/projects/nasm/

[в порядке брюзжания]
"THIS PAGE IS OUT OF DATE; we no longer use any Sourceforge services other than mailing lists."
"We are gradually moving services away from Sourceforge to this page."
http://www.nasm.us же!

Intel придумал новые мнемоники для 8086/8088 в последние годы? :o

Я насмом пользовался ещё в 1998 - мне хватало той версии что была на тот момент :)

Там даже MMX-инструкции были, в отличие от TASM, куда надо было их макросами вставлять...

_________________
:dj: https://mastodon.social/@Shaos


27 Dec 2016 08:30
Profile WWW
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Quote:
Intel придумал новые мнемоники для 8086/8088 в последние годы?

SSE
AES
AVX/AVX2
FMA
и много чего еще.
О применимости всего это можно спорить, просто для галочки - да, Intel придумал. :)


28 Dec 2016 00:41
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
Vic3Dexe wrote:
Quote:
Intel придумал новые мнемоники для 8086/8088 в последние годы?

SSE
AES
AVX/AVX2
FMA
и много чего еще.
О применимости всего это можно спорить, просто для галочки - да, Intel придумал. :)

И все это добро волшебным образом появилось в 8086/8088? :no:

_________________
:dj: https://mastodon.social/@Shaos


28 Dec 2016 06:16
Profile WWW
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Quote:
Там даже MMX-инструкции были

Так я думал речь об архитектуре идет :)


28 Dec 2016 06:26
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
Vic3Dexe wrote:
Quote:
Там даже MMX-инструкции были

Так я думал речь об архитектуре идет :)

Ну в 1998 я был на гребне волны, а щас так - ретро баловство :)

_________________
:dj: https://mastodon.social/@Shaos


28 Dec 2016 06:40
Profile WWW
Senior

Joined: 31 Mar 2012 16:50
Posts: 152
Location: 93.73.80.128
Reply with quote
Shaos wrote:
P.S. А вот так предполагается создавать простые EXE-файлы:
Quote:
8.1.2 Using the bin Format To Generate .EXE Files


По-моему ересь высшей пробы, потому что создаются exe с возможностями хуже чем com. Может если покопать дальше и разобраться то там можно таким способом "руками" создавать "exe" любой сложности, но тут явно нужно быть экспертом в этих DOS loader-ах и memory manager-ах. Может тогда проще накидать свой загружчик в com который обеспечит подгрузку и диспечеризацию любого количества 64кб оверлеев.


08 Jan 2017 11:45
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
Почему хуже? Код и данные могут в разных сегментах сидеть при такой "ручной" сборке EXE

Кстати я знаком с французом, который эти EXE-макросы для NASM изначально придумал в лихих 90х :)

_________________
:dj: https://mastodon.social/@Shaos


08 Jan 2017 13:30
Profile WWW
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Что меня всегда вымораживало во всех этих tasm/masm/nasm - на выходе получался obj, а значит обязательно нужен какой-нибудь tlink/ld etc для получения нормального com/exe. Ну и отсутствие IDE в принципе.
Потому давно ушел на fasm и не жалею.


08 Jan 2017 20:59
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
Ну почему же? Сверху же написано как запускать NASM, чтобы он генерил BIN :)

_________________
:dj: https://mastodon.social/@Shaos


08 Jan 2017 21:18
Profile WWW
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Да понятно, но это костыль в общем-то, и только под дос. Под винду или линь уже не прокатит такое.
У nasm для меня одно преимущество перед masm/tasm - гораздо более приятный синтаксис. Нет идиотских assume, обращения к переменной var через [var] (как и к любому другому адресу памяти), обращения к адресу переменной через var (без всяких лишних offset).


08 Jan 2017 22:10
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22413
Location: Silicon Valley
Reply with quote
Меня там одно смущало всегда - для LEA надо адрес в квадратных скобках указывать и это после MASM выглядело совершенно нелогично...

_________________
:dj: https://mastodon.social/@Shaos


08 Jan 2017 22:54
Profile WWW
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Именно об этом я и говорю - адрес всегда в квадратных скобках, и это совершенно логично.

В masm - если адрес лежит в регистре, скобки нужны:
Code:
mov ax,[bx]

если нет - не нужны
Code:
mov ax,a

a dw 0

если адрес - константа, приходится городить совсем уже непойми что
Code:
mov ax,ds:[0]


Nasm и fasm предлагают одинаковое поведение во всех случаях:
Code:
mov ax,[bx]
mov ax,[a]
mov ax,[1234h]


09 Jan 2017 08:43
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 36 posts ]  Go to page 1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.