windows - kan ikke udføre samlingsprogrammet

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg besluttede at lære at mødes i dag, fordi det syntes at være et smukt kraftfuldt værktøj, men jeg vidste ikke, hvor jeg skulle begynde at lære det, så jeg googlede det og fandt det her:
https://www.tutorialspoint.com/assembly\_programming[4]


Det fortalte mig at installere NASM og MinGW til kompilering og linking, så jeg downloadede og installerede det og sørgede for, at de begge fungerer korrekt.


Jeg kopierede den givne kode


section .text
   global \_start     ;must be declared for linker (ld)

\_start:             ;tells linker entry point
   mov  edx,len     ;message length
   mov  ecx,msg     ;message to write
   mov  ebx,1       ;file descriptor (stdout)
   mov  eax,4       ;system call number (sys\_write)
   int  0x80        ;call kernel

   mov  eax,1       ;system call number (sys\_exit)
   int  0x80        ;call kernel

section .data
msg db 'Hello, world!', 0xa  ;string to be printed
len equ $ - msg     ;length of the string


og indsatte det i et tomt dokument kaldet 'hej.asm' og sammensatte det ved at skrive


nasm -f elf hello.asm
(later nasm -f win32 hello.asm)


og bagefter


ld hello.o -o hello.exe
(later ld hello.obj -o hello.exe)


og det lykkedes at oprette en .exe-fil begge gange, men da jeg forsøgte at udføre den, åbnede den kun Windows-kommandoprompten og et nyt vindue åbnede, der sagde 'hello.exe virker ikke længere'.


Jeg ved, at dette ikke vandt noget, men burde det i det mindste løbe?


Hvad har jeg gjort forkert ?


Ved brug af:



  • Windows 7 professionel 64bit

  • AMD FX 4350

  • NASM-2.12.02

  • MinGW


Bedste reference


Du skal bruge en anden tutorial, da bruger tkausl påpegede, at denne tutorial er for Linux x86\_64 bit. [5]


For Windows kan du stadig bruge NASM assembleren og MinGW, hvis du ønsker det, men din kode vil se anderledes ud på grund af de forskellige opkald og vil også kræve, at du bruger eksterne biblioteker.


Jeg anbefaler dog at bruge MASM til Windows, som det er designet af Microsoft, og også inkluderet i MASM32v8-pakken, som har andre værktøjer. Du kan få MASM herfra: http://www.masm32.com/[6]


Der er også en vejledning til Windows Assembly:
https://www-s.acm.illinois.edu/sigwin/old/workshops/winasmtut.pdf[7]


Men hvis du har til hensigt at bruge NASM assembleren, så kan du henvise til svaret fra caffiend her:
Sådan skriver du hallo verden i assembler under Windows?