Помогите начать ASM
Решил попробовать ASM. В следующем году мне это пригодиться. Скачал FASM. Почитал статью - http://wasm.ru/article.php?article=1022001. Взял готовый пример, чтобы просто посмотреть, как это все работает. А оно не рабртает:
mov ah,9h
mov dx,hello
int 21h
mov ah,8h
int 21h
int 20h
hello db 13,10,"Hello, World!$"
Неподдерживаемое 16-разрядное приложение
---------------------------
Не удалось запустить программу или компонент "\??\C:\Users\Evgen\Documents\hel.COM" из-за несовместимости с 64-разрядной версией Windows. Обратитесь к разработчику программного обеспечения за версией программы, совместимой с 64-разрядной версией Windows.
---------------------------
ОК
---------------------------
Можно сделать, чтобы оно работала под win 7 x64?
угу, либо можно сделать загрузочную флешку с той фигнёй, что в загрузочных дискетах Windows 98, оттуда тоже будут такие программки работать
А нет примера, как в 1 моем сообщении, чтобы в консоли какой-нибудь текст выводился? Я попробовал его в yasm засунуть, но получил ошибку:
hel.asm:1: error: instruction expected after label
extern _printf
extern _getchar
section .text
_main:
push message
call _printf
call _getchar
add esp, 4
ret
message:
db 'Hello, World', 10, 10
для yasm'a примерно тоже самое!=)
я не понял как это решит проблему с невозможностью запуска DOS приложения в Win7. Под FASM тоже можно написать:
include "win32axp.inc"
entry start
section ".text" code readable executable
invoke MessageBox,HWND_DESKTOP,"Hello world!","Hello",MB_OK
invoke ExitProcess,0
section ".idata" import readable writable
library kernel32,"KERNEL32.DLL",\
user32,"USER32.DLL"
include "api\kernel32.inc"
include "api\user32.inc"
...
Это вроде как не под Windows. или хотя бы с использованием компоновщика для создания экзешника. Для FASM это будет выглядеть так:
public main
extern printf
extern getchar
section ".text" readable
push message
call printf
call get_char
add esp, 4
ret
message db "Hello world!",10
fasm тоже нормально поддерживает 64-битный код. Достаточно в начале поставить:
или
В папке с FASM v1.69.14 лежат примеры исходников для Win64 (Examples\Win64) и при исправной работе WoW64 их можно скомпилировать или написать свои программы.
З.Ы. ФАСМ Форева!!!:)
Что-то я не понял. Если вы про импорт с помощью library/import, то это вполне нормально. ЛЮБАЯ корректная программа для Windows использует её функции таким способом. Или каждая программа должна сама окошки рисовать, сама уметь обращаться к файловой системе? Любой компилятор в конечном счёте делает вот такой импорт из внешних библиотек. Просто в C++ или MASM импорт идёт из lib-файлов, а в FASM - явно, описанием в секции импорта необходимых структур (такой подход мне нравиться больше. Это одна из причин из-за которой я не люблю MASM и люблю FASM).