Instalacja Asemblera masm

0

Witam.

Ostatnio czytam książkę o Asemblerze. Lecz problem jaki mnie napotkał to zainstalowanie jakiegoś masma lub opcjonalnie tasm. Jak coś przeszukałem dużo stron , YouTube itp. Lecz na nic sensownego nie trafiłem. Raz pobrałem Masm32 SDK lecz zainstalował jakieś edytory itp których nie potrzebuję bo mi zależy tylko na tym masmie. Był bym bardzo zadowolony gdyby ktoś chociaż wskazał drogę. Nie mówię od razu linka do pliku czy coś.

Za każdą pomoc bardzo dziękuję i życzę miłego dnia.

Ps: Mam zainstalowanego MVS 2017. Z tego co wyczytałem na stronie Microsoft posiada on tego masma lecz nie wiem jak go użyć. Obejrzałem filmy jak usawić projekt pod ASM lecz nie działa.

2

Polecam FASM, jest chyba najlepszy na windę. Doczytaj o różnicach w składni, które są bardzo nieznaczne, bo co jakie mogą być różnice w języku jak assembler? :D Przecież i tak wszystko ma się sprowadzać do wiernego odzwierciedlenia architektury procesora.Na jednej stronie A4 się wszystko spokojnie zmieści pisane dużą czcionka.

4

Popularny jest też NASM. Składnia NASM i FASM jest zbliżona.
MASM jest trochę inny.

0

Witam.

Po ciężkiej walce z masm to zdecydowałem się na nasm (Po prostu te przykłady z książki będę przekładał na składnię nasm a różnica duża nie jest więc zrozumienie jest takie same) . Tylko teraz mam problem z kompilacją.
Mam taki kod w asswemblerze.

; Define variables in the data section
SECTION .DATA
	hello:     db 'Hello world!',10
	helloLen:  equ $-hello

; Code goes in the text section
SECTION .TEXT
	GLOBAL _start 

_start:
	mov eax,4            ; 'write' system call = 4
	mov ebx,1            ; file descriptor 1 = STDOUT
	mov ecx,hello        ; string to write
	mov edx,helloLen     ; length of string to write
	int 80h              ; call the kernel

	; Terminate program
	mov eax,1            ; 'exit' system call
	mov ebx,0            ; exit with error code 0
	int 80h              ; call the kernel

Na początku tłumaczę na moduł obiektowy poleceniem.
nasm -f elf64 main.asm -o main.o

A potem składam w wynikiowy poleceniem:
ld main.o -o HelloWorld.exe

I podczas tłumaczenia na plik wynikowy dostaję taką informację od linkera: "main.o: file not recognized: File format not recognized"
Robiłem wszystko według poradników w internecie i nie wiem co może być winą.

Dziękuję za pomoc i życzę miłego dnia.

1

Nie jestem pewny, ale może chodzić o to, że twój kod jest 32-bitowy, a format jest elf64. Od tego bym zaczął. Tak więc albo zmień format na elf, albo jeszcze lepiej, naucz się pisać na 64-bitową architekturę. Różnice są małe, ale istotne.

0

To jest kod pod Linuxa. elf64 to też linuxowy format. exe to nie jest linuxowe rozszerzenie, chociaż samo w sobie nie zaszkodzi.
Wcześniej była mowa o VS i masm. O jakim systemie więc mówimy?

0

@Azarien: Też prawda, przeoczyłem to rozszerzenie. Kod zdecydowanie jest pod Linuxa x86.

1 użytkowników online, w tym zalogowanych: 0, gości: 1