Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > ошибка


Автор: try_to_get 5.8.2007, 18:20
Написал все как в книге, а исполняемый файл не создался?!  smile 
Код

.386
.model flat,stdcall
.code
start:
mov eax,2
add eax,3
ret
end start

Где ошибка никто не занет?

Автор: try_to_get 5.8.2007, 18:41
Цитата

C:\myasm\BIN>amake.bat

C:\myasm\BIN>ml /c /coff ".asm"
Microsoft ® Macro Assembler Version 6.14.8444
Copyright © Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: .asm
MASM : fatal error A1000: cannot open file : .asm

C:\myasm\BIN>link /SUBSYSTEM:CONSOLE ".obj"
Microsoft ® Incremental Linker Version 5.12.8078
Copyright © Microsoft Corp 1992-1998. All rights reserved.

LINK : fatal error LNK1181: cannot open input file ".obj"

Автор: cardinal 5.8.2007, 18:44
Пропиши полностью название файла. Мне кажется в этом загвоздка...

Автор: try_to_get 5.8.2007, 18:49
Урааа....  smile Спасибо!

Автор: cardinal 5.8.2007, 18:52
Не за что... smile 

Автор: try_to_get 5.8.2007, 18:53
А почему он так много весит?
1 024 bytes

Автор: cardinal 5.8.2007, 19:17
Открой каким-нибудь Hex-Editor'ом и посмотри в нем размер...

Автор: Shaggie 7.8.2007, 07:44
Цитата(try_to_get @  5.8.2007,  19:53 Найти цитируемый пост)
А почему он так много весит?
1 024 bytes 

Цитата

В Windows минимальное выравнивание секций 512 байт, т.к. PE-формат предпологает заголовок, размер которого отнюдь не нулевой, то секция кода начнется как минимум с 512 байта и будет как минимум 512 байт. Итого, минимальный размер - 1кб.
Конечно, можно выбросить нули, которые добивают секцию кода до 512 байт, но это будет нарушением формата PE-файлов и не все загрузчики его загрузят.

Т.о. минимальный валидный PE-файл может быть не менее 1кб.

http://forum.codenet.ru/showthread.php?t=40165&page=2

Автор: try_to_get 7.8.2007, 07:57
Shaggie  У меня еще один есть компилятор MASM он создает файл с размером примерно 500 байт, где- то еще читал WASM чтоли создает 81 байт что они не придесживаются стандарту PE-файлов??? 

Автор: Shaggie 7.8.2007, 08:22
Цитата(try_to_get @  7.8.2007,  08:57 Найти цитируемый пост)
еще один есть компилятор MASM он создает файл с размером примерно 500 байт

Директива /ALIGN линкеру задаёт размер выравнивания, читай Касперски и экспериментируй. В итоге можно добится того, что секция кода практически перестанет забиваться нулями, то есть в файле будет заголовок = 512 байт и совсем немного кода. С учётом того, что над заголовком тоже можно издеваться и отрезать нули...

Цитата(try_to_get @  7.8.2007,  08:57 Найти цитируемый пост)
где- то еще читал WASM чтоли создает 81 байт

WASM - не ассемблер, а сайт, посвящённый ассемблеру... никогда про такое не слышал.

try_to_get, рекомендую забить пока на эту оптимизацию и сосредоточиться на самом ассемблере. Выигрыш незначителен, траблов много. Это интересно для самостоятельного изучения и понимания принципов работы PE-файлов, но не более того.

На сладкое прикладываю файл с экзешником, весящим 302 байта. Сразу предупреждаю - не я писал.

Автор: try_to_get 7.8.2007, 09:11
Цитата

WASM - не ассемблер, а сайт, посвящённый ассемблеру... никогда про такое не слышал.

Вот здесь видел http://ruasm.ru/asm2/ch04_02.php, там внизу такая запись:

Цитата

Для WASM:

wasm hello-2.asm
wlink file hello-2.obj form DOS

Размер получаемого файла hello-2.exe — 81 байт.


http://ruasm.ru/asm2/ch01_01.php здесь написано, что WASM создан Watcom

Автор: Shaggie 7.8.2007, 09:42
Ага, Watcom Assembler... посыпаю голову пеплом  smile 

Цитата(try_to_get @  7.8.2007,  10:11 Найти цитируемый пост)
form DOS

У исполняемых файлов под DOS другой заголовок. Точнее сказать, современный PE-формат файлов в Windows является расширением MZ-формата DOS. Насколько я помню (могу ошибаться), в DOS заголовок файла 64 байта, плюс код - как раз получается 81 байт. Но такой файл не будет запускаться в Windows.

Из того же листинга
Цитата

.model     small
.stack     100h

Это устаревшая директива создания .exe файла, сейчас используется .model flat
Плюс ко всему в коде используется 1) 16 разрядные регистры, 2) 21 прерывание. Если использование 16 разрядных регистров просто неэффективно, то практически к любому прерыванию напрямую из-под защищённого режима операционной системы обращаться запрещено.

Автор: try_to_get 7.8.2007, 10:02
У меня возник вопрос насчет регистров!?  smile 
Не зняю правильно ли я понял!

регистры
eax, ecx и т.д. 32 разрядные. У меня процессор 64 разрядный, значит у него есть 64 разрядные регистры?
Это так или я ошибаюсь?

Автор: Shaggie 7.8.2007, 10:07
Не ошибаешься. Только чтобы работать с 64 разрядными регистрами, нужна поддерживающая их операционка :( И вообще народ серьёзно спорит о том, нужна ли на десктопе 64 разрядность. Бывают мнения, что это не есть гут.

Однако если только учишься - сначала классический 32 разрядный ассемблер освоить нужно.

Автор: try_to_get 7.8.2007, 10:10
Понятно!  smile

Добавлено через 6 минут и 6 секунд
Shaggie, спасибо за помощь! Я думаю, вопрос решен и тему можно закрыть.

Автор: W4FhLF 7.8.2007, 10:23
try_to_get, в твоём распоряжении есть ещё куча регистров, помимо основных 7ми. FPU(80 бит), MMX(64 бита), XMM(128 бит). Но, конечно же, область их применения ограничена, в качестве регистров адресации они использованы быть не могут. 

Автор: somewhere 8.8.2007, 09:53
Цитата(W4FhLF @  7.8.2007,  10:23 Найти цитируемый пост)
FPU(80 бит), MMX(64 бита)

По сути один и тот же регистр, но стоит добавить что их восемь по 80 бит.

Автор: Samotnik 9.10.2007, 10:57
а можно вопрос!
почему  собственно ты используешь режим .386
а к регистрам обращаешся в 32-р режиме???? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)