Вопрос по assembly, 64bit, 32-bit – 64-битный Windows-ассемблер

8

Я хочу запрограммировать сборку 64-битных окон (желательно с использованием NASM). Я выглядел довольно, но на Google, но кажется, что я не могу найти 64-битный компилятор Windows. На некоторых сайтах упоминается ml64, но кажется, что он больше не включен в VC ++. Я пробовал с 32-битной сборкой, но, очевидно, он просто падает на моей 64-битной машине. Можно ли писать, компилировать и запускать 32-битные приложения на ассемблере на 64-битной Windows-машине? Или это должно быть написано и скомпилировано для 64 битов?

Благодарность

Если вы хотите использовать NASM, просто перейдите на Nasm.us и загрузите версию NASM для Win32. Он будет работать в 64-битной системе и будет создавать 64-битные приложения. Jim Mischel
@ JimMischel - я пытался это сделать, но моя программа просто зависала .. Может быть, у меня какой-то плохой код Я постараюсь найти лучший учебник, чем тот, которым я следовал. Jayson Kane
Для справки, ml64.exe включен в мою установку VS2010. Я не уверен, включен ли он в версию Express, хотя ... PinnyM
VS2010 Экспресс-пользователь здесь, ml64.exe присутствует в папках Visual Studio / VC / bin / amd64 и bin / x86_amd64. DCoder
@ PinnyM и DCoder - Спасибо, я никогда не проверял свою собственную директорию DOH. Я нашел это и на своем. Jayson Kane

Ваш Ответ

2   ответа
6

многоплатформенный переписанный NASM ассемблер, способный собирать как наборы инструкций x86, так и AMD64 / x86-64.

Однако ... Что вы, вероятно, имеете в виду, что вам нужен Линкер, чтобы связать собранный объектный код / файл (ы) для создания исполняемого файла. По крайней мере, полностью бесплатный пакет проекта MinGW (Minimal GNU для Windows) поставляется с компоновщиком (называемым ld), способным собирать как 32-, так и 64-битные исполняемые файлы Windows из объектных файлов (по крайней мере, объектный формат ELF и PE).

Вы можете определенно выполнять кросс-компиляцию / сборку 32-битных проектов в 64-битной среде и наоборот, если вы предоставите правильные параметры командной строки ассемблеру и компоновщику. Пожалуйста, обратитесь к документации инструментов по вашему выбору для более точных деталей.

*)http: //yasm.tortall.net

Правильно. Спасибо за указание на это, я совершенно неправильно понял контекст и перепутал терминологию. Я отредактировал и улучшил ответ для более подробной информации. zxcdw
Большое спасибо за ваше сообщение. Я использую ld, чтобы связать это, но это, кажется, все еще терпит крах. Можно ли предоставить мне фрагмент кода сборки, который можно скомпилировать с помощью yasm и связать в 64-разрядной системе, но записать в 32-разрядной сборке? Это не должно ничего делать. Просто скомпилируйте и запустите без сбоев. Это было бы прекрасно Jayson Kane
Я думаю, что ld это просто компоновщик .. Jayson Kane
У меня нет машины с Windows, но на машине с Linux все, что вам действительно нужно сделать, это использовать флаг yasm '-f' (\ f в windows?) С 'elf32' ('win32' для Windows) в качестве параметр. Затем для ld вы используете флаг '-m' (опять же, используйте \ вместо -) с параметром 'elf_i386' для получения 32-битного исполняемого файла. Однако в Windows вам нужны разные флаги. Вы можете увидеть доступные флаги эмуляции, используя флаг '-V' (\ V ..?), Затем выберите лучшего кандидата и попробуйте. В общем, это выглядит так: 'yasm some.asm -o some.o -f elf32' и 'ld some.o -o some.bin -m elf_i386'. Так что просто поменяй elf32 & elf_i386 zxcdw
3

собирать и запускать 32-разрядную сборку в 64-разрядной Windows. Я написал несколько утилит в masm32 на моем компьютере с Windows 7 x64. Если вы хотите собрать 64-битный код, я считаю, что FASM поддерживает 64-битный объектный код.

Похожие вопросы