Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22758 Location: Silicon Valley
|
У нас про NASM (The Netwide Assembler) отдельной темы ещё небыло, хоть и упоминали его неоднократно - короче создаю Досовские и виндовые версии качать отсюда: https://sourceforge.net/projects/nasm/P.S. Если кому надо наипоследнейшее, то отсюда: http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D
|
27 Dec 2016 07:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22758 Location: Silicon Valley
|
Создаём COM-файлы (см. http://www.nasm.us/doc/nasmdoc8.html): Секция .text для кода, секция .data для инициализированных данных, секция .bss для неинициализированных данных (физически не попадает в 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. | | | | |
|
27 Dec 2016 07:49 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
[в порядке брюзжания] "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 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22758 Location: Silicon Valley
|
Intel придумал новые мнемоники для 8086/8088 в последние годы? Я насмом пользовался ещё в 1998 - мне хватало той версии что была на тот момент Там даже MMX-инструкции были, в отличие от TASM, куда надо было их макросами вставлять...
|
27 Dec 2016 08:30 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
SSE AES AVX/AVX2 FMA и много чего еще. О применимости всего это можно спорить, просто для галочки - да, Intel придумал.
|
28 Dec 2016 00:41 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22758 Location: Silicon Valley
|
| | | | Vic3Dexe wrote: SSE AES AVX/AVX2 FMA и много чего еще. О применимости всего это можно спорить, просто для галочки - да, Intel придумал. | | | | |
И все это добро волшебным образом появилось в 8086/8088?
|
28 Dec 2016 06:16 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Так я думал речь об архитектуре идет
|
28 Dec 2016 06:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22758 Location: Silicon Valley
|
Ну в 1998 я был на гребне волны, а щас так - ретро баловство
|
28 Dec 2016 06:40 |
|
|
bigral
Senior
Joined: 31 Mar 2012 16:50 Posts: 152 Location: 93.73.80.128
|
По-моему ересь высшей пробы, потому что создаются exe с возможностями хуже чем com. Может если покопать дальше и разобраться то там можно таким способом "руками" создавать "exe" любой сложности, но тут явно нужно быть экспертом в этих DOS loader-ах и memory manager-ах. Может тогда проще накидать свой загружчик в com который обеспечит подгрузку и диспечеризацию любого количества 64кб оверлеев.
|
08 Jan 2017 11:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22758 Location: Silicon Valley
|
Почему хуже? Код и данные могут в разных сегментах сидеть при такой "ручной" сборке EXE Кстати я знаком с французом, который эти EXE-макросы для NASM изначально придумал в лихих 90х
|
08 Jan 2017 13:30 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Что меня всегда вымораживало во всех этих tasm/masm/nasm - на выходе получался obj, а значит обязательно нужен какой-нибудь tlink/ld etc для получения нормального com/exe. Ну и отсутствие IDE в принципе. Потому давно ушел на fasm и не жалею.
|
08 Jan 2017 20:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22758 Location: Silicon Valley
|
Ну почему же? Сверху же написано как запускать NASM, чтобы он генерил BIN
|
08 Jan 2017 21:18 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Да понятно, но это костыль в общем-то, и только под дос. Под винду или линь уже не прокатит такое. У nasm для меня одно преимущество перед masm/tasm - гораздо более приятный синтаксис. Нет идиотских assume, обращения к переменной var через [var] (как и к любому другому адресу памяти), обращения к адресу переменной через var (без всяких лишних offset).
|
08 Jan 2017 22:10 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22758 Location: Silicon Valley
|
Меня там одно смущало всегда - для LEA надо адрес в квадратных скобках указывать и это после MASM выглядело совершенно нелогично...
|
08 Jan 2017 22:54 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Именно об этом я и говорю - адрес всегда в квадратных скобках, и это совершенно логично. В masm - если адрес лежит в регистре, скобки нужны: если нет - не нужны если адрес - константа, приходится городить совсем уже непойми что Nasm и fasm предлагают одинаковое поведение во всех случаях:
|
09 Jan 2017 08:43 |
|
|