I am trying to re-learn assembly. I have been trying to find a tutorial for assembling a program using NASM on Windows, on a CPU with the x86_64 architecture. I have been unable to make any of the provided examples work.

I am asking to be provided:

  • A piece of code to assemble. The resulting program should output a message into the CLI.
  • CLI commands to make an object file and to do linkage of that into an executable file.

This should preferably be done using NASM, on Windows, on x86_64 architecture, but I’m at my wit’s end at this point, so I guess I will be fine with another assembler.

I intend to analyze the example and to use this as a starting point in my process of getting back into assembly.

  • lilypad [she/her, love/loves]@hexbear.net
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    13 days ago

    Its not windows or NASM but this site has some 64 bit linux examples using gnu assembler (the gnu userland default assembler). You could probably find some examples for windows with nasm if you look around.

    example code from the site
    # ----------------------------------------------------------------------------------------
    # Writes "Hello, World" to the console using only system calls. Runs on 64-bit Linux only.
    # To assemble and run:
    #
    #     gcc -c hello.s && ld hello.o && ./a.out
    #
    # or
    #
    #     gcc -nostdlib hello.s && ./a.out
    # ----------------------------------------------------------------------------------------
    
            .global _start
    
            .text
    _start:
            # write(1, message, 13)
            mov     $1, %rax                # system call 1 is write
            mov     $1, %rdi                # file handle 1 is stdout
            mov     $message, %rsi          # address of string to output
            mov     $13, %rdx               # number of bytes
            syscall                         # invoke operating system to do the write
    
            # exit(0)
            mov     $60, %rax               # system call 60 is exit
            xor     %rdi, %rdi              # we want return code 0
            syscall                         # invoke operating system to exit
    message:
            .ascii  "Hello, world\n"
    
    • Tomorrow_Farewell [any, they/them]@hexbear.netOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      13 days ago

      Unfortunately, I am looking specifically for examples for Windows. I need to figure out what I’m doing wrong.

      You could probably find some examples for windows with nasm if you look around

      I have looked around, and I have not found any working examples of such. That is exactly why I’m asking.